Index: kernel/generic/src/mm/page.c
===================================================================
--- kernel/generic/src/mm/page.c	(revision 41deb2ae92352629298dc5b5343d48f3edee449f)
+++ kernel/generic/src/mm/page.c	(revision 22f05611fe61be707c3bee218be98f8f16f46f17)
@@ -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);
