On Wed, 21 Feb 2024 at 11:09, Borislav Petkov <bp@xxxxxxxxx> wrote: > > On Wed, Feb 21, 2024 at 12:33:08AM +0100, Ard Biesheuvel wrote: > > Right, this is the same issue as in #11 - in both cases, the extern > > declaration of __pgtable_l5_enabled needs to be visible regardless of > > CONFIG_X86_5LEVEL. > > Yap, I don't mind something like below. > > 5LEVEL will be practically enabled everywhere. > > diff --git a/arch/x86/kernel/head64.c b/arch/x86/kernel/head64.c > index 158da0fd01d2..eeb1744215f2 100644 > --- a/arch/x86/kernel/head64.c > +++ b/arch/x86/kernel/head64.c > @@ -52,13 +52,11 @@ extern pmd_t early_dynamic_pgts[EARLY_DYNAMIC_PAGE_TABLES][PTRS_PER_PMD]; > static unsigned int __initdata next_early_pgt; > pmdval_t early_pmd_flags = __PAGE_KERNEL_LARGE & ~(_PAGE_GLOBAL | _PAGE_NX); > > -#ifdef CONFIG_X86_5LEVEL > unsigned int __pgtable_l5_enabled __ro_after_init; > unsigned int pgdir_shift __ro_after_init = 39; > EXPORT_SYMBOL(pgdir_shift); > unsigned int ptrs_per_p4d __ro_after_init = 1; > EXPORT_SYMBOL(ptrs_per_p4d); > -#endif > Just the below should be sufficient --- a/arch/x86/include/asm/pgtable_64_types.h +++ b/arch/x86/include/asm/pgtable_64_types.h @@ -22,7 +22,7 @@ typedef struct { pteval_t pte; } pte_t; typedef struct { pmdval_t pmd; } pmd_t; -#ifdef CONFIG_X86_5LEVEL extern unsigned int __pgtable_l5_enabled; +#ifdef CONFIG_X86_5LEVEL #ifdef USE_EARLY_PGTABLE_L5 /*