Message ID | 20200203151608.28053-2-xiaoyao.li@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | kvm/split_lock: Add feature split lock detection support in kvm | expand |
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@intel.com> > --- > 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 >
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); + static const struct { const char *option; enum split_lock_detect_state state;
get_split_lock_detect_state() will be used by KVM module to get sld_state. Signed-off-by: Xiaoyao Li <xiaoyao.li@intel.com> --- arch/x86/include/asm/cpu.h | 12 ++++++++++++ arch/x86/kernel/cpu/intel.c | 12 ++++++------ 2 files changed, 18 insertions(+), 6 deletions(-)