On Fri, Oct 19, 2018 at 9:50 PM Du Changbin <changbin.du@xxxxxxxxx> wrote: > > The level4_kernel_pgt is only defined when X86_5LEVEL is enabled. So > surround level4_kernel_pgt with #ifdef CONFIG_X86_5LEVEL...#endif to > make code correct. For clarification, is it better to mention that this is a preparation for CONFIG_CC_OPTIMIZE_FOR_DEBUGGING ? > Signed-off-by: Du Changbin <changbin.du@xxxxxxxxx> > Acked-by: Steven Rostedt (VMware) <rostedt@xxxxxxxxxxx> > --- > arch/x86/include/asm/pgtable_64.h | 2 ++ > arch/x86/kernel/head64.c | 13 ++++++------- > 2 files changed, 8 insertions(+), 7 deletions(-) > > diff --git a/arch/x86/include/asm/pgtable_64.h b/arch/x86/include/asm/pgtable_64.h > index 9c85b54bf03c..9333f7fa5bdb 100644 > --- a/arch/x86/include/asm/pgtable_64.h > +++ b/arch/x86/include/asm/pgtable_64.h > @@ -16,7 +16,9 @@ > #include <linux/threads.h> > #include <asm/fixmap.h> > > +#ifdef CONFIG_X86_5LEVEL > extern p4d_t level4_kernel_pgt[512]; > +#endif Is this #ifdef necessary? It is harmless to declaring unused stuff. > extern p4d_t level4_ident_pgt[512]; > extern pud_t level3_kernel_pgt[512]; > extern pud_t level3_ident_pgt[512]; > diff --git a/arch/x86/kernel/head64.c b/arch/x86/kernel/head64.c > index ddee1f0870c4..4a59ef93c258 100644 > --- a/arch/x86/kernel/head64.c > +++ b/arch/x86/kernel/head64.c > @@ -151,16 +151,15 @@ unsigned long __head __startup_64(unsigned long physaddr, > > pgd = fixup_pointer(&early_top_pgt, physaddr); > p = pgd + pgd_index(__START_KERNEL_map); > - if (la57) > - *p = (unsigned long)level4_kernel_pgt; > - else > - *p = (unsigned long)level3_kernel_pgt; > - *p += _PAGE_TABLE_NOENC - __START_KERNEL_map + load_delta; > - > +#ifdef CONFIG_X86_5LEVEL > if (la57) { > + *p = (unsigned long)level4_kernel_pgt; > p4d = fixup_pointer(&level4_kernel_pgt, physaddr); > p4d[511] += load_delta; > - } > + } else > +#endif > + *p = (unsigned long)level3_kernel_pgt; > + *p += _PAGE_TABLE_NOENC - __START_KERNEL_map + load_delta; > > pud = fixup_pointer(&level3_kernel_pgt, physaddr); > pud[510] += load_delta; > -- > 2.17.1 > Hmm, this code looks a bit ugly... Does the following one liner work with CONFIG_CC_OPTIMIZE_FOR_DEBUGGING ? diff --git a/arch/x86/kernel/head64.c b/arch/x86/kernel/head64.c index 8047379..579847f 100644 --- a/arch/x86/kernel/head64.c +++ b/arch/x86/kernel/head64.c @@ -97,7 +97,7 @@ static bool __head check_la57_support(unsigned long physaddr) return true; } #else -static bool __head check_la57_support(unsigned long physaddr) +static __always_inline bool __head check_la57_support(unsigned long physaddr) { return false; } -- Best Regards Masahiro Yamada