On Mon, Feb 03, 2020 at 11:16:03PM +0800, Xiaoyao Li wrote: > get_split_lock_detect_state() will be used by KVM module to get sld_state. > > Signed-off-by: Xiaoyao Li <xiaoyao.li@xxxxxxxxx> > --- > arch/x86/include/asm/cpu.h | 12 ++++++++++++ > arch/x86/kernel/cpu/intel.c | 12 ++++++------ > 2 files changed, 18 insertions(+), 6 deletions(-) > > diff --git a/arch/x86/include/asm/cpu.h b/arch/x86/include/asm/cpu.h > index ff6f3ca649b3..167d0539e0ad 100644 > --- a/arch/x86/include/asm/cpu.h > +++ b/arch/x86/include/asm/cpu.h > @@ -40,11 +40,23 @@ int mwait_usable(const struct cpuinfo_x86 *); > unsigned int x86_family(unsigned int sig); > unsigned int x86_model(unsigned int sig); > unsigned int x86_stepping(unsigned int sig); > + > +enum split_lock_detect_state { > + sld_off = 0, > + sld_warn, > + sld_fatal, > +}; > + > #ifdef CONFIG_CPU_SUP_INTEL > +extern enum split_lock_detect_state get_split_lock_detect_state(void); > extern void __init cpu_set_core_cap_bits(struct cpuinfo_x86 *c); > extern void switch_to_sld(unsigned long tifn); > extern bool handle_user_split_lock(struct pt_regs *regs, long error_code); > #else > +static inline enum split_lock_detect_state get_split_lock_detect_state(void) > +{ > + return sld_off; > +} > static inline void __init cpu_set_core_cap_bits(struct cpuinfo_x86 *c) {} > static inline void switch_to_sld(unsigned long tifn) {} > static inline bool handle_user_split_lock(struct pt_regs *regs, long error_code) > diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c > index db3e745e5d47..a810cd022db5 100644 > --- a/arch/x86/kernel/cpu/intel.c > +++ b/arch/x86/kernel/cpu/intel.c > @@ -33,12 +33,6 @@ > #include <asm/apic.h> > #endif > > -enum split_lock_detect_state { > - sld_off = 0, > - sld_warn, > - 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 > @@ -968,6 +962,12 @@ cpu_dev_register(intel_cpu_dev); > #undef pr_fmt > #define pr_fmt(fmt) "x86/split lock detection: " fmt > > +enum split_lock_detect_state get_split_lock_detect_state(void) > +{ > + return sld_state; > +} > +EXPORT_SYMBOL_GPL(get_split_lock_detect_state); I'm pretty sure KVM doesn't need to differentiate between warn and fatal if its #AC interceptor is routed through handle_user_split_lock(). I.e. this can return a boolean without exporting the enum. bool is_split_lock_detect_enabled(void) { return sld_state != sld_off; } > + > static const struct { > const char *option; > enum split_lock_detect_state state; > -- > 2.23.0 >