Here's several patches that I would like to queue for v4.18. Please review and consider applying.
In this version I've addressed Thomas' feedback. Changing __pgtable_l5_enabled to __initdata is not as trivial as I hoped. It requires few tricks to avoid section mismatch. I'm not sure if it worth the gain. We can keep it __ro_after_init. If you feel it's too invasive, just drop last three patches. Kirill A. Shutemov (7): x86/boot/compressed/64: Fix trampoline page table address calculation x86/mm: Unify pgtable_l5_enabled usage in early boot code x86/mm: Stop pretending pgtable_l5_enabled is a variable x86/mm: Introduce 'no5lvl' kernel parameter x86/cpu: Move early cpu initialization into a separate translation unit x86/mm: Mark p4d_offset() __always_inline x86/mm: Mark __pgtable_l5_enabled __initdata .../admin-guide/kernel-parameters.txt | 3 + arch/x86/boot/compressed/cmdline.c | 2 +- arch/x86/boot/compressed/head_64.S | 1 + arch/x86/boot/compressed/kaslr.c | 4 +- arch/x86/boot/compressed/misc.h | 6 +- arch/x86/boot/compressed/pgtable_64.c | 14 +- arch/x86/include/asm/page_64_types.h | 2 +- arch/x86/include/asm/paravirt.h | 4 +- arch/x86/include/asm/pgalloc.h | 4 +- arch/x86/include/asm/pgtable.h | 12 +- arch/x86/include/asm/pgtable_32_types.h | 2 +- arch/x86/include/asm/pgtable_64.h | 2 +- arch/x86/include/asm/pgtable_64_types.h | 25 ++- arch/x86/include/asm/sparsemem.h | 4 +- arch/x86/kernel/cpu/Makefile | 1 + arch/x86/kernel/cpu/common.c | 179 +++--------------- arch/x86/kernel/cpu/cpu.h | 7 + arch/x86/kernel/cpu/early.c | 159 ++++++++++++++++ arch/x86/kernel/head64.c | 25 ++- arch/x86/kernel/machine_kexec_64.c | 3 +- arch/x86/mm/dump_pagetables.c | 6 +- arch/x86/mm/fault.c | 4 +- arch/x86/mm/ident_map.c | 2 +- arch/x86/mm/init_64.c | 8 +- arch/x86/mm/kasan_init_64.c | 14 +- arch/x86/mm/kaslr.c | 8 +- arch/x86/mm/tlb.c | 2 +- arch/x86/platform/efi/efi_64.c | 2 +- arch/x86/power/hibernate_64.c | 2 +- 29 files changed, 279 insertions(+), 228 deletions(-) create mode 100644 arch/x86/kernel/cpu/early.c -- 2.17.0