lkml.org 
[lkml]   [2020]   [Aug]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v10 3/9] x86/split_lock: Introduce flag X86_FEATURE_SLD_FATAL and drop sld_state
    Date
    Introduce a synthetic feature flag X86_FEATURE_SLD_FATAL, which means
    kernel is in sld_fatal mode if set.

    Now sld_state is not needed any more that the state of SLD can be
    inferred from X86_FEATURE_SPLIT_LOCK_DETECT and X86_FEATURE_SLD_FATAL.

    Suggested-by: Sean Christopherson <sean.j.christopherson@intel.com>
    Signed-off-by: Xiaoyao Li <xiaoyao.li@intel.com>
    ---
    arch/x86/include/asm/cpufeatures.h | 1 +
    arch/x86/kernel/cpu/intel.c | 16 ++++++----------
    2 files changed, 7 insertions(+), 10 deletions(-)

    diff --git a/arch/x86/include/asm/cpufeatures.h b/arch/x86/include/asm/cpufeatures.h
    index 2901d5df4366..caf9f4e3e876 100644
    --- a/arch/x86/include/asm/cpufeatures.h
    +++ b/arch/x86/include/asm/cpufeatures.h
    @@ -288,6 +288,7 @@
    #define X86_FEATURE_FENCE_SWAPGS_USER (11*32+ 4) /* "" LFENCE in user entry SWAPGS path */
    #define X86_FEATURE_FENCE_SWAPGS_KERNEL (11*32+ 5) /* "" LFENCE in kernel entry SWAPGS path */
    #define X86_FEATURE_SPLIT_LOCK_DETECT (11*32+ 6) /* #AC for split lock */
    +#define X86_FEATURE_SLD_FATAL (11*32+ 7) /* split lock detection in fatal mode */

    /* Intel-defined CPU features, CPUID level 0x00000007:1 (EAX), word 12 */
    #define X86_FEATURE_AVX512_BF16 (12*32+ 5) /* AVX512 BFLOAT16 instructions */
    diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c
    index 5dab842ba7e1..06de03974e66 100644
    --- a/arch/x86/kernel/cpu/intel.c
    +++ b/arch/x86/kernel/cpu/intel.c
    @@ -42,12 +42,6 @@ enum split_lock_detect_state {
    sld_fatal,
    };

    -/*
    - * Default to sld_off because most systems do not support split lock detection
    - * split_lock_setup() will switch this to sld_warn on systems that support
    - * split lock detect, unless there is a command line override.
    - */
    -static enum split_lock_detect_state sld_state __ro_after_init = sld_off;
    static u64 msr_test_ctrl_cache __ro_after_init;

    /*
    @@ -1058,8 +1052,9 @@ static void __init split_lock_setup(void)
    return;
    }

    - sld_state = state;
    setup_force_cpu_cap(X86_FEATURE_SPLIT_LOCK_DETECT);
    + if (state == sld_fatal)
    + setup_force_cpu_cap(X86_FEATURE_SLD_FATAL);
    }

    /*
    @@ -1080,7 +1075,7 @@ static void sld_update_msr(bool on)
    static void split_lock_init(void)
    {
    if (cpu_model_supports_sld)
    - split_lock_verify_msr(sld_state != sld_off);
    + split_lock_verify_msr(boot_cpu_has(X86_FEATURE_SPLIT_LOCK_DETECT));
    }

    static void split_lock_warn(unsigned long ip)
    @@ -1099,7 +1094,7 @@ static void split_lock_warn(unsigned long ip)

    bool handle_guest_split_lock(unsigned long ip)
    {
    - if (sld_state == sld_warn) {
    + if (!boot_cpu_has(X86_FEATURE_SLD_FATAL)) {
    split_lock_warn(ip);
    return true;
    }
    @@ -1116,7 +1111,8 @@ EXPORT_SYMBOL_GPL(handle_guest_split_lock);

    bool handle_user_split_lock(struct pt_regs *regs, long error_code)
    {
    - if ((regs->flags & X86_EFLAGS_AC) || sld_state == sld_fatal)
    + if ((regs->flags & X86_EFLAGS_AC) ||
    + boot_cpu_has(X86_FEATURE_SLD_FATAL))
    return false;
    split_lock_warn(regs->ip);
    return true;
    --
    2.18.4
    \
     
     \ /
      Last update: 2020-08-19 08:49    [W:3.302 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site