summaryrefslogtreecommitdiff
path: root/include/asm-x86/pgtable_64.h
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2008-02-15 19:29:12 +0300
committerThomas Gleixner <tglx@linutronix.de>2008-02-18 22:54:14 +0300
commit31eedd823c1bf3650c450346a0d0c39431034eb9 (patch)
treeaf65f4c77b88f5d907aa54ff1e67b1bdf1488d67 /include/asm-x86/pgtable_64.h
parentc31c7d4844ea4817692ae16bf70f9c96c05a50eb (diff)
downloadlinux-31eedd823c1bf3650c450346a0d0c39431034eb9.tar.xz
x86: zap invalid and unused pmds in early boot
The early boot code maps KERNEL_TEXT_SIZE (currently 40MB) starting from __START_KERNEL_map. The kernel itself only needs _text to _end mapped in the high alias. On relocatible kernels the ASM setup code adjusts the compile time created high mappings to the relocation. This creates invalid pmd entries for negative offsets: 0xffffffff80000000 -> pmd entry: ffffffffff2001e3 It points outside of the physical address space and is marked present. This starts at the virtual address __START_KERNEL_map and goes up to the point where the first valid physical address (0x0) is mapped. Zap the mappings before _text and after _end right away in early boot. This removes also the invalid entries. Furthermore it simplifies the range check for high aliases. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Acked-by: H. Peter Anvin <hpa@zytor.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'include/asm-x86/pgtable_64.h')
-rw-r--r--include/asm-x86/pgtable_64.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/include/asm-x86/pgtable_64.h b/include/asm-x86/pgtable_64.h
index bd4740a60f29..7fd5e0e2361e 100644
--- a/include/asm-x86/pgtable_64.h
+++ b/include/asm-x86/pgtable_64.h
@@ -246,6 +246,7 @@ static inline int pud_large(pud_t pte)
#define __swp_entry_to_pte(x) ((pte_t) { .pte = (x).val })
extern int kern_addr_valid(unsigned long addr);
+extern void cleanup_highmap(void);
#define io_remap_pfn_range(vma, vaddr, pfn, size, prot) \
remap_pfn_range(vma, vaddr, pfn, size, prot)