[PATCH 45/60] kvm: x86: Update state for all plane VCPUs after CPUID update

From: Jörg Rödel

Date: Mon Jun 08 2026 - 11:24:25 EST


From: Joerg Roedel <joerg.roedel@xxxxxxx>

Make sure to update CPUID dependent state for all VCPUs of a given
plane when CPUID state is updated.

Signed-off-by: Joerg Roedel <joerg.roedel@xxxxxxx>
---
arch/x86/kvm/cpuid.c | 16 +++++++++++-----
1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c
index 27e2f7e25038..fab075bb6fdc 100644
--- a/arch/x86/kvm/cpuid.c
+++ b/arch/x86/kvm/cpuid.c
@@ -513,6 +513,8 @@ static int kvm_set_cpuid(struct kvm_vcpu *vcpu, struct kvm_cpuid_entry2 *e2,
{
struct kvm_vcpu_common *common = vcpu->common;
u32 vcpu_caps[NR_KVM_CPU_CAPS];
+ struct kvm_vcpu *v;
+ unsigned i;
int r;

/*
@@ -562,9 +564,11 @@ static int kvm_set_cpuid(struct kvm_vcpu *vcpu, struct kvm_cpuid_entry2 *e2,

#ifdef CONFIG_KVM_HYPERV
if (kvm_cpuid_has_hyperv(vcpu)) {
- r = kvm_hv_vcpu_init(vcpu);
- if (r)
- goto err;
+ vcpu_for_each_plane(common, i, v) {
+ r = kvm_hv_vcpu_init(vcpu);
+ if (r)
+ goto err;
+ }
}
#endif

@@ -572,10 +576,12 @@ static int kvm_set_cpuid(struct kvm_vcpu *vcpu, struct kvm_cpuid_entry2 *e2,
if (r)
goto err;

+ vcpu_for_each_plane(vcpu->common, i, v) {
#ifdef CONFIG_KVM_XEN
- vcpu->arch.xen.cpuid = kvm_get_hypervisor_cpuid(vcpu, XEN_SIGNATURE);
+ v->arch.xen.cpuid = kvm_get_hypervisor_cpuid(vcpu, XEN_SIGNATURE);
#endif
- kvm_vcpu_after_set_cpuid(vcpu);
+ kvm_vcpu_after_set_cpuid(v);
+ }

success:
kvfree(e2);
--
2.53.0