diff options
author | Joerg Roedel <joerg.roedel@amd.com> | 2009-10-09 10:08:28 -0400 |
---|---|---|
committer | Avi Kivity <avi@redhat.com> | 2009-12-03 02:32:15 -0500 |
commit | d8cabddf7e8fbdced2dd668c98d7762c7ef75245 (patch) | |
tree | 17d8f451b1bc9552cc09a3753d5e612f58c6f919 /arch/x86/kvm | |
parent | 0ac406de8f3780c8e0801d5719e1ec531d4a6ec4 (diff) |
KVM: SVM: Add tracepoint for nested #vmexit
This patch adds a tracepoint for every #vmexit we get from a
nested guest.
Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Diffstat (limited to 'arch/x86/kvm')
-rw-r--r-- | arch/x86/kvm/svm.c | 6 | ||||
-rw-r--r-- | arch/x86/kvm/trace.h | 36 | ||||
-rw-r--r-- | arch/x86/kvm/x86.c | 1 |
3 files changed, 43 insertions, 0 deletions
diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c index 907af3f3a7af..edf6e8b2b84e 100644 --- a/arch/x86/kvm/svm.c +++ b/arch/x86/kvm/svm.c | |||
@@ -2366,6 +2366,12 @@ static int handle_exit(struct kvm_vcpu *vcpu) | |||
2366 | if (is_nested(svm)) { | 2366 | if (is_nested(svm)) { |
2367 | int vmexit; | 2367 | int vmexit; |
2368 | 2368 | ||
2369 | trace_kvm_nested_vmexit(svm->vmcb->save.rip, exit_code, | ||
2370 | svm->vmcb->control.exit_info_1, | ||
2371 | svm->vmcb->control.exit_info_2, | ||
2372 | svm->vmcb->control.exit_int_info, | ||
2373 | svm->vmcb->control.exit_int_info_err); | ||
2374 | |||
2369 | nsvm_printk("nested handle_exit: 0x%x | 0x%lx | 0x%lx | 0x%lx\n", | 2375 | nsvm_printk("nested handle_exit: 0x%x | 0x%lx | 0x%lx | 0x%lx\n", |
2370 | exit_code, svm->vmcb->control.exit_info_1, | 2376 | exit_code, svm->vmcb->control.exit_info_1, |
2371 | svm->vmcb->control.exit_info_2, svm->vmcb->save.rip); | 2377 | svm->vmcb->control.exit_info_2, svm->vmcb->save.rip); |
diff --git a/arch/x86/kvm/trace.h b/arch/x86/kvm/trace.h index b5798e12182a..a7eb6299a261 100644 --- a/arch/x86/kvm/trace.h +++ b/arch/x86/kvm/trace.h | |||
@@ -382,6 +382,42 @@ TRACE_EVENT(kvm_nested_vmrun, | |||
382 | __entry->npt ? "on" : "off") | 382 | __entry->npt ? "on" : "off") |
383 | ); | 383 | ); |
384 | 384 | ||
385 | /* | ||
386 | * Tracepoint for #VMEXIT while nested | ||
387 | */ | ||
388 | TRACE_EVENT(kvm_nested_vmexit, | ||
389 | TP_PROTO(__u64 rip, __u32 exit_code, | ||
390 | __u64 exit_info1, __u64 exit_info2, | ||
391 | __u32 exit_int_info, __u32 exit_int_info_err), | ||
392 | TP_ARGS(rip, exit_code, exit_info1, exit_info2, | ||
393 | exit_int_info, exit_int_info_err), | ||
394 | |||
395 | TP_STRUCT__entry( | ||
396 | __field( __u64, rip ) | ||
397 | __field( __u32, exit_code ) | ||
398 | __field( __u64, exit_info1 ) | ||
399 | __field( __u64, exit_info2 ) | ||
400 | __field( __u32, exit_int_info ) | ||
401 | __field( __u32, exit_int_info_err ) | ||
402 | ), | ||
403 | |||
404 | TP_fast_assign( | ||
405 | __entry->rip = rip; | ||
406 | __entry->exit_code = exit_code; | ||
407 | __entry->exit_info1 = exit_info1; | ||
408 | __entry->exit_info2 = exit_info2; | ||
409 | __entry->exit_int_info = exit_int_info; | ||
410 | __entry->exit_int_info_err = exit_int_info_err; | ||
411 | ), | ||
412 | TP_printk("rip: 0x%016llx reason: %s ext_inf1: 0x%016llx " | ||
413 | "ext_inf2: 0x%016llx ext_int: 0x%08x ext_int_err: 0x%08x\n", | ||
414 | __entry->rip, | ||
415 | ftrace_print_symbols_seq(p, __entry->exit_code, | ||
416 | kvm_x86_ops->exit_reasons_str), | ||
417 | __entry->exit_info1, __entry->exit_info2, | ||
418 | __entry->exit_int_info, __entry->exit_int_info_err) | ||
419 | ); | ||
420 | |||
385 | #endif /* _TRACE_KVM_H */ | 421 | #endif /* _TRACE_KVM_H */ |
386 | 422 | ||
387 | /* This part must be outside protection */ | 423 | /* This part must be outside protection */ |
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 3ab2f9042dd0..192d58efc6dc 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c | |||
@@ -4985,3 +4985,4 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_page_fault); | |||
4985 | EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_msr); | 4985 | EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_msr); |
4986 | EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_cr); | 4986 | EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_cr); |
4987 | EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_nested_vmrun); | 4987 | EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_nested_vmrun); |
4988 | EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_nested_vmexit); | ||