Revert "KVM: X86: Update mmu->pdptrs only when it is changed"
authorPaolo Bonzini <pbonzini@redhat.com>
Fri, 10 Dec 2021 23:13:37 +0000 (18:13 -0500)
committerPaolo Bonzini <pbonzini@redhat.com>
Fri, 7 Jan 2022 15:44:39 +0000 (10:44 -0500)
This reverts commit 24cd19a28cb7174df502162641d6e1e12e7ffbd9.
Sean Christopherson reports:

"Commit 24cd19a28cb7 ('KVM: X86: Update mmu->pdptrs only when it is
changed') breaks nested VMs with EPT in L0 and PAE shadow paging in L2.
Reproducing is trivial, just disable EPT in L1 and run a VM.  I haven't
investigating how it breaks things."

Reviewed-by: Sean Christopherson <seanjc@google.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kvm/x86.c

index 8912f44c640d8ee40330ea8ddfefcb29808b53ec..074a0578979f17a9eec7f651ea389a6143a39f0c 100644 (file)
@@ -841,12 +841,9 @@ int load_pdptrs(struct kvm_vcpu *vcpu, unsigned long cr3)
                }
        }
 
-       kvm_register_mark_available(vcpu, VCPU_EXREG_PDPTR);
-       if (memcmp(mmu->pdptrs, pdpte, sizeof(mmu->pdptrs))) {
-               memcpy(mmu->pdptrs, pdpte, sizeof(mmu->pdptrs));
-               kvm_register_mark_dirty(vcpu, VCPU_EXREG_PDPTR);
-               kvm_make_request(KVM_REQ_LOAD_MMU_PGD, vcpu);
-       }
+       memcpy(mmu->pdptrs, pdpte, sizeof(mmu->pdptrs));
+       kvm_register_mark_dirty(vcpu, VCPU_EXREG_PDPTR);
+       kvm_make_request(KVM_REQ_LOAD_MMU_PGD, vcpu);
        vcpu->arch.pdptrs_from_userspace = false;
 
        return 1;