Index: generic/src/mm/frame.c
===================================================================
--- generic/src/mm/frame.c	(revision 677a6d50fe04baf1fc4de579c24ea8dd8da3099b)
+++ generic/src/mm/frame.c	(revision 42edee68a13aac5a6de6c8e953f681abf64096ff)
@@ -84,5 +84,5 @@
  * @return Allocated frame.
  */
-__address frame_alloc(int flags, __u8 order) 
+__address frame_alloc(int flags, __u8 order, int * status) 
 {
 	ipl_t ipl;
@@ -118,4 +118,6 @@
 			panic("Can't allocate frame.\n");
 		
+		
+		
 		/*
 		 * TODO: Sleep until frames are available again.
@@ -124,4 +126,10 @@
 		interrupts_restore(ipl);
 
+		if (flags & FRAME_NON_BLOCKING) {
+			ASSERT(status != NULL);
+			*status = FRAME_NO_MEMORY;
+			return NULL;
+		}
+		
 		panic("Sleep not implemented.\n");
 		goto loop;
@@ -151,4 +159,9 @@
 	if (flags & FRAME_KA)
 		v = PA2KA(v);
+	
+	if (flags & FRAME_NON_BLOCKING) {
+		ASSERT(status != NULL);
+		*status = FRAME_OK;
+	}
 	
 	return v;
Index: generic/src/mm/vm.c
===================================================================
--- generic/src/mm/vm.c	(revision 677a6d50fe04baf1fc4de579c24ea8dd8da3099b)
+++ generic/src/mm/vm.c	(revision 42edee68a13aac5a6de6c8e953f681abf64096ff)
@@ -71,5 +71,5 @@
 		
 			src_ptl0 = (pte_t *) PA2KA((__address) GET_PTL0_ADDRESS());
-			dst_ptl0 = (pte_t *) frame_alloc(FRAME_KA | FRAME_PANIC, ONE_FRAME);
+			dst_ptl0 = (pte_t *) frame_alloc(FRAME_KA | FRAME_PANIC, ONE_FRAME, NULL);
 
 //			memsetb((__address) dst_ptl0, PAGE_SIZE, 0);
@@ -117,5 +117,5 @@
 		
 		for (i=0; i<size; i++)
-			a->mapping[i] = frame_alloc(0, ONE_FRAME);
+			a->mapping[i] = frame_alloc(0, ONE_FRAME, NULL);
 		
 		spinlock_initialize(&a->lock, "vm_area_lock");
