KVM: x86: clean up reexecute_instruction
Little cleanup for reexecute_instruction, also use gpa_to_gfn in retry_instruction Reviewed-by: Gleb Natapov <gleb@redhat.com> Signed-off-by: Xiao Guangrong <xiaoguangrong@linux.vnet.ibm.com> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
This commit is contained in:
Родитель
a843fac253
Коммит
22368028fe
|
@ -4759,19 +4759,18 @@ static bool reexecute_instruction(struct kvm_vcpu *vcpu, gva_t gva)
|
|||
if (tdp_enabled)
|
||||
return false;
|
||||
|
||||
gpa = kvm_mmu_gva_to_gpa_system(vcpu, gva, NULL);
|
||||
if (gpa == UNMAPPED_GVA)
|
||||
return true; /* let cpu generate fault */
|
||||
|
||||
/*
|
||||
* if emulation was due to access to shadowed page table
|
||||
* and it failed try to unshadow page and re-enter the
|
||||
* guest to let CPU execute the instruction.
|
||||
*/
|
||||
if (kvm_mmu_unprotect_page_virt(vcpu, gva))
|
||||
if (kvm_mmu_unprotect_page(vcpu->kvm, gpa_to_gfn(gpa)))
|
||||
return true;
|
||||
|
||||
gpa = kvm_mmu_gva_to_gpa_system(vcpu, gva, NULL);
|
||||
|
||||
if (gpa == UNMAPPED_GVA)
|
||||
return true; /* let cpu generate fault */
|
||||
|
||||
/*
|
||||
* Do not retry the unhandleable instruction if it faults on the
|
||||
* readonly host memory, otherwise it will goto a infinite loop:
|
||||
|
@ -4826,7 +4825,7 @@ static bool retry_instruction(struct x86_emulate_ctxt *ctxt,
|
|||
if (!vcpu->arch.mmu.direct_map)
|
||||
gpa = kvm_mmu_gva_to_gpa_write(vcpu, cr2, NULL);
|
||||
|
||||
kvm_mmu_unprotect_page(vcpu->kvm, gpa >> PAGE_SHIFT);
|
||||
kvm_mmu_unprotect_page(vcpu->kvm, gpa_to_gfn(gpa));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче