mirror of
https://github.com/torvalds/linux.git
synced 2026-06-05 21:15:53 +02:00
KVM: x86: Remove manual pfn lookup when retrying #PF after failed emulation
Drop the manual pfn look when retrying an instruction that KVM failed to emulation in response to a #PF due to a write-protected gfn. Now that KVM sets EMULTYPE_ALLOW_RETRY_PF if and only if the page fault hit a write- protected gfn, i.e. if and only if there's a writable memslot, there's no need to redo the lookup to avoid retrying an instruction that failed on emulated MMIO (no slot, or a write to a read-only slot). I.e. KVM will never attempt to retry an instruction that failed on emulated MMIO, whereas that was not the case prior to the introduction of RET_PF_WRITE_PROTECTED. Reviewed-by: Yuan Yao <yuan.yao@intel.com> Link: https://lore.kernel.org/r/20240831001538.336683-16-seanjc@google.com Signed-off-by: Sean Christopherson <seanjc@google.com>
This commit is contained in:
parent
b299c273c0
commit
6205257395
|
|
@ -8865,7 +8865,6 @@ static bool reexecute_instruction(struct kvm_vcpu *vcpu, gpa_t cr2_or_gpa,
|
|||
int emulation_type)
|
||||
{
|
||||
gpa_t gpa = cr2_or_gpa;
|
||||
kvm_pfn_t pfn;
|
||||
|
||||
if (!(emulation_type & EMULTYPE_ALLOW_RETRY_PF))
|
||||
return false;
|
||||
|
|
@ -8885,23 +8884,6 @@ static bool reexecute_instruction(struct kvm_vcpu *vcpu, gpa_t cr2_or_gpa,
|
|||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
* Do not retry the unhandleable instruction if it faults on the
|
||||
* readonly host memory, otherwise it will goto a infinite loop:
|
||||
* retry instruction -> write #PF -> emulation fail -> retry
|
||||
* instruction -> ...
|
||||
*/
|
||||
pfn = gfn_to_pfn(vcpu->kvm, gpa_to_gfn(gpa));
|
||||
|
||||
/*
|
||||
* If the instruction failed on the error pfn, it can not be fixed,
|
||||
* report the error to userspace.
|
||||
*/
|
||||
if (is_error_noslot_pfn(pfn))
|
||||
return false;
|
||||
|
||||
kvm_release_pfn_clean(pfn);
|
||||
|
||||
/*
|
||||
* If emulation may have been triggered by a write to a shadowed page
|
||||
* table, unprotect the gfn (zap any relevant SPTEs) and re-enter the
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user