[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] vmx: Better tracing in vmcs_dump_vcpu() -- grab RIP/RSP/RFLAGS from
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1196289393 0 # Node ID e10eacec8b919b4fea0d16b6dadb61bde1e9734a # Parent 0b9048f7f257c95e7df9b84ffda2f9ec1dd83185 vmx: Better tracing in vmcs_dump_vcpu() -- grab RIP/RSP/RFLAGS from cpu_user_regs structure as well as VMCS. Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx> --- xen/arch/x86/hvm/vmx/vmcs.c | 25 +++++++++++++++++-------- xen/arch/x86/hvm/vmx/vmx.c | 7 ++++--- xen/include/asm-x86/hvm/vmx/vmcs.h | 2 +- 3 files changed, 22 insertions(+), 12 deletions(-) diff -r 0b9048f7f257 -r e10eacec8b91 xen/arch/x86/hvm/vmx/vmcs.c --- a/xen/arch/x86/hvm/vmx/vmcs.c Wed Nov 28 22:09:19 2007 +0000 +++ b/xen/arch/x86/hvm/vmx/vmcs.c Wed Nov 28 22:36:33 2007 +0000 @@ -819,9 +819,15 @@ static unsigned long vmr(unsigned long f return rc ? 0 : val; } -void vmcs_dump_vcpu(void) -{ +void vmcs_dump_vcpu(struct vcpu *v) +{ + struct cpu_user_regs *regs = &v->arch.guest_context.user_regs; unsigned long long x; + + if ( v == current ) + regs = guest_cpu_user_regs(); + + vmx_vmcs_enter(v); printk("*** Guest State ***\n"); printk("CR0: actual=0x%016llx, shadow=0x%016llx, gh_mask=%016llx\n", @@ -841,11 +847,14 @@ void vmcs_dump_vcpu(void) printk(" target2=%016llx, target3=%016llx\n", (unsigned long long)vmr(CR3_TARGET_VALUE2), (unsigned long long)vmr(CR3_TARGET_VALUE3)); - printk("RSP = 0x%016llx RIP = 0x%016llx\n", + printk("RSP = 0x%016llx (0x%016llx) RIP = 0x%016llx (0x%016llx)\n", (unsigned long long)vmr(GUEST_RSP), - (unsigned long long)vmr(GUEST_RIP)); - printk("RFLAGS=0x%016llx DR7 = 0x%016llx\n", + (unsigned long long)regs->esp, + (unsigned long long)vmr(GUEST_RIP), + (unsigned long long)regs->eip); + printk("RFLAGS=0x%016llx (0x%016llx) DR7 = 0x%016llx\n", (unsigned long long)vmr(GUEST_RFLAGS), + (unsigned long long)regs->eflags, (unsigned long long)vmr(GUEST_DR7)); printk("Sysenter RSP=%016llx CS:RIP=%04x:%016llx\n", (unsigned long long)vmr(GUEST_SYSENTER_ESP), @@ -926,6 +935,8 @@ void vmcs_dump_vcpu(void) (uint32_t)vmr(IDT_VECTORING_ERROR_CODE)); printk("TPR Threshold = 0x%02x\n", (uint32_t)vmr(TPR_THRESHOLD)); + + vmx_vmcs_exit(v); } static void vmcs_dump(unsigned char ch) @@ -945,9 +956,7 @@ static void vmcs_dump(unsigned char ch) for_each_vcpu ( d, v ) { printk("\tVCPU %d\n", v->vcpu_id); - vmx_vmcs_enter(v); - vmcs_dump_vcpu(); - vmx_vmcs_exit(v); + vmcs_dump_vcpu(v); } } diff -r 0b9048f7f257 -r e10eacec8b91 xen/arch/x86/hvm/vmx/vmx.c --- a/xen/arch/x86/hvm/vmx/vmx.c Wed Nov 28 22:09:19 2007 +0000 +++ b/xen/arch/x86/hvm/vmx/vmx.c Wed Nov 28 22:36:33 2007 +0000 @@ -2722,6 +2722,7 @@ static void vmx_failed_vmentry(unsigned { unsigned int failed_vmentry_reason = (uint16_t)exit_reason; unsigned long exit_qualification = __vmread(EXIT_QUALIFICATION); + struct vcpu *curr = current; printk("Failed vm entry (exit reason 0x%x) ", exit_reason); switch ( failed_vmentry_reason ) @@ -2734,7 +2735,7 @@ static void vmx_failed_vmentry(unsigned break; case EXIT_REASON_MACHINE_CHECK: printk("caused by machine check.\n"); - HVMTRACE_0D(MCE, current); + HVMTRACE_0D(MCE, curr); do_machine_check(regs); break; default: @@ -2743,10 +2744,10 @@ static void vmx_failed_vmentry(unsigned } printk("************* VMCS Area **************\n"); - vmcs_dump_vcpu(); + vmcs_dump_vcpu(curr); printk("**************************************\n"); - domain_crash(current->domain); + domain_crash(curr->domain); } asmlinkage void vmx_vmexit_handler(struct cpu_user_regs *regs) diff -r 0b9048f7f257 -r e10eacec8b91 xen/include/asm-x86/hvm/vmx/vmcs.h --- a/xen/include/asm-x86/hvm/vmx/vmcs.h Wed Nov 28 22:09:19 2007 +0000 +++ b/xen/include/asm-x86/hvm/vmx/vmcs.h Wed Nov 28 22:36:33 2007 +0000 @@ -28,7 +28,7 @@ #endif extern void start_vmx(void); -extern void vmcs_dump_vcpu(void); +extern void vmcs_dump_vcpu(struct vcpu *v); extern void setup_vmcs_dump(void); extern int vmx_cpu_up(void); extern void vmx_cpu_down(void); _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |