Messages in this thread Patch in this message | | | From | Yinghai Lu <> | Subject | [PATCH 04/19] x86, mm: only keep initial mapping for ram | Date | Thu, 18 Oct 2012 13:50:15 -0700 |
| |
0 mean any e820 type, for any range is overlapped with any entry in e820, kernel will keep it's initial page table mapping.
What we want is only keeping initial page table for ram range.
Change to E820_RAM and E820_RESERVED_KERN.
Signed-off-by: Yinghai Lu <yinghai@kernel.org> --- arch/x86/mm/init_64.c | 9 ++++++--- 1 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c index 61b3c44..4898e80 100644 --- a/arch/x86/mm/init_64.c +++ b/arch/x86/mm/init_64.c @@ -373,7 +373,8 @@ phys_pte_init(pte_t *pte_page, unsigned long addr, unsigned long end, next = (addr & PAGE_MASK) + PAGE_SIZE; if (addr >= end) { if (!after_bootmem && - !e820_any_mapped(addr & PAGE_MASK, next, 0)) + !e820_any_mapped(addr & PAGE_MASK, next, E820_RAM) && + !e820_any_mapped(addr & PAGE_MASK, next, E820_RESERVED_KERN)) set_pte(pte, __pte(0)); continue; } @@ -420,7 +421,8 @@ phys_pmd_init(pmd_t *pmd_page, unsigned long address, unsigned long end, next = (address & PMD_MASK) + PMD_SIZE; if (address >= end) { if (!after_bootmem && - !e820_any_mapped(address & PMD_MASK, next, 0)) + !e820_any_mapped(address & PMD_MASK, next, E820_RAM) && + !e820_any_mapped(address & PMD_MASK, next, E820_RESERVED_KERN)) set_pmd(pmd, __pmd(0)); continue; } @@ -494,7 +496,8 @@ phys_pud_init(pud_t *pud_page, unsigned long addr, unsigned long end, next = (addr & PUD_MASK) + PUD_SIZE; if (addr >= end) { if (!after_bootmem && - !e820_any_mapped(addr & PUD_MASK, next, 0)) + !e820_any_mapped(addr & PUD_MASK, next, E820_RAM) && + !e820_any_mapped(addr & PUD_MASK, next, E820_RESERVED_KERN)) set_pud(pud, __pud(0)); continue; } -- 1.7.7
| |