Index: generic/include/mm/frame.h
===================================================================
--- generic/include/mm/frame.h	(revision 677a6d50fe04baf1fc4de579c24ea8dd8da3099b)
+++ generic/include/mm/frame.h	(revision 8725fb4944fbd47ca21c696b0408dc6f7f8ce7bc)
@@ -39,6 +39,11 @@
 #define ONE_FRAME	0
 
-#define FRAME_KA	1	/* skip frames conflicting with user address space */
-#define FRAME_PANIC	2	/* panic on failure */
+#define FRAME_KA		1	/* skip frames conflicting with user address space */
+#define FRAME_PANIC		2	/* panic on failure */
+#define FRAME_NON_BLOCKING	4	/* do not panic and do not sleep on failure */
+
+#define FRAME_OK		0	/* frame_alloc return status */
+#define FRAME_NO_MEMORY		1	/* frame_alloc return status */
+#define FRAME_ERROR		2	/* frame_alloc return status */
 
 #define FRAME2ADDR(zone, frame)			((zone)->base + ((frame) - (zone)->frames) * FRAME_SIZE)
@@ -89,6 +94,8 @@
 extern void frame_init(void);
 extern void frame_initialize(frame_t *frame, zone_t *zone);
-__address frame_alloc(int flags, __u8 order);
+
+__address frame_alloc(int flags, __u8 order, int * status);
 extern void frame_free(__address addr);
+
 zone_t * get_zone_by_frame(frame_t * frame);
 
Index: generic/src/cpu/cpu.c
===================================================================
--- generic/src/cpu/cpu.c	(revision 677a6d50fe04baf1fc4de579c24ea8dd8da3099b)
+++ generic/src/cpu/cpu.c	(revision 8725fb4944fbd47ca21c696b0408dc6f7f8ce7bc)
@@ -62,5 +62,5 @@
 
 		for (i=0; i < config.cpu_count; i++) {
-			cpus[i].stack = (__u8 *) frame_alloc(FRAME_KA | FRAME_PANIC, ONE_FRAME);
+			cpus[i].stack = (__u8 *) frame_alloc(FRAME_KA | FRAME_PANIC, ONE_FRAME, NULL);
 			
 			cpus[i].id = i;
Index: generic/src/mm/frame.c
===================================================================
--- generic/src/mm/frame.c	(revision 677a6d50fe04baf1fc4de579c24ea8dd8da3099b)
+++ generic/src/mm/frame.c	(revision 8725fb4944fbd47ca21c696b0408dc6f7f8ce7bc)
@@ -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 8725fb4944fbd47ca21c696b0408dc6f7f8ce7bc)
@@ -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");
Index: generic/src/proc/thread.c
===================================================================
--- generic/src/proc/thread.c	(revision 677a6d50fe04baf1fc4de579c24ea8dd8da3099b)
+++ generic/src/proc/thread.c	(revision 8725fb4944fbd47ca21c696b0408dc6f7f8ce7bc)
@@ -174,7 +174,7 @@
 		spinlock_initialize(&t->lock, "thread_t_lock");
 	
-		frame_ks = frame_alloc(FRAME_KA, ONE_FRAME);
+		frame_ks = frame_alloc(FRAME_KA, ONE_FRAME, NULL);
 		if (THREAD_USER_STACK & flags) {
-			frame_us = frame_alloc(FRAME_KA, ONE_FRAME);
+			frame_us = frame_alloc(FRAME_KA, ONE_FRAME, NULL);
 		}
 
