Index: kernel/arch/arm32/src/mm/page.c
===================================================================
--- kernel/arch/arm32/src/mm/page.c	(revision c67dbd622a32b92e827b239c60b0a0e72d711a01)
+++ kernel/arch/arm32/src/mm/page.c	(revision 8cbf1c333889cf14d44353c7d7d73d9dbf0441a3)
@@ -69,5 +69,5 @@
 #ifdef HIGH_EXCEPTION_VECTORS
 	/* Create mapping for exception table at high offset */
-	uintptr_t ev_frame = (uintptr_t) frame_alloc(ONE_FRAME, FRAME_NONE);
+	uintptr_t ev_frame = frame_alloc(ONE_FRAME, FRAME_NONE, 0);
 	page_mapping_insert(AS_KERNEL, EXC_BASE_ADDRESS, ev_frame, flags);
 #else
Index: kernel/arch/arm32/src/ras.c
===================================================================
--- kernel/arch/arm32/src/ras.c	(revision c67dbd622a32b92e827b239c60b0a0e72d711a01)
+++ kernel/arch/arm32/src/ras.c	(revision 8cbf1c333889cf14d44353c7d7d73d9dbf0441a3)
@@ -53,8 +53,8 @@
 	uintptr_t frame;
 
-	frame = (uintptr_t) frame_alloc(ONE_FRAME,
-	    FRAME_ATOMIC | FRAME_HIGHMEM);
+	frame = frame_alloc(ONE_FRAME,
+	    FRAME_ATOMIC | FRAME_HIGHMEM, 0);
 	if (!frame)
-		frame = (uintptr_t) frame_alloc(ONE_FRAME, FRAME_LOWMEM);
+		frame = frame_alloc(ONE_FRAME, FRAME_LOWMEM, 0);
 	ras_page = (uintptr_t *) km_map(frame,
 	    PAGE_SIZE, PAGE_READ | PAGE_WRITE | PAGE_USER | PAGE_CACHEABLE);
Index: kernel/arch/ia64/src/mm/vhpt.c
===================================================================
--- kernel/arch/ia64/src/mm/vhpt.c	(revision c67dbd622a32b92e827b239c60b0a0e72d711a01)
+++ kernel/arch/ia64/src/mm/vhpt.c	(revision 8cbf1c333889cf14d44353c7d7d73d9dbf0441a3)
@@ -42,6 +42,6 @@
 uintptr_t vhpt_set_up(void)
 {
-	vhpt_base = frame_alloc(VHPT_WIDTH - FRAME_WIDTH,
-	    FRAME_KA | FRAME_ATOMIC);
+	vhpt_base = (vhpt_entry_t *) PA2KA(frame_alloc(VHPT_WIDTH - FRAME_WIDTH,
+	    FRAME_ATOMIC, 0));
 	if (!vhpt_base)
 		panic("Kernel configured with VHPT but no memory for table.");
Index: kernel/arch/sparc64/src/mm/sun4u/as.c
===================================================================
--- kernel/arch/sparc64/src/mm/sun4u/as.c	(revision c67dbd622a32b92e827b239c60b0a0e72d711a01)
+++ kernel/arch/sparc64/src/mm/sun4u/as.c	(revision 8cbf1c333889cf14d44353c7d7d73d9dbf0441a3)
@@ -71,5 +71,5 @@
 	    sizeof(tsb_entry_t)) >> FRAME_WIDTH);
 	
-	uintptr_t tsb = (uintptr_t) frame_alloc(order, flags | FRAME_KA);
+	uintptr_t tsb = PA2KA(frame_alloc(order, flags, 0));
 	
 	if (!tsb)
Index: kernel/arch/sparc64/src/mm/sun4v/as.c
===================================================================
--- kernel/arch/sparc64/src/mm/sun4v/as.c	(revision c67dbd622a32b92e827b239c60b0a0e72d711a01)
+++ kernel/arch/sparc64/src/mm/sun4v/as.c	(revision 8cbf1c333889cf14d44353c7d7d73d9dbf0441a3)
@@ -69,5 +69,5 @@
 		(TSB_ENTRY_COUNT * sizeof(tsb_entry_t)) >> FRAME_WIDTH);
 	
-	uintptr_t tsb = (uintptr_t) frame_alloc(order, flags);
+	uintptr_t tsb = frame_alloc(order, flags, 0);
 	
 	if (!tsb)
