[GIT PULL] KVM: x86: MMU changes for 6.4

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

 



KVM x86/mmu changes for 6.4.  The highlights are optimizations from Lai
(.invlpg(), .sync_page(), and rmaps) and Vipin (A/D harvesting).

I am also planning on sending the "persistent TDP MMU roots" patch[*] for
6.4-rc1, just waiting a few more days to give syzbot extra time to beat on
v2, and to settle on whether to guard VM desctruction with mmu_lock or RCU.

[*] https://lore.kernel.org/all/20230421214946.2571580-1-seanjc@xxxxxxxxxx


The following changes since commit d8708b80fa0e6e21bc0c9e7276ad0bccef73b6e7:

  KVM: Change return type of kvm_arch_vm_ioctl() to "int" (2023-03-16 10:18:07 -0400)

are available in the Git repository at:

  https://github.com/kvm-x86/linux.git tags/kvm-x86-mmu-6.4

for you to fetch changes up to 9ed3bf411226f446a9795f2b49a15b9df98d7cf5:

  KVM: x86/mmu: Move filling of Hyper-V's TLB range struct into Hyper-V code (2023-04-10 15:17:29 -0700)

----------------------------------------------------------------
KVM x86 MMU changes for 6.4:

 - Tweak FNAME(sync_spte) to avoid unnecessary writes+flushes when the
   guest is only adding new PTEs

 - Overhaul .sync_page() and .invlpg() to share the .sync_page()
   implementation, i.e. utilize .sync_page()'s optimizations when emulating
   invalidations

 - Clean up the range-based flushing APIs

 - Revamp the TDP MMU's reaping of Accessed/Dirty bits to clear a single
   A/D bit using a LOCK AND instead of XCHG, and skip all of the "handle
   changed SPTE" overhead associated with writing the entire entry

 - Track the number of "tail" entries in a pte_list_desc to avoid having
   to walk (potentially) all descriptors during insertion and deletion,
   which gets quite expensive if the guest is spamming fork()

 - Misc cleanups

----------------------------------------------------------------
David Matlack (3):
      KVM: x86/mmu: Collapse kvm_flush_remote_tlbs_with_{range,address}() together
      KVM: x86/mmu: Rename kvm_flush_remote_tlbs_with_address()
      KVM: x86/mmu: Use gfn_t in kvm_flush_remote_tlbs_range()

Lai Jiangshan (14):
      KVM: x86/mmu: Use 64-bit address to invalidate to fix a subtle bug
      KVM: x86/mmu: Move the check in FNAME(sync_page) as kvm_sync_page_check()
      KVM: x86/mmu: Check mmu->sync_page pointer in kvm_sync_page_check()
      KVM: x86/mmu: Set mmu->sync_page as NULL for direct paging
      KVM: x86/mmu: Move the code out of FNAME(sync_page)'s loop body into mmu.c
      KVM: x86/mmu: Reduce the update to the spte in FNAME(sync_spte)
      kvm: x86/mmu: Use KVM_MMU_ROOT_XXX for kvm_mmu_invalidate_addr()
      KVM: x86/mmu: Use kvm_mmu_invalidate_addr() in kvm_mmu_invpcid_gva()
      KVM: x86/mmu: Use kvm_mmu_invalidate_addr() in nested_ept_invalidate_addr()
      KVM: x86/mmu: Allow the roots to be invalid in FNAME(invlpg)
      KVM: x86/mmu: Remove FNAME(invlpg) and use FNAME(sync_spte) to update vTLB instead.
      kvm: x86/mmu: Remove @no_dirty_log from FNAME(prefetch_gpte)
      KVM: x86/mmu: Skip calling mmu->sync_spte() when the spte is 0
      KVM: x86/mmu: Track tail count in pte_list_desc to optimize guest fork()

Mathias Krause (1):
      KVM: x86/mmu: Fix comment typo

Paolo Bonzini (1):
      KVM: x86/mmu: Avoid indirect call for get_cr3

Sean Christopherson (6):
      KVM: x86/mmu: Sanity check input to kvm_mmu_free_roots()
      KVM: x86/mmu: Rename slot rmap walkers to add clarity and clean up code
      KVM: x86/mmu: Replace comment with an actual lockdep assertion on mmu_lock
      KVM: x86/mmu: Clean up mmu.c functions that put return type on separate line
      KVM: x86: Rename Hyper-V remote TLB hooks to match established scheme
      KVM: x86/mmu: Move filling of Hyper-V's TLB range struct into Hyper-V code

Vipin Sharma (13):
      KVM: x86/mmu: Add a helper function to check if an SPTE needs atomic write
      KVM: x86/mmu: Use kvm_ad_enabled() to determine if TDP MMU SPTEs need wrprot
      KVM: x86/mmu: Consolidate Dirty vs. Writable clearing logic in TDP MMU
      KVM: x86/mmu: Atomically clear SPTE dirty state in the clear-dirty-log flow
      KVM: x86/mmu: Drop access tracking checks when clearing TDP MMU dirty bits
      KVM: x86/mmu: Bypass __handle_changed_spte() when clearing TDP MMU dirty bits
      KVM: x86/mmu: Remove "record_dirty_log" in __tdp_mmu_set_spte()
      KVM: x86/mmu: Clear only A-bit (if enabled) when aging TDP MMU SPTEs
      KVM: x86/mmu: Drop unnecessary dirty log checks when aging TDP MMU SPTEs
      KVM: x86/mmu: Bypass __handle_changed_spte() when aging TDP MMU SPTEs
      KVM: x86/mmu: Remove "record_acc_track" in __tdp_mmu_set_spte()
      KVM: x86/mmu: Remove handle_changed_spte_dirty_log()
      KVM: x86/mmu: Merge all handle_changed_pte*() functions

 arch/x86/include/asm/kvm-x86-ops.h |   4 +-
 arch/x86/include/asm/kvm_host.h    |  32 +--
 arch/x86/kvm/kvm_onhyperv.c        |  33 ++-
 arch/x86/kvm/kvm_onhyperv.h        |   5 +-
 arch/x86/kvm/mmu/mmu.c             | 506 ++++++++++++++++++++++---------------
 arch/x86/kvm/mmu/mmu_internal.h    |   8 +-
 arch/x86/kvm/mmu/paging_tmpl.h     | 224 +++++-----------
 arch/x86/kvm/mmu/spte.c            |   2 +-
 arch/x86/kvm/mmu/tdp_iter.h        |  48 +++-
 arch/x86/kvm/mmu/tdp_mmu.c         | 215 ++++++----------
 arch/x86/kvm/svm/svm_onhyperv.h    |   5 +-
 arch/x86/kvm/vmx/nested.c          |   5 +-
 arch/x86/kvm/vmx/vmx.c             |   5 +-
 arch/x86/kvm/x86.c                 |   4 +-
 14 files changed, 522 insertions(+), 574 deletions(-)



[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