lkml.org 
[lkml]   [2018]   [Feb]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 9/9] x86/mm: Allow to boot without la57 if CONFIG_X86_5LEVEL=y
    Date
    All pieces of the puzzle are in place and we can now allow to boot with
    CONFIG_X86_5LEVEL=y on a machine without la57 support.

    Kernel will detect that la57 is missing and fold p4d at runtime.

    Update documentation and Kconfig option description to reflect the
    change.

    Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
    ---
    Documentation/x86/x86_64/5level-paging.txt | 9 +++------
    arch/x86/Kconfig | 4 ++--
    arch/x86/boot/compressed/misc.c | 16 ----------------
    arch/x86/include/asm/required-features.h | 8 +-------
    4 files changed, 6 insertions(+), 31 deletions(-)

    diff --git a/Documentation/x86/x86_64/5level-paging.txt b/Documentation/x86/x86_64/5level-paging.txt
    index 087251a0d99c..2432a5ef86d9 100644
    --- a/Documentation/x86/x86_64/5level-paging.txt
    +++ b/Documentation/x86/x86_64/5level-paging.txt
    @@ -20,12 +20,9 @@ Documentation/x86/x86_64/mm.txt

    CONFIG_X86_5LEVEL=y enables the feature.

    -So far, a kernel compiled with the option enabled will be able to boot
    -only on machines that supports the feature -- see for 'la57' flag in
    -/proc/cpuinfo.
    -
    -The plan is to implement boot-time switching between 4- and 5-level paging
    -in the future.
    +Kernel with CONFIG_X86_5LEVEL=y still able to boot on 4-level hardware.
    +In this case additional page table level -- p4d -- will be folded at
    +runtime.

    == User-space and large virtual address space ==

    diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
    index 0d780a3ee924..40140378c3e6 100644
    --- a/arch/x86/Kconfig
    +++ b/arch/x86/Kconfig
    @@ -1481,8 +1481,8 @@ config X86_5LEVEL

    It will be supported by future Intel CPUs.

    - Note: a kernel with this option enabled can only be booted
    - on machines that support the feature.
    + A kernel with the option enabled can be booted on machines that
    + support 4- or 5-level paging.

    See Documentation/x86/x86_64/5level-paging.txt for more
    information.
    diff --git a/arch/x86/boot/compressed/misc.c b/arch/x86/boot/compressed/misc.c
    index 98761a1576ce..b50c42455e25 100644
    --- a/arch/x86/boot/compressed/misc.c
    +++ b/arch/x86/boot/compressed/misc.c
    @@ -169,16 +169,6 @@ void __puthex(unsigned long value)
    }
    }

    -static bool l5_supported(void)
    -{
    - /* Check if leaf 7 is supported. */
    - if (native_cpuid_eax(0) < 7)
    - return 0;
    -
    - /* Check if la57 is supported. */
    - return native_cpuid_ecx(7) & (1 << (X86_FEATURE_LA57 & 31));
    -}
    -
    #if CONFIG_X86_NEED_RELOCS
    static void handle_relocations(void *output, unsigned long output_len,
    unsigned long virt_addr)
    @@ -372,12 +362,6 @@ asmlinkage __visible void *extract_kernel(void *rmode, memptr heap,
    console_init();
    debug_putstr("early console in extract_kernel\n");

    - if (IS_ENABLED(CONFIG_X86_5LEVEL) && !l5_supported()) {
    - error("This linux kernel as configured requires 5-level paging\n"
    - "This CPU does not support the required 'cr4.la57' feature\n"
    - "Unable to boot - please use a kernel appropriate for your CPU\n");
    - }
    -
    free_mem_ptr = heap; /* Heap */
    free_mem_end_ptr = heap + BOOT_HEAP_SIZE;

    diff --git a/arch/x86/include/asm/required-features.h b/arch/x86/include/asm/required-features.h
    index fb3a6de7440b..6847d85400a8 100644
    --- a/arch/x86/include/asm/required-features.h
    +++ b/arch/x86/include/asm/required-features.h
    @@ -53,12 +53,6 @@
    # define NEED_MOVBE 0
    #endif

    -#ifdef CONFIG_X86_5LEVEL
    -# define NEED_LA57 (1<<(X86_FEATURE_LA57 & 31))
    -#else
    -# define NEED_LA57 0
    -#endif
    -
    #ifdef CONFIG_X86_64
    #ifdef CONFIG_PARAVIRT
    /* Paravirtualized systems may not have PSE or PGE available */
    @@ -104,7 +98,7 @@
    #define REQUIRED_MASK13 0
    #define REQUIRED_MASK14 0
    #define REQUIRED_MASK15 0
    -#define REQUIRED_MASK16 (NEED_LA57)
    +#define REQUIRED_MASK16 0
    #define REQUIRED_MASK17 0
    #define REQUIRED_MASK18 0
    #define REQUIRED_MASK_CHECK BUILD_BUG_ON_ZERO(NCAPINTS != 19)
    --
    2.15.1
    \
     
     \ /
      Last update: 2018-02-14 19:28    [W:3.153 / U:0.436 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site