Index: kernel/arch/amd64/src/vreg.c
===================================================================
--- kernel/arch/amd64/src/vreg.c	(revision b1276d443d5ca6cf4813dcbce655a4931dd165c1)
+++ kernel/arch/amd64/src/vreg.c	(revision 6bf5b8cd8ea2cab6203e1dd42e25d90fd7628fa6)
@@ -66,5 +66,5 @@
 		panic("Cannot allocate VREG frame.");
 
-	page = (uint64_t *) km_map(frame, PAGE_SIZE,
+	page = (uint64_t *) km_map(frame, PAGE_SIZE, PAGE_SIZE,
 	    PAGE_READ | PAGE_WRITE | PAGE_USER | PAGE_CACHEABLE);
 
Index: kernel/arch/arm32/src/mach/beagleboardxm/beagleboardxm.c
===================================================================
--- kernel/arch/arm32/src/mach/beagleboardxm/beagleboardxm.c	(revision b1276d443d5ca6cf4813dcbce655a4931dd165c1)
+++ kernel/arch/arm32/src/mach/beagleboardxm/beagleboardxm.c	(revision 6bf5b8cd8ea2cab6203e1dd42e25d90fd7628fa6)
@@ -102,5 +102,5 @@
 	beagleboard.irc_addr =
 	    (void *) km_map(AMDM37x_IRC_BASE_ADDRESS, AMDM37x_IRC_SIZE,
-	    PAGE_NOT_CACHEABLE);
+	    KM_NATURAL_ALIGNMENT, PAGE_NOT_CACHEABLE);
 	assert(beagleboard.irc_addr);
 	omap_irc_init(beagleboard.irc_addr);
Index: kernel/arch/arm32/src/mach/beaglebone/beaglebone.c
===================================================================
--- kernel/arch/arm32/src/mach/beaglebone/beaglebone.c	(revision b1276d443d5ca6cf4813dcbce655a4931dd165c1)
+++ kernel/arch/arm32/src/mach/beaglebone/beaglebone.c	(revision 6bf5b8cd8ea2cab6203e1dd42e25d90fd7628fa6)
@@ -88,14 +88,15 @@
 {
 	bbone.irc_addr = (void *) km_map(AM335x_IRC_BASE_ADDRESS,
-	    AM335x_IRC_SIZE, PAGE_NOT_CACHEABLE);
+	    AM335x_IRC_SIZE, KM_NATURAL_ALIGNMENT, PAGE_NOT_CACHEABLE);
 
 	bbone.cm_per_addr = (void *) km_map(AM335x_CM_PER_BASE_ADDRESS,
-	    AM335x_CM_PER_SIZE, PAGE_NOT_CACHEABLE);
+	    AM335x_CM_PER_SIZE, KM_NATURAL_ALIGNMENT, PAGE_NOT_CACHEABLE);
 
 	bbone.cm_dpll_addr = (void *) km_map(AM335x_CM_DPLL_BASE_ADDRESS,
-	    AM335x_CM_DPLL_SIZE, PAGE_NOT_CACHEABLE);
+	    AM335x_CM_DPLL_SIZE, KM_NATURAL_ALIGNMENT, PAGE_NOT_CACHEABLE);
 
 	bbone.ctrl_module = (void *) km_map(AM335x_CTRL_MODULE_BASE_ADDRESS,
-	    AM335x_CTRL_MODULE_SIZE, PAGE_NOT_CACHEABLE);
+	    AM335x_CTRL_MODULE_SIZE, KM_NATURAL_ALIGNMENT,
+	    PAGE_NOT_CACHEABLE);
 
 	assert(bbone.irc_addr != NULL);
Index: kernel/arch/arm32/src/mach/gta02/gta02.c
===================================================================
--- kernel/arch/arm32/src/mach/gta02/gta02.c	(revision b1276d443d5ca6cf4813dcbce655a4931dd165c1)
+++ kernel/arch/arm32/src/mach/gta02/gta02.c	(revision 6bf5b8cd8ea2cab6203e1dd42e25d90fd7628fa6)
@@ -103,6 +103,6 @@
 
 	gta02_timer = (void *) km_map(S3C24XX_TIMER_ADDRESS, PAGE_SIZE,
-	    PAGE_NOT_CACHEABLE);
-	irqc_regs = (void *) km_map(S3C24XX_IRQC_ADDRESS, PAGE_SIZE,
+	    PAGE_SIZE, PAGE_NOT_CACHEABLE);
+	irqc_regs = (void *) km_map(S3C24XX_IRQC_ADDRESS, PAGE_SIZE, PAGE_SIZE,
 	    PAGE_NOT_CACHEABLE);
 
