KVM: VMX: Do not fully reset PI descriptor on vCPU reset
[sfrench/cifs-2.6.git] / arch / x86 / kvm / vmx.c
index a2b804e10c95d71ac19aebc83c6f89316cea658d..e0b4b64f211adbcb587f61248cdca010373acc59 100644 (file)
@@ -5619,8 +5619,10 @@ static void vmx_vcpu_reset(struct kvm_vcpu *vcpu, bool init_event)
 
        kvm_make_request(KVM_REQ_APIC_PAGE_RELOAD, vcpu);
 
-       if (kvm_vcpu_apicv_active(vcpu))
-               memset(&vmx->pi_desc, 0, sizeof(struct pi_desc));
+       if (kvm_vcpu_apicv_active(vcpu)) {
+               pi_clear_on(&vmx->pi_desc);
+               memset(vmx->pi_desc.pir, 0, sizeof(vmx->pi_desc.pir));
+       }
 
        if (vmx->vpid != 0)
                vmcs_write16(VIRTUAL_PROCESSOR_ID, vmx->vpid);
@@ -11297,7 +11299,7 @@ static void load_vmcs12_host_state(struct kvm_vcpu *vcpu,
 
        /* Same as above - no reason to call set_cr4_guest_host_mask().  */
        vcpu->arch.cr4_guest_owned_bits = ~vmcs_readl(CR4_GUEST_HOST_MASK);
-       kvm_set_cr4(vcpu, vmcs12->host_cr4);
+       vmx_set_cr4(vcpu, vmcs12->host_cr4);
 
        nested_ept_uninit_mmu_context(vcpu);