lkml.org 
[lkml]   [2017]   [Jun]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v4 07/10] x86/mm: Disable PCID on 32-bit kernels
    Date
    32-bit kernels on new hardware will see PCID in CPUID, but PCID can
    only be used in 64-bit mode. Rather than making all PCID code
    conditional, just disable the feature on 32-bit builds.

    Reviewed-by: Nadav Amit <nadav.amit@gmail.com>
    Reviewed-by: Borislav Petkov <bp@suse.de>
    Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
    Signed-off-by: Andy Lutomirski <luto@kernel.org>
    ---
    arch/x86/include/asm/disabled-features.h | 4 +++-
    arch/x86/kernel/cpu/bugs.c | 8 ++++++++
    2 files changed, 11 insertions(+), 1 deletion(-)

    diff --git a/arch/x86/include/asm/disabled-features.h b/arch/x86/include/asm/disabled-features.h
    index 5dff775af7cd..c10c9128f54e 100644
    --- a/arch/x86/include/asm/disabled-features.h
    +++ b/arch/x86/include/asm/disabled-features.h
    @@ -21,11 +21,13 @@
    # define DISABLE_K6_MTRR (1<<(X86_FEATURE_K6_MTRR & 31))
    # define DISABLE_CYRIX_ARR (1<<(X86_FEATURE_CYRIX_ARR & 31))
    # define DISABLE_CENTAUR_MCR (1<<(X86_FEATURE_CENTAUR_MCR & 31))
    +# define DISABLE_PCID 0
    #else
    # define DISABLE_VME 0
    # define DISABLE_K6_MTRR 0
    # define DISABLE_CYRIX_ARR 0
    # define DISABLE_CENTAUR_MCR 0
    +# define DISABLE_PCID (1<<(X86_FEATURE_PCID & 31))
    #endif /* CONFIG_X86_64 */

    #ifdef CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS
    @@ -49,7 +51,7 @@
    #define DISABLED_MASK1 0
    #define DISABLED_MASK2 0
    #define DISABLED_MASK3 (DISABLE_CYRIX_ARR|DISABLE_CENTAUR_MCR|DISABLE_K6_MTRR)
    -#define DISABLED_MASK4 0
    +#define DISABLED_MASK4 (DISABLE_PCID)
    #define DISABLED_MASK5 0
    #define DISABLED_MASK6 0
    #define DISABLED_MASK7 0
    diff --git a/arch/x86/kernel/cpu/bugs.c b/arch/x86/kernel/cpu/bugs.c
    index 0af86d9242da..db684880d74a 100644
    --- a/arch/x86/kernel/cpu/bugs.c
    +++ b/arch/x86/kernel/cpu/bugs.c
    @@ -21,6 +21,14 @@

    void __init check_bugs(void)
    {
    +#ifdef CONFIG_X86_32
    + /*
    + * Regardless of whether PCID is enumerated, the SDM says
    + * that it can't be enabled in 32-bit mode.
    + */
    + setup_clear_cpu_cap(X86_FEATURE_PCID);
    +#endif
    +
    identify_boot_cpu();

    if (!IS_ENABLED(CONFIG_SMP)) {
    --
    2.9.4
    \
     
     \ /
      Last update: 2017-06-29 17:55    [W:2.822 / U:0.196 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site