diff options
author | Stefan Hajnoczi <stefanha@linux.vnet.ibm.com> | 2011-07-22 07:46:52 -0400 |
---|---|---|
committer | Avi Kivity <avi@redhat.com> | 2011-09-25 12:17:58 -0400 |
commit | e097e5ffd69cbd7be61466e2d54c145468d48073 (patch) | |
tree | 975497ba43f1970ca73f114248a722807a89cc95 /arch | |
parent | d1613ad5d0018a009bd4865b0fa5930abb5ed259 (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.c | 6 | ||||
-rw-r--r-- | arch/x86/kvm/trace.h | 12 |
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, | |||
486 | TRACE_EVENT(kvm_nested_vmexit, | 486 | TRACE_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, | |||
522 | TRACE_EVENT(kvm_nested_vmexit_inject, | 524 | TRACE_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 " |