diff options
| -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); | ||
