Index: kernel/generic/src/mm/frame.c
===================================================================
--- kernel/generic/src/mm/frame.c	(revision aaceebc420bd2787add67fcb464322186d7e2973)
+++ kernel/generic/src/mm/frame.c	(revision a60e90b77be0a223cc67fdf941b5d620622260c6)
@@ -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);
 }
 
