Index: kernel/generic/src/cpu/cpu.c
===================================================================
--- kernel/generic/src/cpu/cpu.c	(revision 5df19638ae7b362a07b4f8c7b1647a3adcb53862)
+++ kernel/generic/src/cpu/cpu.c	(revision cd3b3802ee73ed2b2467458eb3b06bd7d0bf0879)
@@ -73,12 +73,15 @@
 		size_t i;
 		for (i = 0; i < config.cpu_count; i++) {
-			cpus[i].stack = (uint8_t *) PA2KA(frame_alloc(STACK_FRAMES,
-			    FRAME_LOWMEM | FRAME_ATOMIC, STACK_SIZE - 1));
+			uintptr_t stack_phys = frame_alloc(STACK_FRAMES,
+			    FRAME_LOWMEM | FRAME_ATOMIC, STACK_SIZE - 1);
+			if (!stack_phys)
+				panic("Cannot allocate CPU stack.");
+			
+			cpus[i].stack = (uint8_t *) PA2KA(stack_phys);
 			cpus[i].id = i;
 			
 			irq_spinlock_initialize(&cpus[i].lock, "cpus[].lock");
 			
-			unsigned int j;
-			for (j = 0; j < RQ_COUNT; j++) {
+			for (unsigned int j = 0; j < RQ_COUNT; j++) {
 				irq_spinlock_initialize(&cpus[i].rq[j].lock, "cpus[].rq[].lock");
 				list_initialize(&cpus[i].rq[j].rq);
Index: kernel/generic/src/mm/frame.c
===================================================================
--- kernel/generic/src/mm/frame.c	(revision 5df19638ae7b362a07b4f8c7b1647a3adcb53862)
+++ kernel/generic/src/mm/frame.c	(revision cd3b3802ee73ed2b2467458eb3b06bd7d0bf0879)
@@ -374,4 +374,5 @@
 		return;
 	
+	frame->refcount = 1;
 	bitmap_set_range(&zone->bitmap, index, 1);
 	
Index: kernel/generic/src/mm/slab.c
===================================================================
--- kernel/generic/src/mm/slab.c	(revision 5df19638ae7b362a07b4f8c7b1647a3adcb53862)
+++ kernel/generic/src/mm/slab.c	(revision cd3b3802ee73ed2b2467458eb3b06bd7d0bf0879)
@@ -182,8 +182,10 @@
 	size_t zone = 0;
 	
-	void *data = (void *)
-	    PA2KA(frame_alloc_generic(cache->frames, flags, 0, &zone));
-	if (!data)
+	uintptr_t data_phys =
+	    frame_alloc_generic(cache->frames, flags, 0, &zone);
+	if (!data_phys)
 		return NULL;
+	
+	void *data = (void *) PA2KA(data_phys);
 	
 	slab_t *slab;
Index: kernel/generic/src/proc/thread.c
===================================================================
--- kernel/generic/src/proc/thread.c	(revision 5df19638ae7b362a07b4f8c7b1647a3adcb53862)
+++ kernel/generic/src/proc/thread.c	(revision cd3b3802ee73ed2b2467458eb3b06bd7d0bf0879)
@@ -192,7 +192,7 @@
 	kmflags &= ~FRAME_HIGHMEM;
 	
-	thread->kstack = (uint8_t *)
-	    PA2KA(frame_alloc(STACK_FRAMES, kmflags, STACK_SIZE - 1));
-	if (!thread->kstack) {
+	uintptr_t stack_phys =
+	    frame_alloc(STACK_FRAMES, kmflags, STACK_SIZE - 1);
+	if (!stack_phys) {
 #ifdef CONFIG_FPU
 		if (thread->saved_fpu_context)
@@ -201,4 +201,6 @@
 		return -1;
 	}
+	
+	thread->kstack = (uint8_t *) PA2KA(stack_phys);
 	
 #ifdef CONFIG_UDEBUG
