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 <[email protected]>
---
 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

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to