diff options
author | Lai Jiangshan <[email protected]> | 2021-11-11 22:45:26 +0800 |
---|---|---|
committer | Paolo Bonzini <[email protected]> | 2021-12-08 04:25:04 -0500 |
commit | 24cd19a28cb7174df502162641d6e1e12e7ffbd9 (patch) | |
tree | 2b4992a5199ca2e376bb5ecd800c6200be98b0f2 | |
parent | 2e9ebd55096f70b76c2a5edf93903c8c2f778a9f (diff) |
KVM: X86: Update mmu->pdptrs only when it is changed
It is unchanged in most cases.
Signed-off-by: Lai Jiangshan <[email protected]>
Message-Id: <[email protected]>
Signed-off-by: Paolo Bonzini <[email protected]>
-rw-r--r-- | arch/x86/kvm/x86.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index be3b4a073e72..d4f1dff258cc 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -828,9 +828,12 @@ int load_pdptrs(struct kvm_vcpu *vcpu, struct kvm_mmu *mmu, unsigned long cr3) } } - memcpy(mmu->pdptrs, pdpte, sizeof(mmu->pdptrs)); - kvm_register_mark_dirty(vcpu, VCPU_EXREG_PDPTR); - kvm_make_request(KVM_REQ_LOAD_MMU_PGD, vcpu); + 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); + } vcpu->arch.pdptrs_from_userspace = false; return 1; |