Commit ed335278 authored by Lai Jiangshan's avatar Lai Jiangshan Committed by Sean Christopherson
Browse files

KVM: x86/mmu: Allow the roots to be invalid in FNAME(invlpg)



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: default avatarLai Jiangshan <jiangshan.ljs@antgroup.com>
Link: https://lore.kernel.org/r/20230216235321.735214-2-jiangshanlai@gmail.com


Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
parent 2c86c444
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -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);
	}
}
+1 −3
Original line number Diff line number Diff line
@@ -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) {