diff options
author | Xiao Guangrong <xiaoguangrong@linux.vnet.ibm.com> | 2013-01-13 10:44:12 -0500 |
---|---|---|
committer | Marcelo Tosatti <mtosatti@redhat.com> | 2013-01-21 19:58:31 -0500 |
commit | 22368028febf81f5c6d1e9fdd737d50543219b00 (patch) | |
tree | 0fd7a71978315be229f75226230b5b8e3fc519a5 /arch/x86/kvm/x86.c | |
parent | a843fac2536d6d81335d7011dd7ec4e438161dd7 (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.c | 13 |
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 | } |