Revert "x86: Cleanup highmap after brk is concluded"
[linux-flexiantxendom0-natty.git] / arch / x86 / mm / init.c
index f13ff3a..947f42a 100644 (file)
@@ -279,6 +279,25 @@ unsigned long __init_refok init_memory_mapping(unsigned long start,
        load_cr3(swapper_pg_dir);
 #endif
 
+#ifdef CONFIG_X86_64
+       if (!after_bootmem && !start) {
+               pud_t *pud;
+               pmd_t *pmd;
+
+               mmu_cr4_features = read_cr4();
+
+               /*
+                * _brk_end cannot change anymore, but it and _end may be
+                * located on different 2M pages. cleanup_highmap(), however,
+                * can only consider _end when it runs, so destroy any
+                * mappings beyond _brk_end here.
+                */
+               pud = pud_offset(pgd_offset_k(_brk_end), _brk_end);
+               pmd = pmd_offset(pud, _brk_end - 1);
+               while (++pmd <= pmd_offset(pud, (unsigned long)_end - 1))
+                       pmd_clear(pmd);
+       }
+#endif
        __flush_tlb_all();
 
        if (!after_bootmem && e820_table_end > e820_table_start)