Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755840AbeAIMGR (ORCPT + 1 other); Tue, 9 Jan 2018 07:06:17 -0500 Received: from mail-wr0-f195.google.com ([209.85.128.195]:42415 "EHLO mail-wr0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750710AbeAIMDT (ORCPT ); Tue, 9 Jan 2018 07:03:19 -0500 X-Google-Smtp-Source: ACJfBovLCqhx+iu4aGc3S2qBYHnrj2b4etr60YCpxJ8WlF5YaHVX5/PvEICdx4nnvvPg737LC6or/w== From: Paolo Bonzini To: linux-kernel@vger.kernel.org, kvm@vger.kernel.org Cc: rkrcmar@redhat.com, liran.alon@oracle.com, jmattson@google.com, aliguori@amazon.com, thomas.lendacky@amd.com, dwmw@amazon.co.uk, bp@alien8.de, x86@kernel.org Subject: [PATCH 1/8] KVM: x86: add SPEC_CTRL and IBPB_SUPPORT accessors Date: Tue, 9 Jan 2018 13:03:03 +0100 Message-Id: <20180109120311.27565-2-pbonzini@redhat.com> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180109120311.27565-1-pbonzini@redhat.com> References: <20180109120311.27565-1-pbonzini@redhat.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Return-Path: 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 Signed-off-by: Paolo Bonzini --- 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