KVM: VMX: Avoid reading %rip unnecessarily when handling exceptions
authorAvi Kivity <avi@redhat.com>
Thu, 28 Apr 2011 12:59:33 +0000 (15:59 +0300)
committerAvi Kivity <avi@redhat.com>
Sun, 22 May 2011 12:40:01 +0000 (08:40 -0400)
Avoids a VMREAD.

Signed-off-by: Avi Kivity <avi@redhat.com>
arch/x86/kvm/vmx.c

index 3f6e9bff0160f6a8ea1b3d518cdd9f6172af9292..139a5cb1f5e11f76c84534e4d43420810981c4c9 100644 (file)
@@ -3170,7 +3170,6 @@ static int handle_exception(struct kvm_vcpu *vcpu)
        }
 
        error_code = 0;
-       rip = kvm_rip_read(vcpu);
        if (intr_info & INTR_INFO_DELIVER_CODE_MASK)
                error_code = vmcs_read32(VM_EXIT_INTR_ERROR_CODE);
        if (is_page_fault(intr_info)) {
@@ -3217,6 +3216,7 @@ static int handle_exception(struct kvm_vcpu *vcpu)
                vmx->vcpu.arch.event_exit_inst_len =
                        vmcs_read32(VM_EXIT_INSTRUCTION_LEN);
                kvm_run->exit_reason = KVM_EXIT_DEBUG;
+               rip = kvm_rip_read(vcpu);
                kvm_run->debug.arch.pc = vmcs_readl(GUEST_CS_BASE) + rip;
                kvm_run->debug.arch.exception = ex_no;
                break;