Index: kernel/arch/arm32/src/mach/integratorcp/integratorcp.c
===================================================================
--- kernel/arch/arm32/src/mach/integratorcp/integratorcp.c	(revision b1276d443d5ca6cf4813dcbce655a4931dd165c1)
+++ kernel/arch/arm32/src/mach/integratorcp/integratorcp.c	(revision 6bf5b8cd8ea2cab6203e1dd42e25d90fd7628fa6)
@@ -135,11 +135,12 @@
 void icp_init(void)
 {
-	icp.hw_map.uart = km_map(ICP_UART, PAGE_SIZE,
-	    PAGE_WRITE | PAGE_NOT_CACHEABLE);
-	icp.hw_map.kbd_ctrl = km_map(ICP_KBD, PAGE_SIZE, PAGE_NOT_CACHEABLE);
+	icp.hw_map.uart = km_map(ICP_UART, PAGE_SIZE, PAGE_SIZE,
+	    PAGE_WRITE | PAGE_NOT_CACHEABLE);
+	icp.hw_map.kbd_ctrl = km_map(ICP_KBD, PAGE_SIZE, PAGE_SIZE,
+	    PAGE_NOT_CACHEABLE);
 	icp.hw_map.kbd_stat = icp.hw_map.kbd_ctrl + ICP_KBD_STAT;
 	icp.hw_map.kbd_data = icp.hw_map.kbd_ctrl + ICP_KBD_DATA;
 	icp.hw_map.kbd_intstat = icp.hw_map.kbd_ctrl + ICP_KBD_INTR_STAT;
-	icp.hw_map.rtc = km_map(ICP_RTC, PAGE_SIZE,
+	icp.hw_map.rtc = km_map(ICP_RTC, PAGE_SIZE, PAGE_SIZE,
 	    PAGE_WRITE | PAGE_NOT_CACHEABLE);
 	icp.hw_map.rtc1_load = icp.hw_map.rtc + ICP_RTC1_LOAD_OFFSET;
@@ -150,12 +151,12 @@
 	icp.hw_map.rtc1_intrstat = icp.hw_map.rtc + ICP_RTC1_INTRSTAT_OFFSET;
 
-	icp.hw_map.irqc = km_map(ICP_IRQC, PAGE_SIZE,
+	icp.hw_map.irqc = km_map(ICP_IRQC, PAGE_SIZE, PAGE_SIZE,
 	    PAGE_WRITE | PAGE_NOT_CACHEABLE);
 	icp.hw_map.irqc_mask = icp.hw_map.irqc + ICP_IRQC_MASK_OFFSET;
 	icp.hw_map.irqc_unmask = icp.hw_map.irqc + ICP_IRQC_UNMASK_OFFSET;
-	icp.hw_map.cmcr = km_map(ICP_CMCR, PAGE_SIZE,
+	icp.hw_map.cmcr = km_map(ICP_CMCR, PAGE_SIZE, PAGE_SIZE,
 	    PAGE_WRITE | PAGE_NOT_CACHEABLE);
 	icp.hw_map.sdramcr = icp.hw_map.cmcr + ICP_SDRAMCR_OFFSET;
-	icp.hw_map.vga = km_map(ICP_VGA, PAGE_SIZE,
+	icp.hw_map.vga = km_map(ICP_VGA, PAGE_SIZE, PAGE_SIZE,
 	    PAGE_WRITE | PAGE_NOT_CACHEABLE);
 
Index: kernel/arch/arm32/src/mach/raspberrypi/raspberrypi.c
===================================================================
--- kernel/arch/arm32/src/mach/raspberrypi/raspberrypi.c	(revision b1276d443d5ca6cf4813dcbce655a4931dd165c1)
+++ kernel/arch/arm32/src/mach/raspberrypi/raspberrypi.c	(revision 6bf5b8cd8ea2cab6203e1dd42e25d90fd7628fa6)
@@ -103,5 +103,5 @@
 	/* Initialize interrupt controller */
 	raspi.irc = (void *) km_map(BCM2835_IRC_ADDR, sizeof(bcm2835_irc_t),
-	    PAGE_NOT_CACHEABLE);
+	    KM_NATURAL_ALIGNMENT, PAGE_NOT_CACHEABLE);
 	assert(raspi.irc);
 	bcm2835_irc_init(raspi.irc);
@@ -109,6 +109,5 @@
 	/* Initialize system timer */
 	raspi.timer = (void *) km_map(BCM2835_TIMER_ADDR,
-	    sizeof(bcm2835_timer_t),
-	    PAGE_NOT_CACHEABLE);
+	    sizeof(bcm2835_timer_t), KM_NATURAL_ALIGNMENT, PAGE_NOT_CACHEABLE);
 }
 
Index: kernel/arch/arm32/src/ras.c
===================================================================
--- kernel/arch/arm32/src/ras.c	(revision b1276d443d5ca6cf4813dcbce655a4931dd165c1)
+++ kernel/arch/arm32/src/ras.c	(revision 6bf5b8cd8ea2cab6203e1dd42e25d90fd7628fa6)
@@ -56,6 +56,6 @@
 		frame = frame_alloc(1, FRAME_LOWMEM, 0);
 
-	ras_page = (uintptr_t *) km_map(frame,
-	    PAGE_SIZE, PAGE_READ | PAGE_WRITE | PAGE_USER | PAGE_CACHEABLE);
+	ras_page = (uintptr_t *) km_map(frame, PAGE_SIZE, PAGE_SIZE,
+	    PAGE_READ | PAGE_WRITE | PAGE_USER | PAGE_CACHEABLE);
 
 	memsetb(ras_page, PAGE_SIZE, 0);
Index: kernel/arch/ia32/src/smp/smp.c
===================================================================
--- kernel/arch/ia32/src/smp/smp.c	(revision b1276d443d5ca6cf4813dcbce655a4931dd165c1)
+++ kernel/arch/ia32/src/smp/smp.c	(revision 6bf5b8cd8ea2cab6203e1dd42e25d90fd7628fa6)
@@ -76,7 +76,7 @@
 	if (config.cpu_count > 1) {
 		l_apic = (uint32_t *) km_map((uintptr_t) l_apic, PAGE_SIZE,
-		    PAGE_WRITE | PAGE_NOT_CACHEABLE);
+		    PAGE_SIZE, PAGE_WRITE | PAGE_NOT_CACHEABLE);
 		io_apic = (uint32_t *) km_map((uintptr_t) io_apic, PAGE_SIZE,
-		    PAGE_WRITE | PAGE_NOT_CACHEABLE);
+		    PAGE_SIZE, PAGE_WRITE | PAGE_NOT_CACHEABLE);
 	}
 }
