]> git.baikalelectronics.ru Git - kernel.git/commit
Merge branch 'kvm-tdp-mmu-atomicity-fix' into HEAD
authorPaolo Bonzini <pbonzini@redhat.com>
Tue, 3 May 2022 11:23:08 +0000 (07:23 -0400)
committerPaolo Bonzini <pbonzini@redhat.com>
Tue, 3 May 2022 11:29:30 +0000 (07:29 -0400)
commit1723be91b194ea28ce520b9b573a882714a0ad8a
tree89fc90d73501c6f829a397150654e13c07fa10df
parent3d57d0d63579e856bde1b1db94cdd3a41864b891
parent2a57483d53fc930759dfb00d6932d1433b33ae16
Merge branch 'kvm-tdp-mmu-atomicity-fix' into HEAD

We are dropping A/D bits (and W bits) in the TDP MMU.  Even if mmu_lock
is held for write, as volatile SPTEs can be written by other tasks/vCPUs
outside of mmu_lock.

Attempting to prove that bug exposed another notable goof, which has been
lurking for a decade, give or take: KVM treats _all_ MMU-writable SPTEs
as volatile, even though KVM never clears WRITABLE outside of MMU lock.
As a result, the legacy MMU (and the TDP MMU if not fixed) uses XCHG to
update writable SPTEs.

The fix does not seem to have an easily-measurable affect on performance;
page faults are so slow that wasting even a few hundred cycles is dwarfed
by the base cost.
arch/x86/kvm/mmu/mmu.c
arch/x86/kvm/mmu/spte.c
arch/x86/kvm/mmu/spte.h
arch/x86/kvm/mmu/tdp_mmu.c