# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1284563150 -3600
# Node ID 8039605d898071b1c40c8f1499967bd2654a5381
# Parent cf70ef051a8216bc161f3cf5627b207f66b374c7
vmx: __update_guest_eip(__guest_instruction_length()) -> update_guest_eip()
Signed-off-by: Eddie Dong <eddie.dong@xxxxxxxxx>
---
xen/arch/x86/hvm/vmx/vmx.c | 45 +++++++++++++++++++--------------------------
1 files changed, 19 insertions(+), 26 deletions(-)
diff -r cf70ef051a82 -r 8039605d8980 xen/arch/x86/hvm/vmx/vmx.c
--- a/xen/arch/x86/hvm/vmx/vmx.c Wed Sep 15 15:45:42 2010 +0100
+++ b/xen/arch/x86/hvm/vmx/vmx.c Wed Sep 15 16:05:50 2010 +0100
@@ -1461,6 +1461,12 @@ static void __update_guest_eip(unsigned
vmx_inject_hw_exception(TRAP_debug, HVM_DELIVER_NO_ERROR_CODE);
}
+static void update_guest_eip(void)
+{
+ unsigned long inst_len = __get_instruction_length();
+ __update_guest_eip(inst_len);
+}
+
static void vmx_fpu_dirty_intercept(void)
{
struct vcpu *curr = current;
@@ -2192,8 +2198,7 @@ static int vmx_handle_eoi_write(void)
if ( (((exit_qualification >> 12) & 0xf) == 1) &&
((exit_qualification & 0xfff) == APIC_EOI) )
{
- int inst_len = __get_instruction_length(); /* Safe: APIC data write */
- __update_guest_eip(inst_len);
+ update_guest_eip();
vlapic_EOI_set(vcpu_vlapic(current));
return 1;
}
@@ -2379,8 +2384,7 @@ asmlinkage void vmx_vmexit_handler(struc
case TRAP_int3:
if ( !v->domain->debugger_attached )
goto exit_and_crash;
- inst_len = __get_instruction_length(); /* Safe: INT3 */
- __update_guest_eip(inst_len);
+ update_guest_eip();
current->arch.gdbsx_vcpu_event = TRAP_int3;
domain_pause_for_debugger();
break;
@@ -2471,18 +2475,15 @@ asmlinkage void vmx_vmexit_handler(struc
break;
}
case EXIT_REASON_CPUID:
- inst_len = __get_instruction_length(); /* Safe: CPUID */
- __update_guest_eip(inst_len);
+ update_guest_eip();
vmx_do_cpuid(regs);
break;
case EXIT_REASON_HLT:
- inst_len = __get_instruction_length(); /* Safe: HLT */
- __update_guest_eip(inst_len);
+ update_guest_eip();
hvm_hlt(regs->eflags);
break;
case EXIT_REASON_INVLPG:
- inst_len = __get_instruction_length(); /* Safe: INVLPG */
- __update_guest_eip(inst_len);
+ update_guest_eip();
exit_qualification = __vmread(EXIT_QUALIFICATION);
vmx_invlpg_intercept(exit_qualification);
break;
@@ -2490,19 +2491,17 @@ asmlinkage void vmx_vmexit_handler(struc
regs->ecx = hvm_msr_tsc_aux(v);
/* fall through */
case EXIT_REASON_RDTSC:
- inst_len = __get_instruction_length();
- __update_guest_eip(inst_len);
+ update_guest_eip();
hvm_rdtsc_intercept(regs);
break;
case EXIT_REASON_VMCALL:
{
int rc;
HVMTRACE_1D(VMMCALL, regs->eax);
- inst_len = __get_instruction_length(); /* Safe: VMCALL */
rc = hvm_do_hypercall(regs);
if ( rc != HVM_HCALL_preempted )
{
- __update_guest_eip(inst_len);
+ update_guest_eip();
if ( rc == HVM_HCALL_invalidate )
send_invalidate_req();
}
@@ -2511,9 +2510,8 @@ asmlinkage void vmx_vmexit_handler(struc
case EXIT_REASON_CR_ACCESS:
{
exit_qualification = __vmread(EXIT_QUALIFICATION);
- inst_len = __get_instruction_length(); /* Safe: MOV Cn, LMSW, CLTS */
if ( vmx_cr_access(exit_qualification, regs) )
- __update_guest_eip(inst_len);
+ update_guest_eip();
break;
}
case EXIT_REASON_DR_ACCESS:
@@ -2523,22 +2521,20 @@ asmlinkage void vmx_vmexit_handler(struc
case EXIT_REASON_MSR_READ:
{
uint64_t msr_content;
- inst_len = __get_instruction_length(); /* Safe: RDMSR */
if ( hvm_msr_read_intercept(regs->ecx, &msr_content) == X86EMUL_OKAY )
{
regs->eax = (uint32_t)msr_content;
regs->edx = (uint32_t)(msr_content >> 32);
- __update_guest_eip(inst_len);
+ update_guest_eip();
}
break;
}
case EXIT_REASON_MSR_WRITE:
{
uint64_t msr_content;
- inst_len = __get_instruction_length(); /* Safe: WRMSR */
msr_content = ((uint64_t)regs->edx << 32) | (uint32_t)regs->eax;
if ( hvm_msr_write_intercept(regs->ecx, msr_content) == X86EMUL_OKAY )
- __update_guest_eip(inst_len);
+ update_guest_eip();
break;
}
@@ -2585,17 +2581,15 @@ asmlinkage void vmx_vmexit_handler(struc
uint16_t port = (exit_qualification >> 16) & 0xFFFF;
int bytes = (exit_qualification & 0x07) + 1;
int dir = (exit_qualification & 0x08) ? IOREQ_READ : IOREQ_WRITE;
- inst_len = __get_instruction_length();
if ( handle_pio(port, bytes, dir) )
- __update_guest_eip(inst_len);
+ update_guest_eip();
}
break;
case EXIT_REASON_INVD:
case EXIT_REASON_WBINVD:
{
- inst_len = __get_instruction_length(); /* Safe: INVD, WBINVD */
- __update_guest_eip(inst_len);
+ update_guest_eip();
vmx_wbinvd_intercept();
break;
}
@@ -2628,8 +2622,7 @@ asmlinkage void vmx_vmexit_handler(struc
u64 new_bv = (((u64)regs->edx) << 32) | regs->eax;
if ( vmx_handle_xsetbv(new_bv) == 0 )
{
- inst_len = __get_instruction_length();
- __update_guest_eip(inst_len);
+ update_guest_eip();
}
break;
}
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|