KVM: x86/mmu: Allow the roots to be invalid in FNAME(invlpg)
authorLai Jiangshan <jiangshan.ljs@antgroup.com>
Thu, 16 Feb 2023 23:53:18 +0000 (07:53 +0800)
committerSean Christopherson <seanjc@google.com>
Fri, 17 Mar 2023 00:19:53 +0000 (17:19 -0700)
Don't assume the current root to be valid, just check it and remove
the WARN().

Also move the code to check if the root is valid into FNAME(invlpg)
to simplify the code.

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

index aafa431a35336bf443bdcd71f6f44d18c6a277c4..32291a84fdc63966cc897b40b60ecb83ca86e42c 100644 (file)
@@ -5787,8 +5787,7 @@ void kvm_mmu_invalidate_addr(struct kvm_vcpu *vcpu, struct kvm_mmu *mmu,
                mmu->invlpg(vcpu, addr, mmu->root.hpa);
 
        for (i = 0; i < KVM_MMU_NUM_PREV_ROOTS; i++) {
-               if ((roots & KVM_MMU_ROOT_PREVIOUS(i)) &&
-                   VALID_PAGE(mmu->prev_roots[i].hpa))
+               if (roots & KVM_MMU_ROOT_PREVIOUS(i))
                        mmu->invlpg(vcpu, addr, mmu->prev_roots[i].hpa);
        }
 }
index 4047b8ff83d6e091f2e6f42cf236ea7fda8ae876..0b4e3c9a3f05b8fb1888ca48988d4866f7372443 100644 (file)
@@ -863,10 +863,8 @@ static void FNAME(invlpg)(struct kvm_vcpu *vcpu, u64 addr, hpa_t root_hpa)
         */
        mmu_topup_memory_caches(vcpu, true);
 
-       if (!VALID_PAGE(root_hpa)) {
-               WARN_ON(1);
+       if (!VALID_PAGE(root_hpa))
                return;
-       }
 
        write_lock(&vcpu->kvm->mmu_lock);
        for_each_shadow_entry_using_root(vcpu, root_hpa, addr, iterator) {