Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755393AbeAHSLG (ORCPT + 1 other); Mon, 8 Jan 2018 13:11:06 -0500 Received: from mail-wr0-f196.google.com ([209.85.128.196]:47094 "EHLO mail-wr0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754896AbeAHSIw (ORCPT ); Mon, 8 Jan 2018 13:08:52 -0500 X-Google-Smtp-Source: ACJfBotU6c7XuH7t7nGE4g11ABnXiDFFKgkGUvgdb3aH7OfueSMULS5gbrfpBOL6dzI7XxMArzNaNg== From: Paolo Bonzini To: linux-kernel@vger.kernel.org, kvm@vger.kernel.org Cc: jmattson@google.com, aliguori@amazon.com, thomas.lendacky@amd.com, dwmw@amazon.co.uk, bp@alien8.de Subject: [PATCH 1/7] KVM: x86: add SPEC_CTRL and IBPB_SUPPORT accessors Date: Mon, 8 Jan 2018 19:08:39 +0100 Message-Id: <1515434925-10250-2-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1515434925-10250-1-git-send-email-pbonzini@redhat.com> References: <1515434925-10250-1-git-send-email-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. 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