summaryrefslogtreecommitdiffstats
path: root/arch/x86
diff options
context:
space:
mode:
authorKirill A. Shutemov <kirill.shutemov@linux.intel.com>2018-05-18 06:35:24 -0400
committerIngo Molnar <mingo@kernel.org>2018-05-19 05:56:57 -0400
commited7588d5dc6f5e7202fb9bbeb14d94706ba225d7 (patch)
tree359a4e804f7d677e83b0283975bb1bc39ae3ca56 /arch/x86
parentad3fe525b9507d8d750d60e8e5dd8e0c0836fb99 (diff)
x86/mm: Stop pretending pgtable_l5_enabled is a variable
pgtable_l5_enabled is defined using cpu_feature_enabled() but we refer to it as a variable. This is misleading. Make pgtable_l5_enabled() a function. We cannot literally define it as a function due to circular dependencies between header files. Function-alike macros is close enough. Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Reviewed-by: Thomas Gleixner <tglx@linutronix.de> Cc: Hugh Dickins <hughd@google.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Link: http://lkml.kernel.org/r/20180518103528.59260-4-kirill.shutemov@linux.intel.com Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'arch/x86')
-rw-r--r--arch/x86/include/asm/page_64_types.h2
-rw-r--r--arch/x86/include/asm/paravirt.h4
-rw-r--r--arch/x86/include/asm/pgalloc.h4
-rw-r--r--arch/x86/include/asm/pgtable.h10
-rw-r--r--arch/x86/include/asm/pgtable_32_types.h2
-rw-r--r--arch/x86/include/asm/pgtable_64.h2
-rw-r--r--arch/x86/include/asm/pgtable_64_types.h14
-rw-r--r--arch/x86/include/asm/sparsemem.h4
-rw-r--r--arch/x86/kernel/head64.c2
-rw-r--r--arch/x86/kernel/machine_kexec_64.c3
-rw-r--r--arch/x86/mm/dump_pagetables.c6
-rw-r--r--arch/x86/mm/fault.c4
-rw-r--r--arch/x86/mm/ident_map.c2
-rw-r--r--arch/x86/mm/init_64.c8
-rw-r--r--arch/x86/mm/kasan_init_64.c8
-rw-r--r--arch/x86/mm/kaslr.c8
-rw-r--r--arch/x86/mm/tlb.c2
-rw-r--r--arch/x86/platform/efi/efi_64.c2
-rw-r--r--arch/x86/power/hibernate_64.c2
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
168static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, p4d_t *p4d) 168static 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);
193static inline void __p4d_free_tlb(struct mmu_gather *tlb, p4d_t *p4d, 193static 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
882static inline int pgd_present(pgd_t pgd) 882static 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. */
901static inline p4d_t *p4d_offset(pgd_t *pgd, unsigned long address) 901static 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
921static inline int pgd_none(pgd_t pgd) 921static 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 31static 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
39extern unsigned int pgdir_shift; 43extern 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
482static inline bool is_hypervisor_range(int idx) 482static 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 */
181void sync_global_pgds(unsigned long start, unsigned long end) 181void 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;