Index: kernel/genarch/src/mm/as_pt.c
===================================================================
--- kernel/genarch/src/mm/as_pt.c	(revision c67dbd622a32b92e827b239c60b0a0e72d711a01)
+++ kernel/genarch/src/mm/as_pt.c	(revision 8cbf1c333889cf14d44353c7d7d73d9dbf0441a3)
@@ -73,6 +73,6 @@
 pte_t *ptl0_create(unsigned int flags)
 {
-	pte_t *dst_ptl0 = (pte_t *) frame_alloc(PTL0_SIZE,
-	    FRAME_LOWMEM | FRAME_KA);
+	pte_t *dst_ptl0 = (pte_t *) PA2KA(frame_alloc(PTL0_SIZE,
+	    FRAME_LOWMEM, 0));
 	size_t table_size = FRAME_SIZE << PTL0_SIZE;
 	
Index: kernel/genarch/src/mm/page_pt.c
===================================================================
--- kernel/genarch/src/mm/page_pt.c	(revision c67dbd622a32b92e827b239c60b0a0e72d711a01)
+++ kernel/genarch/src/mm/page_pt.c	(revision 8cbf1c333889cf14d44353c7d7d73d9dbf0441a3)
@@ -82,6 +82,6 @@
 	
 	if (GET_PTL1_FLAGS(ptl0, PTL0_INDEX(page)) & PAGE_NOT_PRESENT) {
-		pte_t *newpt = (pte_t *) frame_alloc(PTL1_SIZE,
-		    FRAME_LOWMEM | FRAME_KA);
+		pte_t *newpt = (pte_t *) PA2KA(frame_alloc(PTL1_SIZE,
+		    FRAME_LOWMEM, 0));
 		memsetb(newpt, FRAME_SIZE << PTL1_SIZE, 0);
 		SET_PTL1_ADDRESS(ptl0, PTL0_INDEX(page), KA2PA(newpt));
@@ -101,6 +101,6 @@
 	
 	if (GET_PTL2_FLAGS(ptl1, PTL1_INDEX(page)) & PAGE_NOT_PRESENT) {
-		pte_t *newpt = (pte_t *) frame_alloc(PTL2_SIZE,
-		    FRAME_LOWMEM | FRAME_KA);
+		pte_t *newpt = (pte_t *) PA2KA(frame_alloc(PTL2_SIZE,
+		    FRAME_LOWMEM, 0));
 		memsetb(newpt, FRAME_SIZE << PTL2_SIZE, 0);
 		SET_PTL2_ADDRESS(ptl1, PTL1_INDEX(page), KA2PA(newpt));
@@ -118,6 +118,6 @@
 	
 	if (GET_PTL3_FLAGS(ptl2, PTL2_INDEX(page)) & PAGE_NOT_PRESENT) {
-		pte_t *newpt = (pte_t *) frame_alloc(PTL3_SIZE,
-		    FRAME_LOWMEM | FRAME_KA);
+		pte_t *newpt = (pte_t *) PA2KA(frame_alloc(PTL3_SIZE,
+		    FRAME_LOWMEM, 0));
 		memsetb(newpt, FRAME_SIZE << PTL3_SIZE, 0);
 		SET_PTL3_ADDRESS(ptl2, PTL2_INDEX(page), KA2PA(newpt));
@@ -385,5 +385,5 @@
 		uintptr_t l1;
 
-		l1 = (uintptr_t) frame_alloc(order, FRAME_KA | FRAME_LOWMEM);
+		l1 = PA2KA(frame_alloc(order, FRAME_LOWMEM, 0));
 		memsetb((void *) l1, FRAME_SIZE << order, 0);
 		SET_PTL1_ADDRESS(ptl0, PTL0_INDEX(addr), KA2PA(l1));
Index: kernel/generic/include/mm/frame.h
===================================================================
--- kernel/generic/include/mm/frame.h	(revision c67dbd622a32b92e827b239c60b0a0e72d711a01)
+++ kernel/generic/include/mm/frame.h	(revision 8cbf1c333889cf14d44353c7d7d73d9dbf0441a3)
@@ -50,34 +50,32 @@
 typedef uint8_t frame_flags_t;
 
-#define FRAME_NONE        0x0
-/** Convert the frame address to kernel VA. */
-#define FRAME_KA          0x1
+#define FRAME_NONE        0x00
 /** Do not panic and do not sleep on failure. */
-#define FRAME_ATOMIC      0x2
+#define FRAME_ATOMIC      0x01
 /** Do not start reclaiming when no free memory. */
-#define FRAME_NO_RECLAIM  0x4
+#define FRAME_NO_RECLAIM  0x02
 /** Do not reserve / unreserve memory. */
-#define FRAME_NO_RESERVE  0x8
+#define FRAME_NO_RESERVE  0x04
 /** Allocate a frame which can be identity-mapped. */
-#define FRAME_LOWMEM	  0x10
+#define FRAME_LOWMEM      0x08
 /** Allocate a frame which cannot be identity-mapped. */
-#define FRAME_HIGHMEM	  0x20
+#define FRAME_HIGHMEM     0x10
 
 typedef uint8_t zone_flags_t;
 
-#define ZONE_NONE	0x0
+#define ZONE_NONE       0x00
 /** Available zone (free for allocation) */
-#define ZONE_AVAILABLE  0x1
+#define ZONE_AVAILABLE  0x01
 /** Zone is reserved (not available for allocation) */
-#define ZONE_RESERVED   0x2
+#define ZONE_RESERVED   0x02
 /** Zone is used by firmware (not available for allocation) */
-#define ZONE_FIRMWARE   0x4
+#define ZONE_FIRMWARE   0x04
 /** Zone contains memory that can be identity-mapped */
-#define ZONE_LOWMEM	0x8
+#define ZONE_LOWMEM     0x08
 /** Zone contains memory that cannot be identity-mapped */
-#define ZONE_HIGHMEM	0x10
+#define ZONE_HIGHMEM    0x10
 
 /** Mask of zone bits that must be matched exactly. */
-#define ZONE_EF_MASK	0x7
+#define ZONE_EF_MASK  0x07
 
 #define FRAME_TO_ZONE_FLAGS(ff) \
@@ -138,6 +136,7 @@
 NO_TRACE static inline size_t SIZE2FRAMES(size_t size)
 {
-	if (!size)
+	if (size == 0)
 		return 0;
+	
 	return (size_t) ((size - 1) >> FRAME_WIDTH) + 1;
 }
@@ -161,7 +160,7 @@
 extern void frame_init(void);
 extern bool frame_adjust_zone_bounds(bool, uintptr_t *, size_t *);
-extern void *frame_alloc_generic(uint8_t, frame_flags_t, size_t *);
-extern void *frame_alloc(uint8_t, frame_flags_t);
-extern void *frame_alloc_noreserve(uint8_t, frame_flags_t);
+extern uintptr_t frame_alloc_generic(uint8_t, frame_flags_t, uintptr_t, size_t *);
+extern uintptr_t frame_alloc(uint8_t, frame_flags_t, uintptr_t);
+extern uintptr_t frame_alloc_noreserve(uint8_t, frame_flags_t, uintptr_t);
 extern void frame_free_generic(uintptr_t, frame_flags_t);
 extern void frame_free(uintptr_t);
Index: kernel/generic/include/mm/page.h
===================================================================
--- kernel/generic/include/mm/page.h	(revision c67dbd622a32b92e827b239c60b0a0e72d711a01)
+++ kernel/generic/include/mm/page.h	(revision 8cbf1c333889cf14d44353c7d7d73d9dbf0441a3)
@@ -65,6 +65,6 @@
 extern void page_table_destroy(pte_t *);
 
-extern int page_find_mapping(uintptr_t, void **);
-extern sysarg_t sys_page_find_mapping(uintptr_t, void *);
+extern int page_find_mapping(uintptr_t, uintptr_t *);
+extern sysarg_t sys_page_find_mapping(uintptr_t, uintptr_t *);
 
 #endif
Index: kernel/generic/src/cpu/cpu.c
===================================================================
--- kernel/generic/src/cpu/cpu.c	(revision c67dbd622a32b92e827b239c60b0a0e72d711a01)
+++ kernel/generic/src/cpu/cpu.c	(revision 8cbf1c333889cf14d44353c7d7d73d9dbf0441a3)
@@ -73,6 +73,6 @@
 		size_t i;
 		for (i = 0; i < config.cpu_count; i++) {
-			cpus[i].stack = (uint8_t *) frame_alloc(STACK_FRAMES,
-			    FRAME_LOWMEM | FRAME_KA | FRAME_ATOMIC);
+			cpus[i].stack = (uint8_t *) PA2KA(frame_alloc(STACK_FRAMES,
+			    FRAME_LOWMEM | FRAME_ATOMIC, 0));
 			cpus[i].id = i;
 			
Index: kernel/generic/src/ddi/ddi.c
===================================================================
--- kernel/generic/src/ddi/ddi.c	(revision c67dbd622a32b92e827b239c60b0a0e72d711a01)
+++ kernel/generic/src/ddi/ddi.c	(revision 8cbf1c333889cf14d44353c7d7d73d9dbf0441a3)
@@ -314,5 +314,5 @@
 
 NO_TRACE static int dmamem_map(uintptr_t virt, size_t size, unsigned int map_flags,
-    unsigned int flags, void **phys)
+    unsigned int flags, uintptr_t *phys)
 {
 	ASSERT(TASK);
@@ -323,5 +323,5 @@
 
 NO_TRACE static int dmamem_map_anonymous(size_t size, unsigned int map_flags,
-    unsigned int flags, void **phys, uintptr_t *virt, uintptr_t bound)
+    unsigned int flags, uintptr_t *phys, uintptr_t *virt, uintptr_t bound)
 {
 	ASSERT(TASK);
@@ -336,15 +336,15 @@
 		order = fnzb(pages - 1) + 1;
 	
-	*phys = frame_alloc_noreserve(order, 0);
-	if (*phys == NULL)
+	*phys = frame_alloc_noreserve(order, 0, 0);
+	if (*phys == 0)
 		return ENOMEM;
 	
 	mem_backend_data_t backend_data;
-	backend_data.base = (uintptr_t) *phys;
+	backend_data.base = *phys;
 	backend_data.frames = pages;
 	
 	if (!as_area_create(TASK->as, map_flags, size,
 	    AS_AREA_ATTR_NONE, &phys_backend, &backend_data, virt, bound)) {
-		frame_free_noreserve((uintptr_t) *phys);
+		frame_free_noreserve(*phys);
 		return ENOMEM;
 	}
@@ -387,5 +387,5 @@
 		 */
 		
-		void *phys;
+		uintptr_t phys;
 		int rc = dmamem_map((uintptr_t) virt_ptr, size, map_flags,
 		    flags, &phys);
@@ -404,5 +404,5 @@
 		 */
 		
-		void *phys;
+		uintptr_t phys;
 		uintptr_t virt = (uintptr_t) -1;
 		int rc = dmamem_map_anonymous(size, map_flags, flags,
Index: kernel/generic/src/mm/frame.c
===================================================================
--- kernel/generic/src/mm/frame.c	(revision c67dbd622a32b92e827b239c60b0a0e72d711a01)
+++ kernel/generic/src/mm/frame.c	(revision 8cbf1c333889cf14d44353c7d7d73d9dbf0441a3)
@@ -873,5 +873,5 @@
 
 	return ADDR2PFN((uintptr_t) frame_alloc(order - FRAME_WIDTH,
-	    FRAME_LOWMEM | FRAME_ATOMIC));
+	    FRAME_LOWMEM | FRAME_ATOMIC, 0));
 }
 
@@ -1024,5 +1024,6 @@
  *
  */
-void *frame_alloc_generic(uint8_t order, frame_flags_t flags, size_t *pzone)
+uintptr_t frame_alloc_generic(uint8_t order, frame_flags_t flags,
+    uintptr_t constraint, size_t *pzone)
 {
 	size_t size = ((size_t) 1) << order;
@@ -1071,5 +1072,5 @@
 			if (!(flags & FRAME_NO_RESERVE))
 				reserve_free(size);
-			return NULL;
+			return 0;
 		}
 		
@@ -1126,18 +1127,17 @@
 		*pzone = znum;
 	
-	if (flags & FRAME_KA)
-		return (void *) PA2KA(PFN2ADDR(pfn));
-	
-	return (void *) PFN2ADDR(pfn);
-}
-
-void *frame_alloc(uint8_t order, frame_flags_t flags)
-{
-	return frame_alloc_generic(order, flags, NULL);
-}
-
-void *frame_alloc_noreserve(uint8_t order, frame_flags_t flags)
-{
-	return frame_alloc_generic(order, flags | FRAME_NO_RESERVE, NULL);
+	return PFN2ADDR(pfn);
+}
+
+uintptr_t frame_alloc(uint8_t order, frame_flags_t flags, uintptr_t constraint)
+{
+	return frame_alloc_generic(order, flags, constraint, NULL);
+}
+
+uintptr_t frame_alloc_noreserve(uint8_t order, frame_flags_t flags,
+    uintptr_t constraint)
+{
+	return frame_alloc_generic(order, flags | FRAME_NO_RESERVE, constraint,
+	    NULL);
 }
 
Index: kernel/generic/src/mm/km.c
===================================================================
--- kernel/generic/src/mm/km.c	(revision c67dbd622a32b92e827b239c60b0a0e72d711a01)
+++ kernel/generic/src/mm/km.c	(revision 8cbf1c333889cf14d44353c7d7d73d9dbf0441a3)
@@ -249,6 +249,6 @@
 	 * Allocate a frame, preferably from high memory.
 	 */
-	frame = (uintptr_t) frame_alloc(ONE_FRAME,
-	    FRAME_HIGHMEM | FRAME_ATOMIC | flags); 
+	frame = frame_alloc(ONE_FRAME,
+	    FRAME_HIGHMEM | FRAME_ATOMIC | flags, 0); 
 	if (frame) {
 		page = km_map(frame, PAGE_SIZE,
@@ -256,6 +256,5 @@
 		ASSERT(page);	// FIXME
 	} else {
-		frame = (uintptr_t) frame_alloc(ONE_FRAME,
-		    FRAME_LOWMEM | flags);
+		frame = frame_alloc(ONE_FRAME, FRAME_LOWMEM | flags, 0);
 		if (!frame)
 			return (uintptr_t) NULL;
Index: kernel/generic/src/mm/page.c
===================================================================
--- kernel/generic/src/mm/page.c	(revision c67dbd622a32b92e827b239c60b0a0e72d711a01)
+++ kernel/generic/src/mm/page.c	(revision 8cbf1c333889cf14d44353c7d7d73d9dbf0441a3)
@@ -169,5 +169,5 @@
 }
 
-int page_find_mapping(uintptr_t virt, void **phys)
+int page_find_mapping(uintptr_t virt, uintptr_t *phys)
 {
 	page_table_lock(AS, true);
@@ -179,5 +179,5 @@
 	}
 	
-	*phys = (void *) PTE_GET_FRAME(pte) +
+	*phys = PTE_GET_FRAME(pte) +
 	    (virt - ALIGN_DOWN(virt, PAGE_SIZE));
 	
@@ -193,7 +193,7 @@
  *
  */
-sysarg_t sys_page_find_mapping(uintptr_t virt, void *phys_ptr)
-{
-	void *phys;
+sysarg_t sys_page_find_mapping(uintptr_t virt, uintptr_t *phys_ptr)
+{
+	uintptr_t phys;
 	int rc = page_find_mapping(virt, &phys);
 	if (rc != EOK)
Index: kernel/generic/src/mm/slab.c
===================================================================
--- kernel/generic/src/mm/slab.c	(revision c67dbd622a32b92e827b239c60b0a0e72d711a01)
+++ kernel/generic/src/mm/slab.c	(revision 8cbf1c333889cf14d44353c7d7d73d9dbf0441a3)
@@ -182,5 +182,6 @@
 	size_t zone = 0;
 	
-	void *data = frame_alloc_generic(cache->order, FRAME_KA | flags, &zone);
+	void *data = (void *)
+	    PA2KA(frame_alloc_generic(cache->order, flags, 0, &zone));
 	if (!data) {
 		return NULL;
Index: kernel/generic/src/proc/thread.c
===================================================================
--- kernel/generic/src/proc/thread.c	(revision c67dbd622a32b92e827b239c60b0a0e72d711a01)
+++ kernel/generic/src/proc/thread.c	(revision 8cbf1c333889cf14d44353c7d7d73d9dbf0441a3)
@@ -192,5 +192,6 @@
 	kmflags &= ~FRAME_HIGHMEM;
 	
-	thread->kstack = (uint8_t *) frame_alloc(STACK_FRAMES, FRAME_KA | kmflags);
+	thread->kstack = (uint8_t *)
+	    PA2KA(frame_alloc(STACK_FRAMES, kmflags, 0));
 	if (!thread->kstack) {
 #ifdef CONFIG_FPU
Index: kernel/generic/src/time/clock.c
===================================================================
--- kernel/generic/src/time/clock.c	(revision c67dbd622a32b92e827b239c60b0a0e72d711a01)
+++ kernel/generic/src/time/clock.c	(revision 8cbf1c333889cf14d44353c7d7d73d9dbf0441a3)
@@ -81,6 +81,6 @@
 void clock_counter_init(void)
 {
-	void *faddr = frame_alloc(ONE_FRAME, FRAME_ATOMIC);
-	if (!faddr)
+	uintptr_t faddr = frame_alloc(ONE_FRAME, FRAME_ATOMIC, 0);
+	if (faddr == 0)
 		panic("Cannot allocate page for clock.");
 	
@@ -91,5 +91,5 @@
 	uptime->useconds = 0;
 	
-	clock_parea.pbase = (uintptr_t) faddr;
+	clock_parea.pbase = faddr;
 	clock_parea.frames = 1;
 	clock_parea.unpriv = true;
Index: kernel/test/mm/falloc1.c
===================================================================
--- kernel/test/mm/falloc1.c	(revision c67dbd622a32b92e827b239c60b0a0e72d711a01)
+++ kernel/test/mm/falloc1.c	(revision 8cbf1c333889cf14d44353c7d7d73d9dbf0441a3)
@@ -58,6 +58,6 @@
 			unsigned int allocated = 0;
 			for (unsigned int i = 0; i < (MAX_FRAMES >> order); i++) {
-				frames[allocated] = (uintptr_t)
-				    frame_alloc(order, FRAME_ATOMIC | FRAME_KA);
+				frames[allocated] =
+				    PA2KA(frame_alloc(order, FRAME_ATOMIC, 0));
 				
 				if (ALIGN_UP(frames[allocated], FRAME_SIZE << order) !=
Index: kernel/test/mm/falloc2.c
===================================================================
--- kernel/test/mm/falloc2.c	(revision c67dbd622a32b92e827b239c60b0a0e72d711a01)
+++ kernel/test/mm/falloc2.c	(revision 8cbf1c333889cf14d44353c7d7d73d9dbf0441a3)
@@ -53,6 +53,6 @@
 	uint8_t val = THREAD->tid % THREADS;
 	
-	void **frames = (void **)
-	    malloc(MAX_FRAMES * sizeof(void *), FRAME_ATOMIC);
+	uintptr_t *frames = (uintptr_t *)
+	    malloc(MAX_FRAMES * sizeof(uintptr_t), FRAME_ATOMIC);
 	if (frames == NULL) {
 		TPRINTF("Thread #%" PRIu64 " (cpu%u): "
@@ -74,7 +74,7 @@
 			for (unsigned int i = 0; i < (MAX_FRAMES >> order); i++) {
 				frames[allocated] =
-				    frame_alloc(order, FRAME_ATOMIC | FRAME_KA);
+				    PA2KA(frame_alloc(order, FRAME_ATOMIC, 0));
 				if (frames[allocated]) {
-					memsetb(frames[allocated], FRAME_SIZE << order, val);
+					memsetb((void *) frames[allocated], FRAME_SIZE << order, val);
 					allocated++;
 				} else
@@ -93,5 +93,5 @@
 					if (((uint8_t *) frames[i])[k] != val) {
 						TPRINTF("Thread #%" PRIu64 " (cpu%u): "
-						    "Unexpected data (%c) in block %p offset %zu\n",
+						    "Unexpected data (%c) in block %zu offset %zu\n",
 						    THREAD->tid, CPU->id, ((char *) frames[i])[k],
 						    frames[i], k);
Index: kernel/test/mm/mapping1.c
===================================================================
--- kernel/test/mm/mapping1.c	(revision c67dbd622a32b92e827b239c60b0a0e72d711a01)
+++ kernel/test/mm/mapping1.c	(revision 8cbf1c333889cf14d44353c7d7d73d9dbf0441a3)
@@ -42,10 +42,9 @@
 {
 	uintptr_t page0, page1;
-	uintptr_t frame;
 	uint32_t v;
 	int i;
 	
-	frame = (uintptr_t) frame_alloc(ONE_FRAME, FRAME_NONE);
-
+	uintptr_t frame = frame_alloc(ONE_FRAME, FRAME_NONE, 0);
+	
 	page0 = km_map(frame, FRAME_SIZE,
 	    PAGE_READ | PAGE_WRITE | PAGE_CACHEABLE);
