diff options
author | Joerg Roedel <joerg.roedel@amd.com> | 2009-10-09 10:08:27 -0400 |
---|---|---|
committer | Avi Kivity <avi@redhat.com> | 2009-12-03 02:32:15 -0500 |
commit | 0ac406de8f3780c8e0801d5719e1ec531d4a6ec4 (patch) | |
tree | b489495da026d557b65f579c13f7b23b7b18d99b /arch/x86/kvm | |
parent | cd3ff653ae0b45bac7a19208e9c75034fcacc85f (diff) |
KVM: SVM: Add tracepoint for nested vmrun
This patch adds a dedicated kvm tracepoint for a nested
vmrun.
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 | 33 | ||||
-rw-r--r-- | arch/x86/kvm/x86.c | 1 |
3 files changed, 40 insertions, 0 deletions
diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c index 884bffc70c7f..907af3f3a7af 100644 --- a/arch/x86/kvm/svm.c +++ b/arch/x86/kvm/svm.c | |||
@@ -1726,6 +1726,12 @@ static bool nested_svm_vmrun(struct vcpu_svm *svm) | |||
1726 | /* nested_vmcb is our indicator if nested SVM is activated */ | 1726 | /* nested_vmcb is our indicator if nested SVM is activated */ |
1727 | svm->nested.vmcb = svm->vmcb->save.rax; | 1727 | svm->nested.vmcb = svm->vmcb->save.rax; |
1728 | 1728 | ||
1729 | trace_kvm_nested_vmrun(svm->vmcb->save.rip - 3, svm->nested.vmcb, | ||
1730 | nested_vmcb->save.rip, | ||
1731 | nested_vmcb->control.int_ctl, | ||
1732 | nested_vmcb->control.event_inj, | ||
1733 | nested_vmcb->control.nested_ctl); | ||
1734 | |||
1729 | /* Clear internal status */ | 1735 | /* Clear internal status */ |
1730 | kvm_clear_exception_queue(&svm->vcpu); | 1736 | kvm_clear_exception_queue(&svm->vcpu); |
1731 | kvm_clear_interrupt_queue(&svm->vcpu); | 1737 | kvm_clear_interrupt_queue(&svm->vcpu); |
diff --git a/arch/x86/kvm/trace.h b/arch/x86/kvm/trace.h index 0d480e77eacf..b5798e12182a 100644 --- a/arch/x86/kvm/trace.h +++ b/arch/x86/kvm/trace.h | |||
@@ -349,6 +349,39 @@ TRACE_EVENT(kvm_apic_accept_irq, | |||
349 | __entry->coalesced ? " (coalesced)" : "") | 349 | __entry->coalesced ? " (coalesced)" : "") |
350 | ); | 350 | ); |
351 | 351 | ||
352 | /* | ||
353 | * Tracepoint for nested VMRUN | ||
354 | */ | ||
355 | TRACE_EVENT(kvm_nested_vmrun, | ||
356 | TP_PROTO(__u64 rip, __u64 vmcb, __u64 nested_rip, __u32 int_ctl, | ||
357 | __u32 event_inj, bool npt), | ||
358 | TP_ARGS(rip, vmcb, nested_rip, int_ctl, event_inj, npt), | ||
359 | |||
360 | TP_STRUCT__entry( | ||
361 | __field( __u64, rip ) | ||
362 | __field( __u64, vmcb ) | ||
363 | __field( __u64, nested_rip ) | ||
364 | __field( __u32, int_ctl ) | ||
365 | __field( __u32, event_inj ) | ||
366 | __field( bool, npt ) | ||
367 | ), | ||
368 | |||
369 | TP_fast_assign( | ||
370 | __entry->rip = rip; | ||
371 | __entry->vmcb = vmcb; | ||
372 | __entry->nested_rip = nested_rip; | ||
373 | __entry->int_ctl = int_ctl; | ||
374 | __entry->event_inj = event_inj; | ||
375 | __entry->npt = npt; | ||
376 | ), | ||
377 | |||
378 | TP_printk("rip: 0x%016llx vmcb: 0x%016llx nrip: 0x%016llx int_ctl: 0x%08x " | ||
379 | "event_inj: 0x%08x npt: %s\n", | ||
380 | __entry->rip, __entry->vmcb, __entry->nested_rip, | ||
381 | __entry->int_ctl, __entry->event_inj, | ||
382 | __entry->npt ? "on" : "off") | ||
383 | ); | ||
384 | |||
352 | #endif /* _TRACE_KVM_H */ | 385 | #endif /* _TRACE_KVM_H */ |
353 | 386 | ||
354 | /* This part must be outside protection */ | 387 | /* This part must be outside protection */ |
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 4de5bc0a8e86..3ab2f9042dd0 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c | |||
@@ -4984,3 +4984,4 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_inj_virq); | |||
4984 | EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_page_fault); | 4984 | 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); | ||