aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kvm/x86.c
diff options
context:
space:
mode:
authorXiao Guangrong <xiaoguangrong@linux.vnet.ibm.com>2013-01-13 10:44:12 -0500
committerMarcelo Tosatti <mtosatti@redhat.com>2013-01-21 19:58:31 -0500
commit22368028febf81f5c6d1e9fdd737d50543219b00 (patch)
tree0fd7a71978315be229f75226230b5b8e3fc519a5 /arch/x86/kvm/x86.c
parenta843fac2536d6d81335d7011dd7ec4e438161dd7 (diff)
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>
Diffstat (limited to 'arch/x86/kvm/x86.c')
-rw-r--r--arch/x86/kvm/x86.c13
1 files changed, 6 insertions, 7 deletions
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index 54832280cdef..f0288c52d5e4 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -4759,19 +4759,18 @@ static bool reexecute_instruction(struct kvm_vcpu *vcpu, gva_t gva)
4759 if (tdp_enabled) 4759 if (tdp_enabled)
4760 return false; 4760 return false;
4761 4761
4762 gpa = kvm_mmu_gva_to_gpa_system(vcpu, gva, NULL);
4763 if (gpa == UNMAPPED_GVA)
4764 return true; /* let cpu generate fault */
4765
4762 /* 4766 /*
4763 * if emulation was due to access to shadowed page table 4767 * if emulation was due to access to shadowed page table
4764 * and it failed try to unshadow page and re-enter the 4768 * and it failed try to unshadow page and re-enter the
4765 * guest to let CPU execute the instruction. 4769 * guest to let CPU execute the instruction.
4766 */ 4770 */
4767 if (kvm_mmu_unprotect_page_virt(vcpu, gva)) 4771 if (kvm_mmu_unprotect_page(vcpu->kvm, gpa_to_gfn(gpa)))
4768 return true; 4772 return true;
4769 4773
4770 gpa = kvm_mmu_gva_to_gpa_system(vcpu, gva, NULL);
4771
4772 if (gpa == UNMAPPED_GVA)
4773 return true; /* let cpu generate fault */
4774
4775 /* 4774 /*
4776 * Do not retry the unhandleable instruction if it faults on the 4775 * Do not retry the unhandleable instruction if it faults on the
4777 * readonly host memory, otherwise it will goto a infinite loop: 4776 * readonly host memory, otherwise it will goto a infinite loop:
@@ -4826,7 +4825,7 @@ static bool retry_instruction(struct x86_emulate_ctxt *ctxt,
4826 if (!vcpu->arch.mmu.direct_map) 4825 if (!vcpu->arch.mmu.direct_map)
4827 gpa = kvm_mmu_gva_to_gpa_write(vcpu, cr2, NULL); 4826 gpa = kvm_mmu_gva_to_gpa_write(vcpu, cr2, NULL);
4828 4827
4829 kvm_mmu_unprotect_page(vcpu->kvm, gpa >> PAGE_SHIFT); 4828 kvm_mmu_unprotect_page(vcpu->kvm, gpa_to_gfn(gpa));
4830 4829
4831 return true; 4830 return true;
4832} 4831}