Re: [PATCH 0/2] KVM: x86: Fix and cleanup for recent AVIC changes

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 15/10/21 18:15, Sean Christopherson wrote:

                                         - now vCPU1 finally starts running the page fault code.

                                         - vCPU1 AVIC is still enabled
                                           (because vCPU1 never handled KVM_REQ_APICV_UPDATE),
                                           so the page fault code will populate the SPTE.
But vCPU1 won't install the SPTE if it loses the race to acquire mmu_lock, because
kvm_zap_gfn_range() bumps the notifier sequence and so vCPU1 will retry the fault.
If vCPU1 wins the race, i.e. sees the same sequence number, then the zap is
guaranteed to find the newly-installed SPTE.

And IMO, retrying is the desired behavior.  Installing a SPTE based on the global
state works, but it's all kinds of weird to knowingly take an action the directly
contradicts the current vCPU state.

I think both of you are correct. :)

Installing a SPTE based on global state is weird because this is a vCPU action; installing it based on vCPU state is weird because it is knowingly out of date. I tend to be more on Maxim's side, but that may be simply because I have reviewed the code earlier and the various interleavings are still somewhere in my brain.

It certainly deserves a comment though. The behavior wrt the sequence number is particularly important if you use the vCPU state, but it's worth pointing out even with the current code; this exchange shows that it can be confusing.

Paolo




[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux