diff options
author | Kirill A. Shutemov <kirill.shutemov@linux.intel.com> | 2017-06-06 07:31:27 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2017-06-13 02:56:55 -0400 |
commit | 65ade2f872b474fa8a04c2d397783350326634e6 (patch) | |
tree | be48f2f6498867493898ba2f8563c3f5f989d55e | |
parent | c88d71508e36b514413464bd2e01f96f34583a0e (diff) |
x86/boot/64: Rename init_level4_pgt and early_level4_pgt
With CONFIG_X86_5LEVEL=y, level 4 is no longer top level of page tables.
Let's give these variable more generic names: init_top_pgt and
early_top_pgt.
Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Reviewed-by: Juergen Gross <jgross@suse.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: Dave Hansen <dave.hansen@intel.com>
Cc: Denys Vlasenko <dvlasenk@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-arch@vger.kernel.org
Cc: linux-mm@kvack.org
Link: http://lkml.kernel.org/r/20170606113133.22974-9-kirill.shutemov@linux.intel.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
-rw-r--r-- | arch/x86/include/asm/pgtable.h | 2 | ||||
-rw-r--r-- | arch/x86/include/asm/pgtable_64.h | 4 | ||||
-rw-r--r-- | arch/x86/kernel/espfix_64.c | 2 | ||||
-rw-r--r-- | arch/x86/kernel/head64.c | 19 | ||||
-rw-r--r-- | arch/x86/kernel/head_64.S | 14 | ||||
-rw-r--r-- | arch/x86/kernel/machine_kexec_64.c | 2 | ||||
-rw-r--r-- | arch/x86/mm/dump_pagetables.c | 2 | ||||
-rw-r--r-- | arch/x86/mm/kasan_init_64.c | 12 | ||||
-rw-r--r-- | arch/x86/realmode/init.c | 2 | ||||
-rw-r--r-- | arch/x86/xen/mmu_pv.c | 16 | ||||
-rw-r--r-- | arch/x86/xen/xen-pvh.S | 2 |
11 files changed, 38 insertions, 39 deletions
diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h index 942482ac36a8..77037b6f1caa 100644 --- a/arch/x86/include/asm/pgtable.h +++ b/arch/x86/include/asm/pgtable.h | |||
@@ -922,7 +922,7 @@ extern pgd_t trampoline_pgd_entry; | |||
922 | static inline void __meminit init_trampoline_default(void) | 922 | static inline void __meminit init_trampoline_default(void) |
923 | { | 923 | { |
924 | /* Default trampoline pgd value */ | 924 | /* Default trampoline pgd value */ |
925 | trampoline_pgd_entry = init_level4_pgt[pgd_index(__PAGE_OFFSET)]; | 925 | trampoline_pgd_entry = init_top_pgt[pgd_index(__PAGE_OFFSET)]; |
926 | } | 926 | } |
927 | # ifdef CONFIG_RANDOMIZE_MEMORY | 927 | # ifdef CONFIG_RANDOMIZE_MEMORY |
928 | void __meminit init_trampoline(void); | 928 | void __meminit init_trampoline(void); |
diff --git a/arch/x86/include/asm/pgtable_64.h b/arch/x86/include/asm/pgtable_64.h index 12ea31274eb6..affcb2a9c563 100644 --- a/arch/x86/include/asm/pgtable_64.h +++ b/arch/x86/include/asm/pgtable_64.h | |||
@@ -20,9 +20,9 @@ extern pmd_t level2_kernel_pgt[512]; | |||
20 | extern pmd_t level2_fixmap_pgt[512]; | 20 | extern pmd_t level2_fixmap_pgt[512]; |
21 | extern pmd_t level2_ident_pgt[512]; | 21 | extern pmd_t level2_ident_pgt[512]; |
22 | extern pte_t level1_fixmap_pgt[512]; | 22 | extern pte_t level1_fixmap_pgt[512]; |
23 | extern pgd_t init_level4_pgt[]; | 23 | extern pgd_t init_top_pgt[]; |
24 | 24 | ||
25 | #define swapper_pg_dir init_level4_pgt | 25 | #define swapper_pg_dir init_top_pgt |
26 | 26 | ||
27 | extern void paging_init(void); | 27 | extern void paging_init(void); |
28 | 28 | ||
diff --git a/arch/x86/kernel/espfix_64.c b/arch/x86/kernel/espfix_64.c index 8e598a1ad986..6b91e2eb8d3f 100644 --- a/arch/x86/kernel/espfix_64.c +++ b/arch/x86/kernel/espfix_64.c | |||
@@ -125,7 +125,7 @@ void __init init_espfix_bsp(void) | |||
125 | p4d_t *p4d; | 125 | p4d_t *p4d; |
126 | 126 | ||
127 | /* Install the espfix pud into the kernel page directory */ | 127 | /* Install the espfix pud into the kernel page directory */ |
128 | pgd = &init_level4_pgt[pgd_index(ESPFIX_BASE_ADDR)]; | 128 | pgd = &init_top_pgt[pgd_index(ESPFIX_BASE_ADDR)]; |
129 | p4d = p4d_alloc(&init_mm, pgd, ESPFIX_BASE_ADDR); | 129 | p4d = p4d_alloc(&init_mm, pgd, ESPFIX_BASE_ADDR); |
130 | p4d_populate(&init_mm, p4d, espfix_pud_page); | 130 | p4d_populate(&init_mm, p4d, espfix_pud_page); |
131 | 131 | ||
diff --git a/arch/x86/kernel/head64.c b/arch/x86/kernel/head64.c index 1f2a499929c3..71ca01b6cc59 100644 --- a/arch/x86/kernel/head64.c +++ b/arch/x86/kernel/head64.c | |||
@@ -33,7 +33,7 @@ | |||
33 | /* | 33 | /* |
34 | * Manage page tables very early on. | 34 | * Manage page tables very early on. |
35 | */ | 35 | */ |
36 | extern pgd_t early_level4_pgt[PTRS_PER_PGD]; | 36 | extern pgd_t early_top_pgt[PTRS_PER_PGD]; |
37 | extern pmd_t early_dynamic_pgts[EARLY_DYNAMIC_PAGE_TABLES][PTRS_PER_PMD]; | 37 | extern pmd_t early_dynamic_pgts[EARLY_DYNAMIC_PAGE_TABLES][PTRS_PER_PMD]; |
38 | static unsigned int __initdata next_early_pgt; | 38 | static unsigned int __initdata next_early_pgt; |
39 | pmdval_t early_pmd_flags = __PAGE_KERNEL_LARGE & ~(_PAGE_GLOBAL | _PAGE_NX); | 39 | pmdval_t early_pmd_flags = __PAGE_KERNEL_LARGE & ~(_PAGE_GLOBAL | _PAGE_NX); |
@@ -67,7 +67,7 @@ void __init __startup_64(unsigned long physaddr) | |||
67 | 67 | ||
68 | /* Fixup the physical addresses in the page table */ | 68 | /* Fixup the physical addresses in the page table */ |
69 | 69 | ||
70 | pgd = fixup_pointer(&early_level4_pgt, physaddr); | 70 | pgd = fixup_pointer(&early_top_pgt, physaddr); |
71 | pgd[pgd_index(__START_KERNEL_map)] += load_delta; | 71 | pgd[pgd_index(__START_KERNEL_map)] += load_delta; |
72 | 72 | ||
73 | pud = fixup_pointer(&level3_kernel_pgt, physaddr); | 73 | pud = fixup_pointer(&level3_kernel_pgt, physaddr); |
@@ -124,9 +124,9 @@ void __init __startup_64(unsigned long physaddr) | |||
124 | /* Wipe all early page tables except for the kernel symbol map */ | 124 | /* Wipe all early page tables except for the kernel symbol map */ |
125 | static void __init reset_early_page_tables(void) | 125 | static void __init reset_early_page_tables(void) |
126 | { | 126 | { |
127 | memset(early_level4_pgt, 0, sizeof(pgd_t)*(PTRS_PER_PGD-1)); | 127 | memset(early_top_pgt, 0, sizeof(pgd_t)*(PTRS_PER_PGD-1)); |
128 | next_early_pgt = 0; | 128 | next_early_pgt = 0; |
129 | write_cr3(__pa_nodebug(early_level4_pgt)); | 129 | write_cr3(__pa_nodebug(early_top_pgt)); |
130 | } | 130 | } |
131 | 131 | ||
132 | /* Create a new PMD entry */ | 132 | /* Create a new PMD entry */ |
@@ -138,12 +138,11 @@ int __init early_make_pgtable(unsigned long address) | |||
138 | pmdval_t pmd, *pmd_p; | 138 | pmdval_t pmd, *pmd_p; |
139 | 139 | ||
140 | /* Invalid address or early pgt is done ? */ | 140 | /* Invalid address or early pgt is done ? */ |
141 | if (physaddr >= MAXMEM || | 141 | if (physaddr >= MAXMEM || read_cr3_pa() != __pa_nodebug(early_top_pgt)) |
142 | read_cr3_pa() != __pa_nodebug(early_level4_pgt)) | ||
143 | return -1; | 142 | return -1; |
144 | 143 | ||
145 | again: | 144 | again: |
146 | pgd_p = &early_level4_pgt[pgd_index(address)].pgd; | 145 | pgd_p = &early_top_pgt[pgd_index(address)].pgd; |
147 | pgd = *pgd_p; | 146 | pgd = *pgd_p; |
148 | 147 | ||
149 | /* | 148 | /* |
@@ -240,7 +239,7 @@ asmlinkage __visible void __init x86_64_start_kernel(char * real_mode_data) | |||
240 | 239 | ||
241 | clear_bss(); | 240 | clear_bss(); |
242 | 241 | ||
243 | clear_page(init_level4_pgt); | 242 | clear_page(init_top_pgt); |
244 | 243 | ||
245 | kasan_early_init(); | 244 | kasan_early_init(); |
246 | 245 | ||
@@ -255,8 +254,8 @@ asmlinkage __visible void __init x86_64_start_kernel(char * real_mode_data) | |||
255 | */ | 254 | */ |
256 | load_ucode_bsp(); | 255 | load_ucode_bsp(); |
257 | 256 | ||
258 | /* set init_level4_pgt kernel high mapping*/ | 257 | /* set init_top_pgt kernel high mapping*/ |
259 | init_level4_pgt[511] = early_level4_pgt[511]; | 258 | init_top_pgt[511] = early_top_pgt[511]; |
260 | 259 | ||
261 | x86_64_start_reservations(real_mode_data); | 260 | x86_64_start_reservations(real_mode_data); |
262 | } | 261 | } |
diff --git a/arch/x86/kernel/head_64.S b/arch/x86/kernel/head_64.S index 1432d530fa35..0ae0bad4d4d5 100644 --- a/arch/x86/kernel/head_64.S +++ b/arch/x86/kernel/head_64.S | |||
@@ -77,7 +77,7 @@ startup_64: | |||
77 | call __startup_64 | 77 | call __startup_64 |
78 | popq %rsi | 78 | popq %rsi |
79 | 79 | ||
80 | movq $(early_level4_pgt - __START_KERNEL_map), %rax | 80 | movq $(early_top_pgt - __START_KERNEL_map), %rax |
81 | jmp 1f | 81 | jmp 1f |
82 | ENTRY(secondary_startup_64) | 82 | ENTRY(secondary_startup_64) |
83 | /* | 83 | /* |
@@ -97,7 +97,7 @@ ENTRY(secondary_startup_64) | |||
97 | /* Sanitize CPU configuration */ | 97 | /* Sanitize CPU configuration */ |
98 | call verify_cpu | 98 | call verify_cpu |
99 | 99 | ||
100 | movq $(init_level4_pgt - __START_KERNEL_map), %rax | 100 | movq $(init_top_pgt - __START_KERNEL_map), %rax |
101 | 1: | 101 | 1: |
102 | 102 | ||
103 | /* Enable PAE mode and PGE */ | 103 | /* Enable PAE mode and PGE */ |
@@ -328,7 +328,7 @@ GLOBAL(name) | |||
328 | .endr | 328 | .endr |
329 | 329 | ||
330 | __INITDATA | 330 | __INITDATA |
331 | NEXT_PAGE(early_level4_pgt) | 331 | NEXT_PAGE(early_top_pgt) |
332 | .fill 511,8,0 | 332 | .fill 511,8,0 |
333 | .quad level3_kernel_pgt - __START_KERNEL_map + _PAGE_TABLE | 333 | .quad level3_kernel_pgt - __START_KERNEL_map + _PAGE_TABLE |
334 | 334 | ||
@@ -338,14 +338,14 @@ NEXT_PAGE(early_dynamic_pgts) | |||
338 | .data | 338 | .data |
339 | 339 | ||
340 | #ifndef CONFIG_XEN | 340 | #ifndef CONFIG_XEN |
341 | NEXT_PAGE(init_level4_pgt) | 341 | NEXT_PAGE(init_top_pgt) |
342 | .fill 512,8,0 | 342 | .fill 512,8,0 |
343 | #else | 343 | #else |
344 | NEXT_PAGE(init_level4_pgt) | 344 | NEXT_PAGE(init_top_pgt) |
345 | .quad level3_ident_pgt - __START_KERNEL_map + _KERNPG_TABLE | 345 | .quad level3_ident_pgt - __START_KERNEL_map + _KERNPG_TABLE |
346 | .org init_level4_pgt + L4_PAGE_OFFSET*8, 0 | 346 | .org init_top_pgt + L4_PAGE_OFFSET*8, 0 |
347 | .quad level3_ident_pgt - __START_KERNEL_map + _KERNPG_TABLE | 347 | .quad level3_ident_pgt - __START_KERNEL_map + _KERNPG_TABLE |
348 | .org init_level4_pgt + L4_START_KERNEL*8, 0 | 348 | .org init_top_pgt + L4_START_KERNEL*8, 0 |
349 | /* (2^48-(2*1024*1024*1024))/(2^39) = 511 */ | 349 | /* (2^48-(2*1024*1024*1024))/(2^39) = 511 */ |
350 | .quad level3_kernel_pgt - __START_KERNEL_map + _PAGE_TABLE | 350 | .quad level3_kernel_pgt - __START_KERNEL_map + _PAGE_TABLE |
351 | 351 | ||
diff --git a/arch/x86/kernel/machine_kexec_64.c b/arch/x86/kernel/machine_kexec_64.c index 6f5ca4ebe6e5..cb0a30473c23 100644 --- a/arch/x86/kernel/machine_kexec_64.c +++ b/arch/x86/kernel/machine_kexec_64.c | |||
@@ -347,7 +347,7 @@ void machine_kexec(struct kimage *image) | |||
347 | void arch_crash_save_vmcoreinfo(void) | 347 | void arch_crash_save_vmcoreinfo(void) |
348 | { | 348 | { |
349 | VMCOREINFO_NUMBER(phys_base); | 349 | VMCOREINFO_NUMBER(phys_base); |
350 | VMCOREINFO_SYMBOL(init_level4_pgt); | 350 | VMCOREINFO_SYMBOL(init_top_pgt); |
351 | 351 | ||
352 | #ifdef CONFIG_NUMA | 352 | #ifdef CONFIG_NUMA |
353 | VMCOREINFO_SYMBOL(node_data); | 353 | VMCOREINFO_SYMBOL(node_data); |
diff --git a/arch/x86/mm/dump_pagetables.c b/arch/x86/mm/dump_pagetables.c index bce6990b1d81..0470826d2bdc 100644 --- a/arch/x86/mm/dump_pagetables.c +++ b/arch/x86/mm/dump_pagetables.c | |||
@@ -431,7 +431,7 @@ static void ptdump_walk_pgd_level_core(struct seq_file *m, pgd_t *pgd, | |||
431 | bool checkwx) | 431 | bool checkwx) |
432 | { | 432 | { |
433 | #ifdef CONFIG_X86_64 | 433 | #ifdef CONFIG_X86_64 |
434 | pgd_t *start = (pgd_t *) &init_level4_pgt; | 434 | pgd_t *start = (pgd_t *) &init_top_pgt; |
435 | #else | 435 | #else |
436 | pgd_t *start = swapper_pg_dir; | 436 | pgd_t *start = swapper_pg_dir; |
437 | #endif | 437 | #endif |
diff --git a/arch/x86/mm/kasan_init_64.c b/arch/x86/mm/kasan_init_64.c index 0c7d8129bed6..88215ac16b24 100644 --- a/arch/x86/mm/kasan_init_64.c +++ b/arch/x86/mm/kasan_init_64.c | |||
@@ -12,7 +12,7 @@ | |||
12 | #include <asm/tlbflush.h> | 12 | #include <asm/tlbflush.h> |
13 | #include <asm/sections.h> | 13 | #include <asm/sections.h> |
14 | 14 | ||
15 | extern pgd_t early_level4_pgt[PTRS_PER_PGD]; | 15 | extern pgd_t early_top_pgt[PTRS_PER_PGD]; |
16 | extern struct range pfn_mapped[E820_MAX_ENTRIES]; | 16 | extern struct range pfn_mapped[E820_MAX_ENTRIES]; |
17 | 17 | ||
18 | static int __init map_range(struct range *range) | 18 | static int __init map_range(struct range *range) |
@@ -109,8 +109,8 @@ void __init kasan_early_init(void) | |||
109 | for (i = 0; CONFIG_PGTABLE_LEVELS >= 5 && i < PTRS_PER_P4D; i++) | 109 | for (i = 0; CONFIG_PGTABLE_LEVELS >= 5 && i < PTRS_PER_P4D; i++) |
110 | kasan_zero_p4d[i] = __p4d(p4d_val); | 110 | kasan_zero_p4d[i] = __p4d(p4d_val); |
111 | 111 | ||
112 | kasan_map_early_shadow(early_level4_pgt); | 112 | kasan_map_early_shadow(early_top_pgt); |
113 | kasan_map_early_shadow(init_level4_pgt); | 113 | kasan_map_early_shadow(init_top_pgt); |
114 | } | 114 | } |
115 | 115 | ||
116 | void __init kasan_init(void) | 116 | void __init kasan_init(void) |
@@ -121,8 +121,8 @@ void __init kasan_init(void) | |||
121 | register_die_notifier(&kasan_die_notifier); | 121 | register_die_notifier(&kasan_die_notifier); |
122 | #endif | 122 | #endif |
123 | 123 | ||
124 | memcpy(early_level4_pgt, init_level4_pgt, sizeof(early_level4_pgt)); | 124 | memcpy(early_top_pgt, init_top_pgt, sizeof(early_top_pgt)); |
125 | load_cr3(early_level4_pgt); | 125 | load_cr3(early_top_pgt); |
126 | __flush_tlb_all(); | 126 | __flush_tlb_all(); |
127 | 127 | ||
128 | clear_pgds(KASAN_SHADOW_START, KASAN_SHADOW_END); | 128 | clear_pgds(KASAN_SHADOW_START, KASAN_SHADOW_END); |
@@ -148,7 +148,7 @@ void __init kasan_init(void) | |||
148 | kasan_populate_zero_shadow(kasan_mem_to_shadow((void *)MODULES_END), | 148 | kasan_populate_zero_shadow(kasan_mem_to_shadow((void *)MODULES_END), |
149 | (void *)KASAN_SHADOW_END); | 149 | (void *)KASAN_SHADOW_END); |
150 | 150 | ||
151 | load_cr3(init_level4_pgt); | 151 | load_cr3(init_top_pgt); |
152 | __flush_tlb_all(); | 152 | __flush_tlb_all(); |
153 | 153 | ||
154 | /* | 154 | /* |
diff --git a/arch/x86/realmode/init.c b/arch/x86/realmode/init.c index a163a90af4aa..cd4be19c36dc 100644 --- a/arch/x86/realmode/init.c +++ b/arch/x86/realmode/init.c | |||
@@ -102,7 +102,7 @@ static void __init setup_real_mode(void) | |||
102 | 102 | ||
103 | trampoline_pgd = (u64 *) __va(real_mode_header->trampoline_pgd); | 103 | trampoline_pgd = (u64 *) __va(real_mode_header->trampoline_pgd); |
104 | trampoline_pgd[0] = trampoline_pgd_entry.pgd; | 104 | trampoline_pgd[0] = trampoline_pgd_entry.pgd; |
105 | trampoline_pgd[511] = init_level4_pgt[511].pgd; | 105 | trampoline_pgd[511] = init_top_pgt[511].pgd; |
106 | #endif | 106 | #endif |
107 | } | 107 | } |
108 | 108 | ||
diff --git a/arch/x86/xen/mmu_pv.c b/arch/x86/xen/mmu_pv.c index 4f638309deea..1d7a7213a310 100644 --- a/arch/x86/xen/mmu_pv.c +++ b/arch/x86/xen/mmu_pv.c | |||
@@ -1465,8 +1465,8 @@ static void xen_write_cr3(unsigned long cr3) | |||
1465 | * At the start of the day - when Xen launches a guest, it has already | 1465 | * At the start of the day - when Xen launches a guest, it has already |
1466 | * built pagetables for the guest. We diligently look over them | 1466 | * built pagetables for the guest. We diligently look over them |
1467 | * in xen_setup_kernel_pagetable and graft as appropriate them in the | 1467 | * in xen_setup_kernel_pagetable and graft as appropriate them in the |
1468 | * init_level4_pgt and its friends. Then when we are happy we load | 1468 | * init_top_pgt and its friends. Then when we are happy we load |
1469 | * the new init_level4_pgt - and continue on. | 1469 | * the new init_top_pgt - and continue on. |
1470 | * | 1470 | * |
1471 | * The generic code starts (start_kernel) and 'init_mem_mapping' sets | 1471 | * The generic code starts (start_kernel) and 'init_mem_mapping' sets |
1472 | * up the rest of the pagetables. When it has completed it loads the cr3. | 1472 | * up the rest of the pagetables. When it has completed it loads the cr3. |
@@ -1909,12 +1909,12 @@ void __init xen_setup_kernel_pagetable(pgd_t *pgd, unsigned long max_pfn) | |||
1909 | pt_end = pt_base + xen_start_info->nr_pt_frames; | 1909 | pt_end = pt_base + xen_start_info->nr_pt_frames; |
1910 | 1910 | ||
1911 | /* Zap identity mapping */ | 1911 | /* Zap identity mapping */ |
1912 | init_level4_pgt[0] = __pgd(0); | 1912 | init_top_pgt[0] = __pgd(0); |
1913 | 1913 | ||
1914 | /* Pre-constructed entries are in pfn, so convert to mfn */ | 1914 | /* Pre-constructed entries are in pfn, so convert to mfn */ |
1915 | /* L4[272] -> level3_ident_pgt */ | 1915 | /* L4[272] -> level3_ident_pgt */ |
1916 | /* L4[511] -> level3_kernel_pgt */ | 1916 | /* L4[511] -> level3_kernel_pgt */ |
1917 | convert_pfn_mfn(init_level4_pgt); | 1917 | convert_pfn_mfn(init_top_pgt); |
1918 | 1918 | ||
1919 | /* L3_i[0] -> level2_ident_pgt */ | 1919 | /* L3_i[0] -> level2_ident_pgt */ |
1920 | convert_pfn_mfn(level3_ident_pgt); | 1920 | convert_pfn_mfn(level3_ident_pgt); |
@@ -1945,10 +1945,10 @@ void __init xen_setup_kernel_pagetable(pgd_t *pgd, unsigned long max_pfn) | |||
1945 | /* Copy the initial P->M table mappings if necessary. */ | 1945 | /* Copy the initial P->M table mappings if necessary. */ |
1946 | i = pgd_index(xen_start_info->mfn_list); | 1946 | i = pgd_index(xen_start_info->mfn_list); |
1947 | if (i && i < pgd_index(__START_KERNEL_map)) | 1947 | if (i && i < pgd_index(__START_KERNEL_map)) |
1948 | init_level4_pgt[i] = ((pgd_t *)xen_start_info->pt_base)[i]; | 1948 | init_top_pgt[i] = ((pgd_t *)xen_start_info->pt_base)[i]; |
1949 | 1949 | ||
1950 | /* Make pagetable pieces RO */ | 1950 | /* Make pagetable pieces RO */ |
1951 | set_page_prot(init_level4_pgt, PAGE_KERNEL_RO); | 1951 | set_page_prot(init_top_pgt, PAGE_KERNEL_RO); |
1952 | set_page_prot(level3_ident_pgt, PAGE_KERNEL_RO); | 1952 | set_page_prot(level3_ident_pgt, PAGE_KERNEL_RO); |
1953 | set_page_prot(level3_kernel_pgt, PAGE_KERNEL_RO); | 1953 | set_page_prot(level3_kernel_pgt, PAGE_KERNEL_RO); |
1954 | set_page_prot(level3_user_vsyscall, PAGE_KERNEL_RO); | 1954 | set_page_prot(level3_user_vsyscall, PAGE_KERNEL_RO); |
@@ -1959,7 +1959,7 @@ void __init xen_setup_kernel_pagetable(pgd_t *pgd, unsigned long max_pfn) | |||
1959 | 1959 | ||
1960 | /* Pin down new L4 */ | 1960 | /* Pin down new L4 */ |
1961 | pin_pagetable_pfn(MMUEXT_PIN_L4_TABLE, | 1961 | pin_pagetable_pfn(MMUEXT_PIN_L4_TABLE, |
1962 | PFN_DOWN(__pa_symbol(init_level4_pgt))); | 1962 | PFN_DOWN(__pa_symbol(init_top_pgt))); |
1963 | 1963 | ||
1964 | /* Unpin Xen-provided one */ | 1964 | /* Unpin Xen-provided one */ |
1965 | pin_pagetable_pfn(MMUEXT_UNPIN_TABLE, PFN_DOWN(__pa(pgd))); | 1965 | pin_pagetable_pfn(MMUEXT_UNPIN_TABLE, PFN_DOWN(__pa(pgd))); |
@@ -1969,7 +1969,7 @@ void __init xen_setup_kernel_pagetable(pgd_t *pgd, unsigned long max_pfn) | |||
1969 | * attach it to, so make sure we just set kernel pgd. | 1969 | * attach it to, so make sure we just set kernel pgd. |
1970 | */ | 1970 | */ |
1971 | xen_mc_batch(); | 1971 | xen_mc_batch(); |
1972 | __xen_write_cr3(true, __pa(init_level4_pgt)); | 1972 | __xen_write_cr3(true, __pa(init_top_pgt)); |
1973 | xen_mc_issue(PARAVIRT_LAZY_CPU); | 1973 | xen_mc_issue(PARAVIRT_LAZY_CPU); |
1974 | 1974 | ||
1975 | /* We can't that easily rip out L3 and L2, as the Xen pagetables are | 1975 | /* We can't that easily rip out L3 and L2, as the Xen pagetables are |
diff --git a/arch/x86/xen/xen-pvh.S b/arch/x86/xen/xen-pvh.S index 5e246716d58f..e1a5fbeae08d 100644 --- a/arch/x86/xen/xen-pvh.S +++ b/arch/x86/xen/xen-pvh.S | |||
@@ -87,7 +87,7 @@ ENTRY(pvh_start_xen) | |||
87 | wrmsr | 87 | wrmsr |
88 | 88 | ||
89 | /* Enable pre-constructed page tables. */ | 89 | /* Enable pre-constructed page tables. */ |
90 | mov $_pa(init_level4_pgt), %eax | 90 | mov $_pa(init_top_pgt), %eax |
91 | mov %eax, %cr3 | 91 | mov %eax, %cr3 |
92 | mov $(X86_CR0_PG | X86_CR0_PE), %eax | 92 | mov $(X86_CR0_PG | X86_CR0_PE), %eax |
93 | mov %eax, %cr0 | 93 | mov %eax, %cr0 |