linux/arch/x86/kvm/mmu
Sean Christopherson 8df9f1af2e KVM: x86/mmu: Skip !MMU-present SPTEs when removing SP in exclusive mode
If mmu_lock is held for write, don't bother setting !PRESENT SPTEs to
REMOVED_SPTE when recursively zapping SPTEs as part of shadow page
removal.  The concurrent write protections provided by REMOVED_SPTE are
not needed, there are no backing page side effects to record, and MMIO
SPTEs can be left as is since they are protected by the memslot
generation, not by ensuring that the MMIO SPTE is unreachable (which
is racy with respect to lockless walks regardless of zapping behavior).

Skipping !PRESENT drastically reduces the number of updates needed to
tear down sparsely populated MMUs, e.g. when tearing down a 6gb VM that
didn't touch much memory, 6929/7168 (~96.6%) of SPTEs were '0' and could
be skipped.

Avoiding the write itself is likely close to a wash, but avoiding
__handle_changed_spte() is a clear-cut win as that involves saving and
restoring all non-volatile GPRs (it's a subtly big function), as well as
several conditional branches before bailing out.

Cc: Ben Gardon <bgardon@google.com>
Signed-off-by: Sean Christopherson <seanjc@google.com>
Message-Id: <20210310003029.1250571-1-seanjc@google.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2021-03-12 13:18:52 -05:00
..
mmu_audit.c KVM: Stop using deprecated jump label APIs 2021-02-04 05:27:29 -05:00
mmu_internal.h KVM: x86/mmu: Set SPTE_AD_WRPROT_ONLY_MASK if and only if PML is enabled 2021-02-26 04:43:29 -05:00
mmu.c KVM: x86/mmu: Consider the hva in mmu_notifier retry 2021-02-22 13:16:53 -05:00
mmutrace.h kvm: x86/mmu: Add TDP MMU SPTE changed trace point 2020-11-19 10:57:16 -05:00
page_track.c KVM: x86/mmu: Use an rwlock for the x86 MMU 2021-02-04 05:27:43 -05:00
paging_tmpl.h KVM: x86/mmu: Consider the hva in mmu_notifier retry 2021-02-22 13:16:53 -05:00
spte.c KVM: x86: use static calls to reduce kvm_x86_ops overhead 2021-02-04 05:27:30 -05:00
spte.h KVM: x86/mmu: Flush TLBs after zap in TDP MMU PF handler 2021-02-04 05:27:44 -05:00
tdp_iter.c KVM: x86/mmu: Protect TDP MMU page table memory with RCU 2021-02-04 05:27:42 -05:00
tdp_iter.h KVM: x86/mmu: Protect TDP MMU page table memory with RCU 2021-02-04 05:27:42 -05:00
tdp_mmu.c KVM: x86/mmu: Skip !MMU-present SPTEs when removing SP in exclusive mode 2021-03-12 13:18:52 -05:00
tdp_mmu.h KVM: x86/mmu: Don't set dirty bits when disabling dirty logging w/ PML 2021-02-19 03:08:35 -05:00