Index: kernel/arch/ia32/src/vreg.c
===================================================================
--- kernel/arch/ia32/src/vreg.c	(revision b1276d443d5ca6cf4813dcbce655a4931dd165c1)
+++ kernel/arch/ia32/src/vreg.c	(revision 6bf5b8cd8ea2cab6203e1dd42e25d90fd7628fa6)
@@ -67,5 +67,5 @@
 		panic("Cannot allocate VREG frame.");
 
-	page = (uint32_t *) km_map(frame, PAGE_SIZE,
+	page = (uint32_t *) km_map(frame, PAGE_SIZE, PAGE_SIZE,
 	    PAGE_READ | PAGE_WRITE | PAGE_USER | PAGE_CACHEABLE);
 
Index: kernel/arch/ia64/src/ia64.c
===================================================================
--- kernel/arch/ia64/src/ia64.c	(revision b1276d443d5ca6cf4813dcbce655a4931dd165c1)
+++ kernel/arch/ia64/src/ia64.c	(revision 6bf5b8cd8ea2cab6203e1dd42e25d90fd7628fa6)
@@ -106,5 +106,5 @@
 static void iosapic_init(void)
 {
-	uintptr_t IOSAPIC = km_map(iosapic_base, PAGE_SIZE,
+	uintptr_t IOSAPIC = km_map(iosapic_base, PAGE_SIZE, PAGE_SIZE,
 	    PAGE_WRITE | PAGE_NOT_CACHEABLE);
 	int i;
@@ -136,5 +136,5 @@
 		/* Map the page with legacy I/O. */
 		legacyio_virt_base = km_map(LEGACYIO_PHYS_BASE, LEGACYIO_SIZE,
-		    PAGE_WRITE | PAGE_NOT_CACHEABLE);
+		    KM_NATURAL_ALIGNMENT, PAGE_WRITE | PAGE_NOT_CACHEABLE);
 
 		iosapic_init();
Index: kernel/arch/ppc32/src/drivers/pic.c
===================================================================
--- kernel/arch/ppc32/src/drivers/pic.c	(revision b1276d443d5ca6cf4813dcbce655a4931dd165c1)
+++ kernel/arch/ppc32/src/drivers/pic.c	(revision 6bf5b8cd8ea2cab6203e1dd42e25d90fd7628fa6)
@@ -42,5 +42,6 @@
 void pic_init(uintptr_t base, size_t size, cir_t *cir, void **cir_arg)
 {
-	pic = (uint32_t *) km_map(base, size, PAGE_WRITE | PAGE_NOT_CACHEABLE);
+	pic = (uint32_t *) km_map(base, size, KM_NATURAL_ALIGNMENT,
+	    PAGE_WRITE | PAGE_NOT_CACHEABLE);
 	*cir = pic_ack_interrupt;
 	*cir_arg = NULL;
Index: kernel/arch/ppc32/src/ppc32.c
===================================================================
--- kernel/arch/ppc32/src/ppc32.c	(revision b1276d443d5ca6cf4813dcbce655a4931dd165c1)
+++ kernel/arch/ppc32/src/ppc32.c	(revision 6bf5b8cd8ea2cab6203e1dd42e25d90fd7628fa6)
@@ -242,4 +242,5 @@
 
 		cuda_t *cuda = (cuda_t *) (km_map(aligned_addr, offset + size,
+		    KM_NATURAL_ALIGNMENT,
 		    PAGE_WRITE | PAGE_NOT_CACHEABLE) + offset);
 
Index: kernel/arch/sparc64/src/drivers/kbd.c
===================================================================
--- kernel/arch/sparc64/src/drivers/kbd.c	(revision b1276d443d5ca6cf4813dcbce655a4931dd165c1)
+++ kernel/arch/sparc64/src/drivers/kbd.c	(revision 6bf5b8cd8ea2cab6203e1dd42e25d90fd7628fa6)
@@ -119,5 +119,5 @@
 
 	ioport8_t *ns16550 = (ioport8_t *) (km_map(aligned_addr, offset + size,
-	    PAGE_WRITE | PAGE_NOT_CACHEABLE) + offset);
+	    KM_NATURAL_ALIGNMENT, PAGE_WRITE | PAGE_NOT_CACHEABLE) + offset);
 
 	ns16550_instance_t *ns16550_instance = ns16550_init(ns16550, 0, inr, cir,
Index: kernel/arch/sparc64/src/drivers/pci.c
===================================================================
--- kernel/arch/sparc64/src/drivers/pci.c	(revision b1276d443d5ca6cf4813dcbce655a4931dd165c1)
+++ kernel/arch/sparc64/src/drivers/pci.c	(revision 6bf5b8cd8ea2cab6203e1dd42e25d90fd7628fa6)
@@ -110,5 +110,5 @@
 	pci->op = &pci_sabre_ops;
 	pci->reg = (uint64_t *) km_map(paddr, reg[SABRE_INTERNAL_REG].size,
-	    PAGE_WRITE | PAGE_NOT_CACHEABLE);
+	    KM_NATURAL_ALIGNMENT, PAGE_WRITE | PAGE_NOT_CACHEABLE);
 
 	return pci;
@@ -152,5 +152,5 @@
 	pci->op = &pci_psycho_ops;
 	pci->reg = (uint64_t *) km_map(paddr, reg[PSYCHO_INTERNAL_REG].size,
-	    PAGE_WRITE | PAGE_NOT_CACHEABLE);
+	    KM_NATURAL_ALIGNMENT, PAGE_WRITE | PAGE_NOT_CACHEABLE);
 
 	return pci;
