Re: [PATCH 16/15] KVM: X86: Update mmu->pdptrs only when it is changed

From: Lai Jiangshan
Date: Wed Dec 08 2021 - 04:34:18 EST




On 2021/12/8 17:09, Paolo Bonzini wrote:
On 12/8/21 00:43, Sean Christopherson wrote:
what guarantees the that PDPTRs in the VMCS are sync'd with
mmu->pdptrs?  I'm not saying they aren't, I just want the changelog
to prove that they are.

If they aren't synced you should *already* have dirty VCPU_EXREG_PDPTR and pending KVM_REQ_LOAD_MMU_PGD, shouldn't you? As long as the caching invariants are respected, this patch is fairly safe, and if they aren't there are plenty of preexisting bugs anyway.



They can be not synced in other side: not available.

If (!kvm_register_is_available(vcpu, VCPU_EXREG_PDPTR))
it will make no sense to compare mmu->pdptrs when EPT is enabled.

Because vmcs might have different copy, it is better to just mark it
dirty in load_pdptrs().

(SVM is OK even with NPT enabled, since vmcb doesn't have a copy)

I haven't investigated enough then and today. It is quit complicated.

Thanks
Lai


The next patch does add a fairly heavy unload of the current root for
!TDP, but that's a bug fix and should be ordered before any
optimizations anyways.