From 1b57bf3b98c0179d908f823141d9789ff2c78c67 Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Wed, 6 May 2009 13:06:47 +0100 Subject: [PATCH] --- yaml --- r: 144735 b: refs/heads/master c: 498343967613183611ac37dccb2846496d954c06 h: refs/heads/master i: 144733: 62474c55bdef4e0cdb2b69b9749a09dab1f6cbf2 144731: 77d212830a51ce7184c0fd29408437d3b9bf75cf 144727: a3d882825795c1e70c5139cd7cf2d9a1e41399a2 144719: 44b0719496f1b83c662c53701538cce58e4b840b 144703: 1fd508f13b77c8c487be6e6bc61365d294e803ae v: v3 --- [refs] | 2 +- trunk/arch/x86/mm/init.c | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index f9d305375d0e..76e4b9544695 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 61438766514a2d7f191ce1b3cf6812eabbef4ef7 +refs/heads/master: 498343967613183611ac37dccb2846496d954c06 diff --git a/trunk/arch/x86/mm/init.c b/trunk/arch/x86/mm/init.c index fd3da1dda1c9..ae4f7b5d7104 100644 --- a/trunk/arch/x86/mm/init.c +++ b/trunk/arch/x86/mm/init.c @@ -7,6 +7,7 @@ #include #include #include +#include #include #include @@ -304,8 +305,23 @@ unsigned long __init_refok init_memory_mapping(unsigned long start, #endif #ifdef CONFIG_X86_64 - if (!after_bootmem) + 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();