From: Joerg Roedel <[email protected]>

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

Signed-off-by: Joerg Roedel <[email protected]>
---
 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


Reply via email to