diff options
author | 2024-01-10 18:00:42 -0800 | |
---|---|---|
committer | 2024-02-22 16:28:45 -0800 | |
commit | fcdffe97f80e6fb488f6b5c6bd38f6cd899944ab (patch) | |
tree | e790176af39ebabe2cb443f1992d26643bc74ef8 | |
parent | KVM: x86/mmu: Zap invalidated TDP MMU roots at 4KiB granularity (diff) | |
download | linux-rng-fcdffe97f80e6fb488f6b5c6bd38f6cd899944ab.tar.xz linux-rng-fcdffe97f80e6fb488f6b5c6bd38f6cd899944ab.zip |
KVM: x86/mmu: Don't do TLB flush when zappings SPTEs in invalid roots
Don't force a TLB flush when zapping SPTEs in invalid roots as vCPUs
can't be actively using invalid roots (zapping SPTEs in invalid roots is
necessary only to ensure KVM doesn't mark a page accessed/dirty after it
is freed by the primary MMU).
Link: https://lore.kernel.org/r/20240111020048.844847-3-seanjc@google.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
-rw-r--r-- | arch/x86/kvm/mmu/tdp_mmu.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/arch/x86/kvm/mmu/tdp_mmu.c b/arch/x86/kvm/mmu/tdp_mmu.c index 372da098d3ce..68920877370b 100644 --- a/arch/x86/kvm/mmu/tdp_mmu.c +++ b/arch/x86/kvm/mmu/tdp_mmu.c @@ -811,7 +811,13 @@ static bool tdp_mmu_zap_leafs(struct kvm *kvm, struct kvm_mmu_page *root, continue; tdp_mmu_iter_set_spte(kvm, &iter, 0); - flush = true; + + /* + * Zappings SPTEs in invalid roots doesn't require a TLB flush, + * see kvm_tdp_mmu_zap_invalidated_roots() for details. + */ + if (!root->role.invalid) + flush = true; } rcu_read_unlock(); |