mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-07 13:57:54 -04:00
KVM: x86/mmu: Detect if unprotect will do anything based on invalid_list
Explicitly query the list of to-be-zapped shadow pages when checking to see if unprotecting a gfn for retry has succeeded, i.e. if KVM should retry the faulting instruction. Add a comment to explain why the list needs to be checked before zapping, which is the primary motivation for this change. No functional change intended. Reviewed-by: Yuan Yao <yuan.yao@intel.com> Link: https://lore.kernel.org/r/20240831001538.336683-22-seanjc@google.com Signed-off-by: Sean Christopherson <seanjc@google.com>
This commit is contained in:
@@ -2721,12 +2721,15 @@ bool __kvm_mmu_unprotect_gfn_and_retry(struct kvm_vcpu *vcpu, gpa_t cr2_or_gpa,
|
||||
goto out;
|
||||
}
|
||||
|
||||
r = false;
|
||||
write_lock(&kvm->mmu_lock);
|
||||
for_each_gfn_valid_sp_with_gptes(kvm, sp, gpa_to_gfn(gpa)) {
|
||||
r = true;
|
||||
for_each_gfn_valid_sp_with_gptes(kvm, sp, gpa_to_gfn(gpa))
|
||||
kvm_mmu_prepare_zap_page(kvm, sp, &invalid_list);
|
||||
}
|
||||
|
||||
/*
|
||||
* Snapshot the result before zapping, as zapping will remove all list
|
||||
* entries, i.e. checking the list later would yield a false negative.
|
||||
*/
|
||||
r = !list_empty(&invalid_list);
|
||||
kvm_mmu_commit_zap_page(kvm, &invalid_list);
|
||||
write_unlock(&kvm->mmu_lock);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user