Index: kernel/generic/src/mm/page.c
===================================================================
--- kernel/generic/src/mm/page.c	(revision c868e2d76f25a71fcfed3d81a934a16b64b0ce81)
+++ kernel/generic/src/mm/page.c	(revision efb48ebf4be82c1df6d4bef51b7a15c85de1af3f)
@@ -76,4 +76,6 @@
 #include <errno.h>
 #include <align.h>
+#include <macros.h>
+#include <bitops.h>
 
 /** Virtual operations for page subsystem. */
@@ -195,8 +197,10 @@
 	uintptr_t virtaddr;
 	size_t asize;
+	size_t align;
 	pfn_t i;
 
 	asize = ALIGN_UP(size, PAGE_SIZE);
-	virtaddr = km_page_alloc(asize, PAGE_SIZE);
+	align = ispwr2(size) ? size : (1U << (fnzb(size) + 1));
+	virtaddr = km_page_alloc(asize, align);
 
 	page_table_lock(AS_KERNEL, true);
