aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorStefan Hajnoczi <stefanha@linux.vnet.ibm.com>2011-07-22 07:46:52 -0400
committerAvi Kivity <avi@redhat.com>2011-09-25 12:17:58 -0400
commite097e5ffd69cbd7be61466e2d54c145468d48073 (patch)
tree975497ba43f1970ca73f114248a722807a89cc95 /arch
parentd1613ad5d0018a009bd4865b0fa5930abb5ed259 (diff)
KVM: Record instruction set in all vmexit tracepoints
The kvm_exit tracepoint recently added the isa argument to aid decoding exit_reason. The semantics of exit_reason depend on the instruction set (vmx or svm) and the isa argument allows traces to be analyzed on other machines. Add the isa argument to kvm_nested_vmexit and kvm_nested_vmexit_inject so these tracepoints can also be self-describing. Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com> Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'arch')
-rw-r--r--arch/x86/kvm/svm.c6
-rw-r--r--arch/x86/kvm/trace.h12
2 files changed, 12 insertions, 6 deletions
diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
index 475d1c948501..6adb7ba13a4a 100644
--- a/arch/x86/kvm/svm.c
+++ b/arch/x86/kvm/svm.c
@@ -2182,7 +2182,8 @@ static int nested_svm_vmexit(struct vcpu_svm *svm)
2182 vmcb->control.exit_info_1, 2182 vmcb->control.exit_info_1,
2183 vmcb->control.exit_info_2, 2183 vmcb->control.exit_info_2,
2184 vmcb->control.exit_int_info, 2184 vmcb->control.exit_int_info,
2185 vmcb->control.exit_int_info_err); 2185 vmcb->control.exit_int_info_err,
2186 KVM_ISA_SVM);
2186 2187
2187 nested_vmcb = nested_svm_map(svm, svm->nested.vmcb, &page); 2188 nested_vmcb = nested_svm_map(svm, svm->nested.vmcb, &page);
2188 if (!nested_vmcb) 2189 if (!nested_vmcb)
@@ -3335,7 +3336,8 @@ static int handle_exit(struct kvm_vcpu *vcpu)
3335 svm->vmcb->control.exit_info_1, 3336 svm->vmcb->control.exit_info_1,
3336 svm->vmcb->control.exit_info_2, 3337 svm->vmcb->control.exit_info_2,
3337 svm->vmcb->control.exit_int_info, 3338 svm->vmcb->control.exit_int_info,
3338 svm->vmcb->control.exit_int_info_err); 3339 svm->vmcb->control.exit_int_info_err,
3340 KVM_ISA_SVM);
3339 3341
3340 vmexit = nested_svm_exit_special(svm); 3342 vmexit = nested_svm_exit_special(svm);
3341 3343
diff --git a/arch/x86/kvm/trace.h b/arch/x86/kvm/trace.h
index 3ff898c104f7..4e1716bf88a4 100644
--- a/arch/x86/kvm/trace.h
+++ b/arch/x86/kvm/trace.h
@@ -486,9 +486,9 @@ TRACE_EVENT(kvm_nested_intercepts,
486TRACE_EVENT(kvm_nested_vmexit, 486TRACE_EVENT(kvm_nested_vmexit,
487 TP_PROTO(__u64 rip, __u32 exit_code, 487 TP_PROTO(__u64 rip, __u32 exit_code,
488 __u64 exit_info1, __u64 exit_info2, 488 __u64 exit_info1, __u64 exit_info2,
489 __u32 exit_int_info, __u32 exit_int_info_err), 489 __u32 exit_int_info, __u32 exit_int_info_err, __u32 isa),
490 TP_ARGS(rip, exit_code, exit_info1, exit_info2, 490 TP_ARGS(rip, exit_code, exit_info1, exit_info2,
491 exit_int_info, exit_int_info_err), 491 exit_int_info, exit_int_info_err, isa),
492 492
493 TP_STRUCT__entry( 493 TP_STRUCT__entry(
494 __field( __u64, rip ) 494 __field( __u64, rip )
@@ -497,6 +497,7 @@ TRACE_EVENT(kvm_nested_vmexit,
497 __field( __u64, exit_info2 ) 497 __field( __u64, exit_info2 )
498 __field( __u32, exit_int_info ) 498 __field( __u32, exit_int_info )
499 __field( __u32, exit_int_info_err ) 499 __field( __u32, exit_int_info_err )
500 __field( __u32, isa )
500 ), 501 ),
501 502
502 TP_fast_assign( 503 TP_fast_assign(
@@ -506,6 +507,7 @@ TRACE_EVENT(kvm_nested_vmexit,
506 __entry->exit_info2 = exit_info2; 507 __entry->exit_info2 = exit_info2;
507 __entry->exit_int_info = exit_int_info; 508 __entry->exit_int_info = exit_int_info;
508 __entry->exit_int_info_err = exit_int_info_err; 509 __entry->exit_int_info_err = exit_int_info_err;
510 __entry->isa = isa;
509 ), 511 ),
510 TP_printk("rip: 0x%016llx reason: %s ext_inf1: 0x%016llx " 512 TP_printk("rip: 0x%016llx reason: %s ext_inf1: 0x%016llx "
511 "ext_inf2: 0x%016llx ext_int: 0x%08x ext_int_err: 0x%08x", 513 "ext_inf2: 0x%016llx ext_int: 0x%08x ext_int_err: 0x%08x",
@@ -522,9 +524,9 @@ TRACE_EVENT(kvm_nested_vmexit,
522TRACE_EVENT(kvm_nested_vmexit_inject, 524TRACE_EVENT(kvm_nested_vmexit_inject,
523 TP_PROTO(__u32 exit_code, 525 TP_PROTO(__u32 exit_code,
524 __u64 exit_info1, __u64 exit_info2, 526 __u64 exit_info1, __u64 exit_info2,
525 __u32 exit_int_info, __u32 exit_int_info_err), 527 __u32 exit_int_info, __u32 exit_int_info_err, __u32 isa),
526 TP_ARGS(exit_code, exit_info1, exit_info2, 528 TP_ARGS(exit_code, exit_info1, exit_info2,
527 exit_int_info, exit_int_info_err), 529 exit_int_info, exit_int_info_err, isa),
528 530
529 TP_STRUCT__entry( 531 TP_STRUCT__entry(
530 __field( __u32, exit_code ) 532 __field( __u32, exit_code )
@@ -532,6 +534,7 @@ TRACE_EVENT(kvm_nested_vmexit_inject,
532 __field( __u64, exit_info2 ) 534 __field( __u64, exit_info2 )
533 __field( __u32, exit_int_info ) 535 __field( __u32, exit_int_info )
534 __field( __u32, exit_int_info_err ) 536 __field( __u32, exit_int_info_err )
537 __field( __u32, isa )
535 ), 538 ),
536 539
537 TP_fast_assign( 540 TP_fast_assign(
@@ -540,6 +543,7 @@ TRACE_EVENT(kvm_nested_vmexit_inject,
540 __entry->exit_info2 = exit_info2; 543 __entry->exit_info2 = exit_info2;
541 __entry->exit_int_info = exit_int_info; 544 __entry->exit_int_info = exit_int_info;
542 __entry->exit_int_info_err = exit_int_info_err; 545 __entry->exit_int_info_err = exit_int_info_err;
546 __entry->isa = isa;
543 ), 547 ),
544 548
545 TP_printk("reason: %s ext_inf1: 0x%016llx " 549 TP_printk("reason: %s ext_inf1: 0x%016llx "