ARM: 9266/1: mm: fix no-MMU ZERO_PAGE() implementation
[sfrench/cifs-2.6.git] / arch / arm / mm / nommu.c
index c42debaded95c3486f02bf08f695650912af935f..c1494a4dee25b535f9153be56050520eb6c3521b 100644 (file)
 
 unsigned long vectors_base;
 
+/*
+ * empty_zero_page is a special page that is used for
+ * zero-initialized data and COW.
+ */
+struct page *empty_zero_page;
+EXPORT_SYMBOL(empty_zero_page);
+
 #ifdef CONFIG_ARM_MPU
 struct mpu_rgn_info mpu_rgn_info;
 #endif
@@ -148,9 +155,21 @@ void __init adjust_lowmem_bounds(void)
  */
 void __init paging_init(const struct machine_desc *mdesc)
 {
+       void *zero_page;
+
        early_trap_init((void *)vectors_base);
        mpu_setup();
+
+       /* allocate the zero page. */
+       zero_page = memblock_alloc(PAGE_SIZE, PAGE_SIZE);
+       if (!zero_page)
+               panic("%s: Failed to allocate %lu bytes align=0x%lx\n",
+                     __func__, PAGE_SIZE, PAGE_SIZE);
+
        bootmem_init();
+
+       empty_zero_page = virt_to_page(zero_page);
+       flush_dcache_page(empty_zero_page);
 }
 
 /*