diff options
| -rw-r--r-- | arch/x86/include/asm/page_64_types.h | 2 | ||||
| -rw-r--r-- | arch/x86/include/asm/paravirt.h | 4 | ||||
| -rw-r--r-- | arch/x86/include/asm/pgalloc.h | 4 | ||||
| -rw-r--r-- | arch/x86/include/asm/pgtable.h | 10 | ||||
| -rw-r--r-- | arch/x86/include/asm/pgtable_32_types.h | 2 | ||||
| -rw-r--r-- | arch/x86/include/asm/pgtable_64.h | 2 | ||||
| -rw-r--r-- | arch/x86/include/asm/pgtable_64_types.h | 14 | ||||
| -rw-r--r-- | arch/x86/include/asm/sparsemem.h | 4 | ||||
| -rw-r--r-- | arch/x86/kernel/head64.c | 2 | ||||
| -rw-r--r-- | arch/x86/kernel/machine_kexec_64.c | 3 | ||||
| -rw-r--r-- | arch/x86/mm/dump_pagetables.c | 6 | ||||
| -rw-r--r-- | arch/x86/mm/fault.c | 4 | ||||
| -rw-r--r-- | arch/x86/mm/ident_map.c | 2 | ||||
| -rw-r--r-- | arch/x86/mm/init_64.c | 8 | ||||
| -rw-r--r-- | arch/x86/mm/kasan_init_64.c | 8 | ||||
| -rw-r--r-- | arch/x86/mm/kaslr.c | 8 | ||||
| -rw-r--r-- | arch/x86/mm/tlb.c | 2 | ||||
| -rw-r--r-- | arch/x86/platform/efi/efi_64.c | 2 | ||||
| -rw-r--r-- | arch/x86/power/hibernate_64.c | 2 |
19 files changed, 47 insertions, 42 deletions
diff --git a/arch/x86/include/asm/page_64_types.h b/arch/x86/include/asm/page_64_types.h index 2c5a966dc222..6afac386a434 100644 --- a/arch/x86/include/asm/page_64_types.h +++ b/arch/x86/include/asm/page_64_types.h | |||
| @@ -53,7 +53,7 @@ | |||
| 53 | #define __PHYSICAL_MASK_SHIFT 52 | 53 | #define __PHYSICAL_MASK_SHIFT 52 |
| 54 | 54 | ||
| 55 | #ifdef CONFIG_X86_5LEVEL | 55 | #ifdef CONFIG_X86_5LEVEL |
| 56 | #define __VIRTUAL_MASK_SHIFT (pgtable_l5_enabled ? 56 : 47) | 56 | #define __VIRTUAL_MASK_SHIFT (pgtable_l5_enabled() ? 56 : 47) |
| 57 | #else | 57 | #else |
| 58 | #define __VIRTUAL_MASK_SHIFT 47 | 58 | #define __VIRTUAL_MASK_SHIFT 47 |
| 59 | #endif | 59 | #endif |
diff --git a/arch/x86/include/asm/paravirt.h b/arch/x86/include/asm/paravirt.h index 9be2bf13825b..d49bbf4bb5c8 100644 --- a/arch/x86/include/asm/paravirt.h +++ b/arch/x86/include/asm/paravirt.h | |||
| @@ -574,14 +574,14 @@ static inline void __set_pgd(pgd_t *pgdp, pgd_t pgd) | |||
| 574 | } | 574 | } |
| 575 | 575 | ||
| 576 | #define set_pgd(pgdp, pgdval) do { \ | 576 | #define set_pgd(pgdp, pgdval) do { \ |
| 577 | if (pgtable_l5_enabled) \ | 577 | if (pgtable_l5_enabled()) \ |
| 578 | __set_pgd(pgdp, pgdval); \ | 578 | __set_pgd(pgdp, pgdval); \ |
| 579 | else \ | 579 | else \ |
| 580 | set_p4d((p4d_t *)(pgdp), (p4d_t) { (pgdval).pgd }); \ | 580 | set_p4d((p4d_t *)(pgdp), (p4d_t) { (pgdval).pgd }); \ |
| 581 | } while (0) | 581 | } while (0) |
| 582 | 582 | ||
| 583 | #define pgd_clear(pgdp) do { \ | 583 | #define pgd_clear(pgdp) do { \ |
| 584 | if (pgtable_l5_enabled) \ | 584 | if (pgtable_l5_enabled()) \ |
| 585 | set_pgd(pgdp, __pgd(0)); \ | 585 | set_pgd(pgdp, __pgd(0)); \ |
| 586 | } while (0) | 586 | } while (0) |
| 587 | 587 | ||
diff --git a/arch/x86/include/asm/pgalloc.h b/arch/x86/include/asm/pgalloc.h index 263c142a6a6c..ada6410fd2ec 100644 --- a/arch/x86/include/asm/pgalloc.h +++ b/arch/x86/include/asm/pgalloc.h | |||
| @@ -167,7 +167,7 @@ static inline void __pud_free_tlb(struct mmu_gather *tlb, pud_t *pud, | |||
| 167 | #if CONFIG_PGTABLE_LEVELS > 4 | 167 | #if CONFIG_PGTABLE_LEVELS > 4 |
| 168 | static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, p4d_t *p4d) | 168 | static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, p4d_t *p4d) |
| 169 | { | 169 | { |
| 170 | if (!pgtable_l5_enabled) | 170 | if (!pgtable_l5_enabled()) |
| 171 | return; | 171 | return; |
| 172 | paravirt_alloc_p4d(mm, __pa(p4d) >> PAGE_SHIFT); | 172 | paravirt_alloc_p4d(mm, __pa(p4d) >> PAGE_SHIFT); |
| 173 | set_pgd(pgd, __pgd(_PAGE_TABLE | __pa(p4d))); | 173 | set_pgd(pgd, __pgd(_PAGE_TABLE | __pa(p4d))); |
| @@ -193,7 +193,7 @@ extern void ___p4d_free_tlb(struct mmu_gather *tlb, p4d_t *p4d); | |||
| 193 | static inline void __p4d_free_tlb(struct mmu_gather *tlb, p4d_t *p4d, | 193 | static inline void __p4d_free_tlb(struct mmu_gather *tlb, p4d_t *p4d, |
| 194 | unsigned long address) | 194 | unsigned long address) |
| 195 | { | 195 | { |
| 196 | if (pgtable_l5_enabled) | 196 | if (pgtable_l5_enabled()) |
| 197 | ___p4d_free_tlb(tlb, p4d); | 197 | ___p4d_free_tlb(tlb, p4d); |
| 198 | } | 198 | } |
| 199 | 199 | ||
diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h index f1633de5a675..5715647fc4fe 100644 --- a/arch/x86/include/asm/pgtable.h +++ b/arch/x86/include/asm/pgtable.h | |||
| @@ -65,7 +65,7 @@ extern pmdval_t early_pmd_flags; | |||
| 65 | 65 | ||
| 66 | #ifndef __PAGETABLE_P4D_FOLDED | 66 | #ifndef __PAGETABLE_P4D_FOLDED |
| 67 | #define set_pgd(pgdp, pgd) native_set_pgd(pgdp, pgd) | 67 | #define set_pgd(pgdp, pgd) native_set_pgd(pgdp, pgd) |
| 68 | #define pgd_clear(pgd) (pgtable_l5_enabled ? native_pgd_clear(pgd) : 0) | 68 | #define pgd_clear(pgd) (pgtable_l5_enabled() ? native_pgd_clear(pgd) : 0) |
| 69 | #endif | 69 | #endif |
| 70 | 70 | ||
| 71 | #ifndef set_p4d | 71 | #ifndef set_p4d |
| @@ -881,7 +881,7 @@ static inline unsigned long p4d_index(unsigned long address) | |||
| 881 | #if CONFIG_PGTABLE_LEVELS > 4 | 881 | #if CONFIG_PGTABLE_LEVELS > 4 |
| 882 | static inline int pgd_present(pgd_t pgd) | 882 | static inline int pgd_present(pgd_t pgd) |
| 883 | { | 883 | { |
| 884 | if (!pgtable_l5_enabled) | 884 | if (!pgtable_l5_enabled()) |
| 885 | return 1; | 885 | return 1; |
| 886 | return pgd_flags(pgd) & _PAGE_PRESENT; | 886 | return pgd_flags(pgd) & _PAGE_PRESENT; |
| 887 | } | 887 | } |
| @@ -900,7 +900,7 @@ static inline unsigned long pgd_page_vaddr(pgd_t pgd) | |||
| 900 | /* to find an entry in a page-table-directory. */ | 900 | /* to find an entry in a page-table-directory. */ |
| 901 | static inline p4d_t *p4d_offset(pgd_t *pgd, unsigned long address) | 901 | static inline p4d_t *p4d_offset(pgd_t *pgd, unsigned long address) |
| 902 | { | 902 | { |
| 903 | if (!pgtable_l5_enabled) | 903 | if (!pgtable_l5_enabled()) |
| 904 | return (p4d_t *)pgd; | 904 | return (p4d_t *)pgd; |
| 905 | return (p4d_t *)pgd_page_vaddr(*pgd) + p4d_index(address); | 905 | return (p4d_t *)pgd_page_vaddr(*pgd) + p4d_index(address); |
| 906 | } | 906 | } |
| @@ -909,7 +909,7 @@ static inline int pgd_bad(pgd_t pgd) | |||
| 909 | { | 909 | { |
| 910 | unsigned long ignore_flags = _PAGE_USER; | 910 | unsigned long ignore_flags = _PAGE_USER; |
| 911 | 911 | ||
| 912 | if (!pgtable_l5_enabled) | 912 | if (!pgtable_l5_enabled()) |
| 913 | return 0; | 913 | return 0; |
| 914 | 914 | ||
| 915 | if (IS_ENABLED(CONFIG_PAGE_TABLE_ISOLATION)) | 915 | if (IS_ENABLED(CONFIG_PAGE_TABLE_ISOLATION)) |
| @@ -920,7 +920,7 @@ static inline int pgd_bad(pgd_t pgd) | |||
| 920 | 920 | ||
| 921 | static inline int pgd_none(pgd_t pgd) | 921 | static inline int pgd_none(pgd_t pgd) |
| 922 | { | 922 | { |
| 923 | if (!pgtable_l5_enabled) | 923 | if (!pgtable_l5_enabled()) |
| 924 | return 0; | 924 | return 0; |
| 925 | /* | 925 | /* |
| 926 | * There is no need to do a workaround for the KNL stray | 926 | * There is no need to do a workaround for the KNL stray |
diff --git a/arch/x86/include/asm/pgtable_32_types.h b/arch/x86/include/asm/pgtable_32_types.h index e3225e83db7d..d9a001a4a872 100644 --- a/arch/x86/include/asm/pgtable_32_types.h +++ b/arch/x86/include/asm/pgtable_32_types.h | |||
| @@ -15,7 +15,7 @@ | |||
| 15 | # include <asm/pgtable-2level_types.h> | 15 | # include <asm/pgtable-2level_types.h> |
| 16 | #endif | 16 | #endif |
| 17 | 17 | ||
| 18 | #define pgtable_l5_enabled 0 | 18 | #define pgtable_l5_enabled() 0 |
| 19 | 19 | ||
| 20 | #define PGDIR_SIZE (1UL << PGDIR_SHIFT) | 20 | #define PGDIR_SIZE (1UL << PGDIR_SHIFT) |
| 21 | #define PGDIR_MASK (~(PGDIR_SIZE - 1)) | 21 | #define PGDIR_MASK (~(PGDIR_SIZE - 1)) |
diff --git a/arch/x86/include/asm/pgtable_64.h b/arch/x86/include/asm/pgtable_64.h index 877bc27718ae..3c5385f9a88f 100644 --- a/arch/x86/include/asm/pgtable_64.h +++ b/arch/x86/include/asm/pgtable_64.h | |||
| @@ -220,7 +220,7 @@ static inline void native_set_p4d(p4d_t *p4dp, p4d_t p4d) | |||
| 220 | { | 220 | { |
| 221 | pgd_t pgd; | 221 | pgd_t pgd; |
| 222 | 222 | ||
| 223 | if (pgtable_l5_enabled || !IS_ENABLED(CONFIG_PAGE_TABLE_ISOLATION)) { | 223 | if (pgtable_l5_enabled() || !IS_ENABLED(CONFIG_PAGE_TABLE_ISOLATION)) { |
| 224 | *p4dp = p4d; | 224 | *p4dp = p4d; |
| 225 | return; | 225 | return; |
| 226 | } | 226 | } |
diff --git a/arch/x86/include/asm/pgtable_64_types.h b/arch/x86/include/asm/pgtable_64_types.h index c14a4116a693..054765ab2da2 100644 --- a/arch/x86/include/asm/pgtable_64_types.h +++ b/arch/x86/include/asm/pgtable_64_types.h | |||
| @@ -28,12 +28,16 @@ extern unsigned int __pgtable_l5_enabled; | |||
| 28 | * cpu_feature_enabled() is not available in early boot code. | 28 | * cpu_feature_enabled() is not available in early boot code. |
| 29 | * Use variable instead. | 29 | * Use variable instead. |
| 30 | */ | 30 | */ |
| 31 | #define pgtable_l5_enabled __pgtable_l5_enabled | 31 | static inline bool pgtable_l5_enabled(void) |
| 32 | { | ||
| 33 | return __pgtable_l5_enabled; | ||
| 34 | } | ||
| 32 | #else | 35 | #else |
| 33 | #define pgtable_l5_enabled cpu_feature_enabled(X86_FEATURE_LA57) | 36 | #define pgtable_l5_enabled() cpu_feature_enabled(X86_FEATURE_LA57) |
| 34 | #endif /* USE_EARLY_PGTABLE_L5 */ | 37 | #endif /* USE_EARLY_PGTABLE_L5 */ |
| 38 | |||
| 35 | #else | 39 | #else |
| 36 | #define pgtable_l5_enabled 0 | 40 | #define pgtable_l5_enabled() 0 |
| 37 | #endif /* CONFIG_X86_5LEVEL */ | 41 | #endif /* CONFIG_X86_5LEVEL */ |
| 38 | 42 | ||
| 39 | extern unsigned int pgdir_shift; | 43 | extern unsigned int pgdir_shift; |
| @@ -109,7 +113,7 @@ extern unsigned int ptrs_per_p4d; | |||
| 109 | 113 | ||
| 110 | #define LDT_PGD_ENTRY_L4 -3UL | 114 | #define LDT_PGD_ENTRY_L4 -3UL |
| 111 | #define LDT_PGD_ENTRY_L5 -112UL | 115 | #define LDT_PGD_ENTRY_L5 -112UL |
| 112 | #define LDT_PGD_ENTRY (pgtable_l5_enabled ? LDT_PGD_ENTRY_L5 : LDT_PGD_ENTRY_L4) | 116 | #define LDT_PGD_ENTRY (pgtable_l5_enabled() ? LDT_PGD_ENTRY_L5 : LDT_PGD_ENTRY_L4) |
| 113 | #define LDT_BASE_ADDR (LDT_PGD_ENTRY << PGDIR_SHIFT) | 117 | #define LDT_BASE_ADDR (LDT_PGD_ENTRY << PGDIR_SHIFT) |
| 114 | 118 | ||
| 115 | #define __VMALLOC_BASE_L4 0xffffc90000000000UL | 119 | #define __VMALLOC_BASE_L4 0xffffc90000000000UL |
| @@ -123,7 +127,7 @@ extern unsigned int ptrs_per_p4d; | |||
| 123 | 127 | ||
| 124 | #ifdef CONFIG_DYNAMIC_MEMORY_LAYOUT | 128 | #ifdef CONFIG_DYNAMIC_MEMORY_LAYOUT |
| 125 | # define VMALLOC_START vmalloc_base | 129 | # define VMALLOC_START vmalloc_base |
| 126 | # define VMALLOC_SIZE_TB (pgtable_l5_enabled ? VMALLOC_SIZE_TB_L5 : VMALLOC_SIZE_TB_L4) | 130 | # define VMALLOC_SIZE_TB (pgtable_l5_enabled() ? VMALLOC_SIZE_TB_L5 : VMALLOC_SIZE_TB_L4) |
| 127 | # define VMEMMAP_START vmemmap_base | 131 | # define VMEMMAP_START vmemmap_base |
| 128 | #else | 132 | #else |
| 129 | # define VMALLOC_START __VMALLOC_BASE_L4 | 133 | # define VMALLOC_START __VMALLOC_BASE_L4 |
diff --git a/arch/x86/include/asm/sparsemem.h b/arch/x86/include/asm/sparsemem.h index 4617a2bf123c..199218719a86 100644 --- a/arch/x86/include/asm/sparsemem.h +++ b/arch/x86/include/asm/sparsemem.h | |||
| @@ -27,8 +27,8 @@ | |||
| 27 | # endif | 27 | # endif |
| 28 | #else /* CONFIG_X86_32 */ | 28 | #else /* CONFIG_X86_32 */ |
| 29 | # define SECTION_SIZE_BITS 27 /* matt - 128 is convenient right now */ | 29 | # define SECTION_SIZE_BITS 27 /* matt - 128 is convenient right now */ |
| 30 | # define MAX_PHYSADDR_BITS (pgtable_l5_enabled ? 52 : 44) | 30 | # define MAX_PHYSADDR_BITS (pgtable_l5_enabled() ? 52 : 44) |
| 31 | # define MAX_PHYSMEM_BITS (pgtable_l5_enabled ? 52 : 46) | 31 | # define MAX_PHYSMEM_BITS (pgtable_l5_enabled() ? 52 : 46) |
| 32 | #endif | 32 | #endif |
| 33 | 33 | ||
| 34 | #endif /* CONFIG_SPARSEMEM */ | 34 | #endif /* CONFIG_SPARSEMEM */ |
diff --git a/arch/x86/kernel/head64.c b/arch/x86/kernel/head64.c index 494fea1dbd6e..8d372d1c266d 100644 --- a/arch/x86/kernel/head64.c +++ b/arch/x86/kernel/head64.c | |||
| @@ -279,7 +279,7 @@ again: | |||
| 279 | * critical -- __PAGE_OFFSET would point us back into the dynamic | 279 | * critical -- __PAGE_OFFSET would point us back into the dynamic |
| 280 | * range and we might end up looping forever... | 280 | * range and we might end up looping forever... |
| 281 | */ | 281 | */ |
| 282 | if (!pgtable_l5_enabled) | 282 | if (!pgtable_l5_enabled()) |
| 283 | p4d_p = pgd_p; | 283 | p4d_p = pgd_p; |
| 284 | else if (pgd) | 284 | else if (pgd) |
| 285 | p4d_p = (p4dval_t *)((pgd & PTE_PFN_MASK) + __START_KERNEL_map - phys_base); | 285 | p4d_p = (p4dval_t *)((pgd & PTE_PFN_MASK) + __START_KERNEL_map - phys_base); |
diff --git a/arch/x86/kernel/machine_kexec_64.c b/arch/x86/kernel/machine_kexec_64.c index 6010449ca6d2..4c8acdfdc5a7 100644 --- a/arch/x86/kernel/machine_kexec_64.c +++ b/arch/x86/kernel/machine_kexec_64.c | |||
| @@ -354,7 +354,8 @@ void arch_crash_save_vmcoreinfo(void) | |||
| 354 | { | 354 | { |
| 355 | VMCOREINFO_NUMBER(phys_base); | 355 | VMCOREINFO_NUMBER(phys_base); |
| 356 | VMCOREINFO_SYMBOL(init_top_pgt); | 356 | VMCOREINFO_SYMBOL(init_top_pgt); |
| 357 | VMCOREINFO_NUMBER(pgtable_l5_enabled); | 357 | vmcoreinfo_append_str("NUMBER(pgtable_l5_enabled)=%d\n", |
| 358 | pgtable_l5_enabled()); | ||
| 358 | 359 | ||
| 359 | #ifdef CONFIG_NUMA | 360 | #ifdef CONFIG_NUMA |
| 360 | VMCOREINFO_SYMBOL(node_data); | 361 | VMCOREINFO_SYMBOL(node_data); |
diff --git a/arch/x86/mm/dump_pagetables.c b/arch/x86/mm/dump_pagetables.c index cc7ff5957194..2f3c9196b834 100644 --- a/arch/x86/mm/dump_pagetables.c +++ b/arch/x86/mm/dump_pagetables.c | |||
| @@ -360,7 +360,7 @@ static inline bool kasan_page_table(struct seq_file *m, struct pg_state *st, | |||
| 360 | void *pt) | 360 | void *pt) |
| 361 | { | 361 | { |
| 362 | if (__pa(pt) == __pa(kasan_zero_pmd) || | 362 | if (__pa(pt) == __pa(kasan_zero_pmd) || |
| 363 | (pgtable_l5_enabled && __pa(pt) == __pa(kasan_zero_p4d)) || | 363 | (pgtable_l5_enabled() && __pa(pt) == __pa(kasan_zero_p4d)) || |
| 364 | __pa(pt) == __pa(kasan_zero_pud)) { | 364 | __pa(pt) == __pa(kasan_zero_pud)) { |
| 365 | pgprotval_t prot = pte_flags(kasan_zero_pte[0]); | 365 | pgprotval_t prot = pte_flags(kasan_zero_pte[0]); |
| 366 | note_page(m, st, __pgprot(prot), 0, 5); | 366 | note_page(m, st, __pgprot(prot), 0, 5); |
| @@ -476,8 +476,8 @@ static void walk_p4d_level(struct seq_file *m, struct pg_state *st, pgd_t addr, | |||
| 476 | } | 476 | } |
| 477 | } | 477 | } |
| 478 | 478 | ||
| 479 | #define pgd_large(a) (pgtable_l5_enabled ? pgd_large(a) : p4d_large(__p4d(pgd_val(a)))) | 479 | #define pgd_large(a) (pgtable_l5_enabled() ? pgd_large(a) : p4d_large(__p4d(pgd_val(a)))) |
| 480 | #define pgd_none(a) (pgtable_l5_enabled ? pgd_none(a) : p4d_none(__p4d(pgd_val(a)))) | 480 | #define pgd_none(a) (pgtable_l5_enabled() ? pgd_none(a) : p4d_none(__p4d(pgd_val(a)))) |
| 481 | 481 | ||
| 482 | static inline bool is_hypervisor_range(int idx) | 482 | static inline bool is_hypervisor_range(int idx) |
| 483 | { | 483 | { |
diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c index 73bd8c95ac71..77ec014554e7 100644 --- a/arch/x86/mm/fault.c +++ b/arch/x86/mm/fault.c | |||
| @@ -439,7 +439,7 @@ static noinline int vmalloc_fault(unsigned long address) | |||
| 439 | if (pgd_none(*pgd_k)) | 439 | if (pgd_none(*pgd_k)) |
| 440 | return -1; | 440 | return -1; |
| 441 | 441 | ||
| 442 | if (pgtable_l5_enabled) { | 442 | if (pgtable_l5_enabled()) { |
| 443 | if (pgd_none(*pgd)) { | 443 | if (pgd_none(*pgd)) { |
| 444 | set_pgd(pgd, *pgd_k); | 444 | set_pgd(pgd, *pgd_k); |
| 445 | arch_flush_lazy_mmu_mode(); | 445 | arch_flush_lazy_mmu_mode(); |
| @@ -454,7 +454,7 @@ static noinline int vmalloc_fault(unsigned long address) | |||
| 454 | if (p4d_none(*p4d_k)) | 454 | if (p4d_none(*p4d_k)) |
| 455 | return -1; | 455 | return -1; |
| 456 | 456 | ||
| 457 | if (p4d_none(*p4d) && !pgtable_l5_enabled) { | 457 | if (p4d_none(*p4d) && !pgtable_l5_enabled()) { |
| 458 | set_p4d(p4d, *p4d_k); | 458 | set_p4d(p4d, *p4d_k); |
| 459 | arch_flush_lazy_mmu_mode(); | 459 | arch_flush_lazy_mmu_mode(); |
| 460 | } else { | 460 | } else { |
diff --git a/arch/x86/mm/ident_map.c b/arch/x86/mm/ident_map.c index a2f0c7e20fb0..fe7a12599d8e 100644 --- a/arch/x86/mm/ident_map.c +++ b/arch/x86/mm/ident_map.c | |||
| @@ -123,7 +123,7 @@ int kernel_ident_mapping_init(struct x86_mapping_info *info, pgd_t *pgd_page, | |||
| 123 | result = ident_p4d_init(info, p4d, addr, next); | 123 | result = ident_p4d_init(info, p4d, addr, next); |
| 124 | if (result) | 124 | if (result) |
| 125 | return result; | 125 | return result; |
| 126 | if (pgtable_l5_enabled) { | 126 | if (pgtable_l5_enabled()) { |
| 127 | set_pgd(pgd, __pgd(__pa(p4d) | info->kernpg_flag)); | 127 | set_pgd(pgd, __pgd(__pa(p4d) | info->kernpg_flag)); |
| 128 | } else { | 128 | } else { |
| 129 | /* | 129 | /* |
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c index 0a400606dea0..17383f9677fa 100644 --- a/arch/x86/mm/init_64.c +++ b/arch/x86/mm/init_64.c | |||
| @@ -180,7 +180,7 @@ static void sync_global_pgds_l4(unsigned long start, unsigned long end) | |||
| 180 | */ | 180 | */ |
| 181 | void sync_global_pgds(unsigned long start, unsigned long end) | 181 | void sync_global_pgds(unsigned long start, unsigned long end) |
| 182 | { | 182 | { |
| 183 | if (pgtable_l5_enabled) | 183 | if (pgtable_l5_enabled()) |
| 184 | sync_global_pgds_l5(start, end); | 184 | sync_global_pgds_l5(start, end); |
| 185 | else | 185 | else |
| 186 | sync_global_pgds_l4(start, end); | 186 | sync_global_pgds_l4(start, end); |
| @@ -643,7 +643,7 @@ phys_p4d_init(p4d_t *p4d_page, unsigned long paddr, unsigned long paddr_end, | |||
| 643 | unsigned long vaddr = (unsigned long)__va(paddr); | 643 | unsigned long vaddr = (unsigned long)__va(paddr); |
| 644 | int i = p4d_index(vaddr); | 644 | int i = p4d_index(vaddr); |
| 645 | 645 | ||
| 646 | if (!pgtable_l5_enabled) | 646 | if (!pgtable_l5_enabled()) |
| 647 | return phys_pud_init((pud_t *) p4d_page, paddr, paddr_end, page_size_mask); | 647 | return phys_pud_init((pud_t *) p4d_page, paddr, paddr_end, page_size_mask); |
| 648 | 648 | ||
| 649 | for (; i < PTRS_PER_P4D; i++, paddr = paddr_next) { | 649 | for (; i < PTRS_PER_P4D; i++, paddr = paddr_next) { |
| @@ -723,7 +723,7 @@ kernel_physical_mapping_init(unsigned long paddr_start, | |||
| 723 | page_size_mask); | 723 | page_size_mask); |
| 724 | 724 | ||
| 725 | spin_lock(&init_mm.page_table_lock); | 725 | spin_lock(&init_mm.page_table_lock); |
| 726 | if (pgtable_l5_enabled) | 726 | if (pgtable_l5_enabled()) |
| 727 | pgd_populate(&init_mm, pgd, p4d); | 727 | pgd_populate(&init_mm, pgd, p4d); |
| 728 | else | 728 | else |
| 729 | p4d_populate(&init_mm, p4d_offset(pgd, vaddr), (pud_t *) p4d); | 729 | p4d_populate(&init_mm, p4d_offset(pgd, vaddr), (pud_t *) p4d); |
| @@ -1100,7 +1100,7 @@ remove_p4d_table(p4d_t *p4d_start, unsigned long addr, unsigned long end, | |||
| 1100 | * 5-level case we should free them. This code will have to change | 1100 | * 5-level case we should free them. This code will have to change |
| 1101 | * to adapt for boot-time switching between 4 and 5 level page tables. | 1101 | * to adapt for boot-time switching between 4 and 5 level page tables. |
| 1102 | */ | 1102 | */ |
| 1103 | if (pgtable_l5_enabled) | 1103 | if (pgtable_l5_enabled()) |
| 1104 | free_pud_table(pud_base, p4d); | 1104 | free_pud_table(pud_base, p4d); |
| 1105 | } | 1105 | } |
| 1106 | 1106 | ||
diff --git a/arch/x86/mm/kasan_init_64.c b/arch/x86/mm/kasan_init_64.c index 340bb9b32e01..e3e77527f8df 100644 --- a/arch/x86/mm/kasan_init_64.c +++ b/arch/x86/mm/kasan_init_64.c | |||
| @@ -180,7 +180,7 @@ static void __init clear_pgds(unsigned long start, | |||
| 180 | * With folded p4d, pgd_clear() is nop, use p4d_clear() | 180 | * With folded p4d, pgd_clear() is nop, use p4d_clear() |
| 181 | * instead. | 181 | * instead. |
| 182 | */ | 182 | */ |
| 183 | if (pgtable_l5_enabled) | 183 | if (pgtable_l5_enabled()) |
| 184 | pgd_clear(pgd); | 184 | pgd_clear(pgd); |
| 185 | else | 185 | else |
| 186 | p4d_clear(p4d_offset(pgd, start)); | 186 | p4d_clear(p4d_offset(pgd, start)); |
| @@ -195,7 +195,7 @@ static inline p4d_t *early_p4d_offset(pgd_t *pgd, unsigned long addr) | |||
| 195 | { | 195 | { |
| 196 | unsigned long p4d; | 196 | unsigned long p4d; |
| 197 | 197 | ||
| 198 | if (!pgtable_l5_enabled) | 198 | if (!pgtable_l5_enabled()) |
| 199 | return (p4d_t *)pgd; | 199 | return (p4d_t *)pgd; |
| 200 | 200 | ||
| 201 | p4d = __pa_nodebug(pgd_val(*pgd)) & PTE_PFN_MASK; | 201 | p4d = __pa_nodebug(pgd_val(*pgd)) & PTE_PFN_MASK; |
| @@ -282,7 +282,7 @@ void __init kasan_early_init(void) | |||
| 282 | for (i = 0; i < PTRS_PER_PUD; i++) | 282 | for (i = 0; i < PTRS_PER_PUD; i++) |
| 283 | kasan_zero_pud[i] = __pud(pud_val); | 283 | kasan_zero_pud[i] = __pud(pud_val); |
| 284 | 284 | ||
| 285 | for (i = 0; pgtable_l5_enabled && i < PTRS_PER_P4D; i++) | 285 | for (i = 0; pgtable_l5_enabled() && i < PTRS_PER_P4D; i++) |
| 286 | kasan_zero_p4d[i] = __p4d(p4d_val); | 286 | kasan_zero_p4d[i] = __p4d(p4d_val); |
| 287 | 287 | ||
| 288 | kasan_map_early_shadow(early_top_pgt); | 288 | kasan_map_early_shadow(early_top_pgt); |
| @@ -313,7 +313,7 @@ void __init kasan_init(void) | |||
| 313 | * bunch of things like kernel code, modules, EFI mapping, etc. | 313 | * bunch of things like kernel code, modules, EFI mapping, etc. |
| 314 | * We need to take extra steps to not overwrite them. | 314 | * We need to take extra steps to not overwrite them. |
| 315 | */ | 315 | */ |
| 316 | if (pgtable_l5_enabled) { | 316 | if (pgtable_l5_enabled()) { |
| 317 | void *ptr; | 317 | void *ptr; |
| 318 | 318 | ||
| 319 | ptr = (void *)pgd_page_vaddr(*pgd_offset_k(KASAN_SHADOW_END)); | 319 | ptr = (void *)pgd_page_vaddr(*pgd_offset_k(KASAN_SHADOW_END)); |
diff --git a/arch/x86/mm/kaslr.c b/arch/x86/mm/kaslr.c index 615cc03ced84..61db77b0eda9 100644 --- a/arch/x86/mm/kaslr.c +++ b/arch/x86/mm/kaslr.c | |||
| @@ -78,7 +78,7 @@ void __init kernel_randomize_memory(void) | |||
| 78 | struct rnd_state rand_state; | 78 | struct rnd_state rand_state; |
| 79 | unsigned long remain_entropy; | 79 | unsigned long remain_entropy; |
| 80 | 80 | ||
| 81 | vaddr_start = pgtable_l5_enabled ? __PAGE_OFFSET_BASE_L5 : __PAGE_OFFSET_BASE_L4; | 81 | vaddr_start = pgtable_l5_enabled() ? __PAGE_OFFSET_BASE_L5 : __PAGE_OFFSET_BASE_L4; |
| 82 | vaddr = vaddr_start; | 82 | vaddr = vaddr_start; |
| 83 | 83 | ||
| 84 | /* | 84 | /* |
| @@ -124,7 +124,7 @@ void __init kernel_randomize_memory(void) | |||
| 124 | */ | 124 | */ |
| 125 | entropy = remain_entropy / (ARRAY_SIZE(kaslr_regions) - i); | 125 | entropy = remain_entropy / (ARRAY_SIZE(kaslr_regions) - i); |
| 126 | prandom_bytes_state(&rand_state, &rand, sizeof(rand)); | 126 | prandom_bytes_state(&rand_state, &rand, sizeof(rand)); |
| 127 | if (pgtable_l5_enabled) | 127 | if (pgtable_l5_enabled()) |
| 128 | entropy = (rand % (entropy + 1)) & P4D_MASK; | 128 | entropy = (rand % (entropy + 1)) & P4D_MASK; |
| 129 | else | 129 | else |
| 130 | entropy = (rand % (entropy + 1)) & PUD_MASK; | 130 | entropy = (rand % (entropy + 1)) & PUD_MASK; |
| @@ -136,7 +136,7 @@ void __init kernel_randomize_memory(void) | |||
| 136 | * randomization alignment. | 136 | * randomization alignment. |
| 137 | */ | 137 | */ |
| 138 | vaddr += get_padding(&kaslr_regions[i]); | 138 | vaddr += get_padding(&kaslr_regions[i]); |
| 139 | if (pgtable_l5_enabled) | 139 | if (pgtable_l5_enabled()) |
| 140 | vaddr = round_up(vaddr + 1, P4D_SIZE); | 140 | vaddr = round_up(vaddr + 1, P4D_SIZE); |
| 141 | else | 141 | else |
| 142 | vaddr = round_up(vaddr + 1, PUD_SIZE); | 142 | vaddr = round_up(vaddr + 1, PUD_SIZE); |
| @@ -212,7 +212,7 @@ void __meminit init_trampoline(void) | |||
| 212 | return; | 212 | return; |
| 213 | } | 213 | } |
| 214 | 214 | ||
| 215 | if (pgtable_l5_enabled) | 215 | if (pgtable_l5_enabled()) |
| 216 | init_trampoline_p4d(); | 216 | init_trampoline_p4d(); |
| 217 | else | 217 | else |
| 218 | init_trampoline_pud(); | 218 | init_trampoline_pud(); |
diff --git a/arch/x86/mm/tlb.c b/arch/x86/mm/tlb.c index e055d1a06699..6eb1f34c3c85 100644 --- a/arch/x86/mm/tlb.c +++ b/arch/x86/mm/tlb.c | |||
| @@ -157,7 +157,7 @@ static void sync_current_stack_to_mm(struct mm_struct *mm) | |||
| 157 | unsigned long sp = current_stack_pointer; | 157 | unsigned long sp = current_stack_pointer; |
| 158 | pgd_t *pgd = pgd_offset(mm, sp); | 158 | pgd_t *pgd = pgd_offset(mm, sp); |
| 159 | 159 | ||
| 160 | if (pgtable_l5_enabled) { | 160 | if (pgtable_l5_enabled()) { |
| 161 | if (unlikely(pgd_none(*pgd))) { | 161 | if (unlikely(pgd_none(*pgd))) { |
| 162 | pgd_t *pgd_ref = pgd_offset_k(sp); | 162 | pgd_t *pgd_ref = pgd_offset_k(sp); |
| 163 | 163 | ||
diff --git a/arch/x86/platform/efi/efi_64.c b/arch/x86/platform/efi/efi_64.c index bed7e7f4e44c..e01f7ceb9e7a 100644 --- a/arch/x86/platform/efi/efi_64.c +++ b/arch/x86/platform/efi/efi_64.c | |||
| @@ -225,7 +225,7 @@ int __init efi_alloc_page_tables(void) | |||
| 225 | 225 | ||
| 226 | pud = pud_alloc(&init_mm, p4d, EFI_VA_END); | 226 | pud = pud_alloc(&init_mm, p4d, EFI_VA_END); |
| 227 | if (!pud) { | 227 | if (!pud) { |
| 228 | if (pgtable_l5_enabled) | 228 | if (pgtable_l5_enabled()) |
| 229 | free_page((unsigned long) pgd_page_vaddr(*pgd)); | 229 | free_page((unsigned long) pgd_page_vaddr(*pgd)); |
| 230 | free_pages((unsigned long)efi_pgd, PGD_ALLOCATION_ORDER); | 230 | free_pages((unsigned long)efi_pgd, PGD_ALLOCATION_ORDER); |
| 231 | return -ENOMEM; | 231 | return -ENOMEM; |
diff --git a/arch/x86/power/hibernate_64.c b/arch/x86/power/hibernate_64.c index ccf4a49bb065..67ccf64c8bd8 100644 --- a/arch/x86/power/hibernate_64.c +++ b/arch/x86/power/hibernate_64.c | |||
| @@ -72,7 +72,7 @@ static int set_up_temporary_text_mapping(pgd_t *pgd) | |||
| 72 | * tables used by the image kernel. | 72 | * tables used by the image kernel. |
| 73 | */ | 73 | */ |
| 74 | 74 | ||
| 75 | if (pgtable_l5_enabled) { | 75 | if (pgtable_l5_enabled()) { |
| 76 | p4d = (p4d_t *)get_safe_page(GFP_ATOMIC); | 76 | p4d = (p4d_t *)get_safe_page(GFP_ATOMIC); |
| 77 | if (!p4d) | 77 | if (!p4d) |
| 78 | return -ENOMEM; | 78 | return -ENOMEM; |
