kvm: x86/mmu: Don't clear write flooding for direct SP
authorLai Jiangshan <jiangshan.ljs@antgroup.com>
Thu, 5 Jan 2023 10:03:10 +0000 (18:03 +0800)
committerSean Christopherson <seanjc@google.com>
Tue, 24 Jan 2023 18:05:44 +0000 (10:05 -0800)
Although there is no harm, but there is no point to clear write
flooding for direct SP.

Signed-off-by: Lai Jiangshan <jiangshan.ljs@antgroup.com>
Link: https://lore.kernel.org/r/20230105100310.6700-1-jiangshanlai@gmail.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
arch/x86/kvm/mmu/paging_tmpl.h

index e5662db..0160b50 100644 (file)
@@ -642,12 +642,12 @@ static int FNAME(fetch)(struct kvm_vcpu *vcpu, struct kvm_page_fault *fault,
        if (WARN_ON(!VALID_PAGE(vcpu->arch.mmu->root.hpa)))
                goto out_gpte_changed;
 
-       for (shadow_walk_init(&it, vcpu, fault->addr);
-            shadow_walk_okay(&it) && it.level > gw->level;
-            shadow_walk_next(&it)) {
+       for_each_shadow_entry(vcpu, fault->addr, it) {
                gfn_t table_gfn;
 
                clear_sp_write_flooding_count(it.sptep);
+               if (it.level == gw->level)
+                       break;
 
                table_gfn = gw->table_gfn[it.level - 2];
                access = gw->pt_access[it.level - 2];
@@ -692,8 +692,6 @@ static int FNAME(fetch)(struct kvm_vcpu *vcpu, struct kvm_page_fault *fault,
        trace_kvm_mmu_spte_requested(fault);
 
        for (; shadow_walk_okay(&it); shadow_walk_next(&it)) {
-               clear_sp_write_flooding_count(it.sptep);
-
                /*
                 * We cannot overwrite existing page tables with an NX
                 * large page, as the leaf could be executable.