From: Yang Weijiang <weijiang.yang@intel.com>
To: seanjc@google.com, pbonzini@redhat.com, dave.hansen@intel.com,
kvm@vger.kernel.org, linux-kernel@vger.kernel.org,
x86@kernel.org, yuan.yao@linux.intel.com
Cc: peterz@infradead.org, chao.gao@intel.com,
rick.p.edgecombe@intel.com, mlevitsk@redhat.com,
john.allen@amd.com, weijiang.yang@intel.com
Subject: [PATCH v9 08/27] KVM: x86: Rework cpuid_get_supported_xcr0() to operate on vCPU data
Date: Tue, 23 Jan 2024 18:41:41 -0800 [thread overview]
Message-ID: <20240124024200.102792-9-weijiang.yang@intel.com> (raw)
In-Reply-To: <20240124024200.102792-1-weijiang.yang@intel.com>
From: Sean Christopherson <seanjc@google.com>
Rework and rename cpuid_get_supported_xcr0() to explicitly operate on
vCPU state, i.e. on a vCPU's CPUID state, now that the only usage of
the helper is to retrieve a vCPU's already-set CPUID.
Prior to commit 275a87244ec8 ("KVM: x86: Don't adjust guest's CPUID.0x12.1
(allowed SGX enclave XFRM)"), KVM incorrectly fudged guest CPUID at runtime,
which in turn necessitated massaging the incoming CPUID state for
KVM_SET_CPUID{2} so as not to run afoul of kvm_cpuid_check_equal().
I.e. KVM also invoked cpuid_get_supported_xcr0() with the incoming CPUID
state, and thus without an explicit vCPU object.
Opportunistically move the helper below kvm_update_cpuid_runtime() to make
it harder to repeat the mistake of querying supported XCR0 for runtime
updates.
No functional change intended.
Signed-off-by: Sean Christopherson <seanjc@google.com>
Signed-off-by: Yang Weijiang <weijiang.yang@intel.com>
Reviewed-by: Maxim Levitsky <mlevitsk@redhat.com>
---
arch/x86/kvm/cpuid.c | 33 ++++++++++++++++-----------------
1 file changed, 16 insertions(+), 17 deletions(-)
diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c
index 294e5bd5f8a0..624954203b40 100644
--- a/arch/x86/kvm/cpuid.c
+++ b/arch/x86/kvm/cpuid.c
@@ -247,21 +247,6 @@ void kvm_update_pv_runtime(struct kvm_vcpu *vcpu)
vcpu->arch.pv_cpuid.features = best->eax;
}
-/*
- * Calculate guest's supported XCR0 taking into account guest CPUID data and
- * KVM's supported XCR0 (comprised of host's XCR0 and KVM_SUPPORTED_XCR0).
- */
-static u64 cpuid_get_supported_xcr0(struct kvm_cpuid_entry2 *entries, int nent)
-{
- struct kvm_cpuid_entry2 *best;
-
- best = cpuid_entry2_find(entries, nent, 0xd, 0);
- if (!best)
- return 0;
-
- return (best->eax | ((u64)best->edx << 32)) & kvm_caps.supported_xcr0;
-}
-
static void __kvm_update_cpuid_runtime(struct kvm_vcpu *vcpu, struct kvm_cpuid_entry2 *entries,
int nent)
{
@@ -312,6 +297,21 @@ void kvm_update_cpuid_runtime(struct kvm_vcpu *vcpu)
}
EXPORT_SYMBOL_GPL(kvm_update_cpuid_runtime);
+/*
+ * Calculate guest's supported XCR0 taking into account guest CPUID data and
+ * KVM's supported XCR0 (comprised of host's XCR0 and KVM_SUPPORTED_XCR0).
+ */
+static u64 vcpu_get_supported_xcr0(struct kvm_vcpu *vcpu)
+{
+ struct kvm_cpuid_entry2 *best;
+
+ best = kvm_find_cpuid_entry_index(vcpu, 0xd, 0);
+ if (!best)
+ return 0;
+
+ return (best->eax | ((u64)best->edx << 32)) & kvm_caps.supported_xcr0;
+}
+
static bool kvm_cpuid_has_hyperv(struct kvm_cpuid_entry2 *entries, int nent)
{
#ifdef CONFIG_KVM_HYPERV
@@ -361,8 +361,7 @@ static void kvm_vcpu_after_set_cpuid(struct kvm_vcpu *vcpu)
kvm_apic_set_version(vcpu);
}
- vcpu->arch.guest_supported_xcr0 =
- cpuid_get_supported_xcr0(vcpu->arch.cpuid_entries, vcpu->arch.cpuid_nent);
+ vcpu->arch.guest_supported_xcr0 = vcpu_get_supported_xcr0(vcpu);
kvm_update_pv_runtime(vcpu);
--
2.39.3
next prev parent reply other threads:[~2024-01-24 2:42 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-24 2:41 [PATCH v9 00/27] Enable CET Virtualization Yang Weijiang
2024-01-24 2:41 ` [PATCH v9 01/27] x86/fpu/xstate: Always preserve non-user xfeatures/flags in __state_perm Yang Weijiang
2024-01-30 1:29 ` Edgecombe, Rick P
2024-01-24 2:41 ` [PATCH v9 02/27] x86/fpu/xstate: Refine CET user xstate bit enabling Yang Weijiang
2024-01-24 2:41 ` [PATCH v9 03/27] x86/fpu/xstate: Add CET supervisor mode state support Yang Weijiang
2024-01-24 2:41 ` [PATCH v9 04/27] x86/fpu/xstate: Introduce XFEATURE_MASK_KERNEL_DYNAMIC xfeature set Yang Weijiang
2024-01-24 2:41 ` [PATCH v9 05/27] x86/fpu/xstate: Introduce fpu_guest_cfg for guest FPU configuration Yang Weijiang
2024-01-30 1:29 ` Edgecombe, Rick P
2024-01-30 15:00 ` Yang, Weijiang
2024-01-24 2:41 ` [PATCH v9 06/27] x86/fpu/xstate: Create guest fpstate with guest specific config Yang Weijiang
2024-01-30 1:38 ` Edgecombe, Rick P
2024-01-30 14:54 ` Yang, Weijiang
2024-01-24 2:41 ` [PATCH v9 07/27] x86/fpu/xstate: Warn if kernel dynamic xfeatures detected in normal fpstate Yang Weijiang
2024-01-24 2:41 ` Yang Weijiang [this message]
2024-01-24 2:41 ` [PATCH v9 09/27] KVM: x86: Rename kvm_{g,s}et_msr() to menifest emulation operations Yang Weijiang
2024-01-25 3:43 ` Chao Gao
2024-01-24 2:41 ` [PATCH v9 10/27] KVM: x86: Refine xsave-managed guest register/MSR reset handling Yang Weijiang
2024-01-25 10:17 ` Chao Gao
2024-01-26 9:13 ` Yang, Weijiang
2024-01-24 2:41 ` [PATCH v9 11/27] KVM: x86: Add kvm_msr_{read,write}() helpers Yang Weijiang
2024-01-24 2:41 ` [PATCH v9 12/27] KVM: x86: Report XSS as to-be-saved if there are supported features Yang Weijiang
2024-01-25 10:37 ` Chao Gao
2024-01-24 2:41 ` [PATCH v9 13/27] KVM: x86: Refresh CPUID on write to guest MSR_IA32_XSS Yang Weijiang
2024-01-25 10:57 ` Chao Gao
2024-01-26 9:30 ` Yang, Weijiang
2024-01-24 2:41 ` [PATCH v9 14/27] KVM: x86: Initialize kvm_caps.supported_xss Yang Weijiang
2024-01-26 1:35 ` Chao Gao
2024-01-24 2:41 ` [PATCH v9 15/27] KVM: x86: Load guest FPU state when access XSAVE-managed MSRs Yang Weijiang
2024-01-24 2:41 ` [PATCH v9 16/27] KVM: x86: Add fault checks for guest CR4.CET setting Yang Weijiang
2024-01-24 2:41 ` [PATCH v9 17/27] KVM: x86: Report KVM supported CET MSRs as to-be-saved Yang Weijiang
2024-01-24 2:41 ` [PATCH v9 18/27] KVM: VMX: Introduce CET VMCS fields and control bits Yang Weijiang
2024-01-24 2:41 ` [PATCH v9 19/27] KVM: x86: Use KVM-governed feature framework to track "SHSTK/IBT enabled" Yang Weijiang
2024-01-24 2:41 ` [PATCH v9 20/27] KVM: VMX: Emulate read and write to CET MSRs Yang Weijiang
2024-01-24 2:41 ` [PATCH v9 21/27] KVM: x86: Save and reload SSP to/from SMRAM Yang Weijiang
2024-01-26 3:17 ` Chao Gao
2024-01-26 6:51 ` Chao Gao
2024-01-24 2:41 ` [PATCH v9 22/27] KVM: VMX: Set up interception for CET MSRs Yang Weijiang
2024-01-26 3:54 ` Chao Gao
2024-01-26 9:36 ` Yang, Weijiang
2024-01-24 2:41 ` [PATCH v9 23/27] KVM: VMX: Set host constant supervisor states to VMCS fields Yang Weijiang
2024-01-26 6:31 ` Chao Gao
2024-01-26 9:37 ` Yang, Weijiang
2024-01-24 2:41 ` [PATCH v9 24/27] KVM: x86: Enable CET virtualization for VMX and advertise to userspace Yang Weijiang
2024-01-26 7:50 ` Chao Gao
2024-01-26 12:54 ` Yang, Weijiang
2024-01-24 2:41 ` [PATCH v9 25/27] KVM: nVMX: Introduce new VMX_BASIC bit for event error_code delivery to L1 Yang Weijiang
2024-01-26 7:54 ` Chao Gao
2024-01-24 2:41 ` [PATCH v9 26/27] KVM: nVMX: Enable CET support for nested guest Yang Weijiang
2024-01-29 7:04 ` Chao Gao
2024-01-30 7:38 ` Yang, Weijiang
2024-01-24 2:42 ` [PATCH v9 27/27] KVM: x86: Stop emulating for CET protected branch instructions Yang Weijiang
2024-01-26 8:53 ` Chao Gao
2024-01-26 12:56 ` Yang, Weijiang
2024-01-30 1:40 ` [PATCH v9 00/27] Enable CET Virtualization Edgecombe, Rick P
2024-01-30 15:05 ` Yang, Weijiang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240124024200.102792-9-weijiang.yang@intel.com \
--to=weijiang.yang@intel.com \
--cc=chao.gao@intel.com \
--cc=dave.hansen@intel.com \
--cc=john.allen@amd.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mlevitsk@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peterz@infradead.org \
--cc=rick.p.edgecombe@intel.com \
--cc=seanjc@google.com \
--cc=x86@kernel.org \
--cc=yuan.yao@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox