There're bunch of workaround to make switching between 4- and 5-level paging compile. All of them need to be addressed properly before upstreaming. Not-yet-signed-off-by: Kirill A. Shutemov <kirill.shutemov@xxxxxxxxxxxxxxx> --- arch/x86/Kconfig | 4 ++-- arch/x86/entry/entry_64.S | 5 +++++ arch/x86/kernel/head_64.S | 6 ++++-- arch/x86/xen/Kconfig | 2 +- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 0bf81e837cbf..c795207d8a3c 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -100,7 +100,7 @@ config X86 select HAVE_ARCH_AUDITSYSCALL select HAVE_ARCH_HUGE_VMAP if X86_64 || X86_PAE select HAVE_ARCH_JUMP_LABEL - select HAVE_ARCH_KASAN if X86_64 && SPARSEMEM_VMEMMAP + select HAVE_ARCH_KASAN if X86_64 && SPARSEMEM_VMEMMAP && !X86_5LEVEL select HAVE_ARCH_KGDB select HAVE_ARCH_KMEMCHECK select HAVE_ARCH_MMAP_RND_BITS if MMU @@ -1980,7 +1980,7 @@ config RELOCATABLE config RANDOMIZE_BASE bool "Randomize the address of the kernel image (KASLR)" - depends on RELOCATABLE + depends on RELOCATABLE && !X86_5LEVEL default y ---help--- In support of Kernel Address Space Layout Randomization (KASLR), diff --git a/arch/x86/entry/entry_64.S b/arch/x86/entry/entry_64.S index edec30584eb8..9e868fd6d792 100644 --- a/arch/x86/entry/entry_64.S +++ b/arch/x86/entry/entry_64.S @@ -269,6 +269,11 @@ return_from_SYSCALL_64: * Change top bits to match most significant bit (47th or 56th bit * depending on paging mode) in the address. */ +#ifdef CONFIG_X86_5LEVEL +#warning FIXME +#undef __VIRTUAL_MASK_SHIFT +#define __VIRTUAL_MASK_SHIFT 56 +#endif shl $(64 - (__VIRTUAL_MASK_SHIFT+1)), %rcx sar $(64 - (__VIRTUAL_MASK_SHIFT+1)), %rcx diff --git a/arch/x86/kernel/head_64.S b/arch/x86/kernel/head_64.S index 2009d9849e98..9dcf7a4d8612 100644 --- a/arch/x86/kernel/head_64.S +++ b/arch/x86/kernel/head_64.S @@ -37,11 +37,13 @@ * */ -#define p4d_index(x) (((x) >> P4D_SHIFT) & (PTRS_PER_P4D-1)) #define pud_index(x) (((x) >> PUD_SHIFT) & (PTRS_PER_PUD-1)) -PGD_PAGE_OFFSET = pgd_index(__PAGE_OFFSET_BASE) +#ifdef CONFIG_XEN +/* FIXME */ +PGD_PAGE_OFFSET = pgd_index(__PAGE_OFFSET_BASE48) PGD_START_KERNEL = pgd_index(__START_KERNEL_map) +#endif L3_START_KERNEL = pud_index(__START_KERNEL_map) .text diff --git a/arch/x86/xen/Kconfig b/arch/x86/xen/Kconfig index 1be9667bd476..c1714cac7595 100644 --- a/arch/x86/xen/Kconfig +++ b/arch/x86/xen/Kconfig @@ -4,7 +4,7 @@ config XEN bool "Xen guest support" - depends on PARAVIRT + depends on PARAVIRT && !X86_5LEVEL select PARAVIRT_CLOCK depends on X86_64 || (X86_32 && X86_PAE) depends on X86_LOCAL_APIC && X86_TSC -- 2.11.0 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>