On Mon, Jan 08, 2018 at 07:08:39PM +0100, Paolo Bonzini wrote: > As an interim measure until SPEC_CTRL is supported by upstream > Linux in cpufeatures, add a function that lets vmx.c and svm.c > know whether to save/restore MSR_IA32_SPEC_CTRL. Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx> > > Signed-off-by: Paolo Bonzini <pbonzini@xxxxxxxxxx> > --- > arch/x86/kvm/cpuid.c | 3 --- > arch/x86/kvm/cpuid.h | 22 ++++++++++++++++++++++ > 2 files changed, 22 insertions(+), 3 deletions(-) > > diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c > index 8e9a07c557f1..767af697c20c 100644 > --- a/arch/x86/kvm/cpuid.c > +++ b/arch/x86/kvm/cpuid.c > @@ -67,9 +67,6 @@ u64 kvm_supported_xcr0(void) > > #define F(x) bit(X86_FEATURE_##x) > > -/* These are scattered features in cpufeatures.h. */ > -#define KVM_CPUID_BIT_AVX512_4VNNIW 2 > -#define KVM_CPUID_BIT_AVX512_4FMAPS 3 > #define KF(x) bit(KVM_CPUID_BIT_##x) > > int kvm_update_cpuid(struct kvm_vcpu *vcpu) > diff --git a/arch/x86/kvm/cpuid.h b/arch/x86/kvm/cpuid.h > index c2cea6651279..8d04ccf177ce 100644 > --- a/arch/x86/kvm/cpuid.h > +++ b/arch/x86/kvm/cpuid.h > @@ -155,6 +155,28 @@ static inline int guest_cpuid_stepping(struct kvm_vcpu *vcpu) > return x86_stepping(best->eax); > } > > +/* These are scattered features in cpufeatures.h. */ > +#define KVM_CPUID_BIT_AVX512_4VNNIW 2 > +#define KVM_CPUID_BIT_AVX512_4FMAPS 3 > +#define KVM_CPUID_BIT_SPEC_CTRL 26 > +#define KVM_CPUID_BIT_STIBP 27 > + > +/* CPUID[eax=0x80000008].ebx */ > +#define KVM_CPUID_BIT_IBPB_SUPPORT 12 > + > +static inline bool cpu_has_spec_ctrl(void) > +{ > + u32 eax, ebx, ecx, edx; > + cpuid_count(7, 0, &eax, &ebx, &ecx, &edx); > + > + return edx & bit(KVM_CPUID_BIT_SPEC_CTRL); > +} > + > +static inline bool cpu_has_ibpb_support(void) > +{ > + return cpuid_ebx(0x80000008) & bit(KVM_CPUID_BIT_IBPB_SUPPORT); > +} > + > static inline bool supports_cpuid_fault(struct kvm_vcpu *vcpu) > { > return vcpu->arch.msr_platform_info & MSR_PLATFORM_INFO_CPUID_FAULT; > -- > 1.8.3.1 > >