KVM: x86: add a tracepoint for APICv/AVIC interrupt delivery
authorMaxim Levitsky <mlevitsk@redhat.com>
Thu, 9 Dec 2021 11:54:36 +0000 (13:54 +0200)
committerPaolo Bonzini <pbonzini@redhat.com>
Thu, 9 Dec 2021 14:07:39 +0000 (09:07 -0500)
This allows to see how many interrupts were delivered via the
APICv/AVIC from the host.

Signed-off-by: Maxim Levitsky <mlevitsk@redhat.com>
Message-Id: <20211209115440.394441-3-mlevitsk@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kvm/lapic.c
arch/x86/kvm/trace.h
arch/x86/kvm/x86.c

index 40270d7..c5028e6 100644 (file)
@@ -1100,6 +1100,9 @@ static int __apic_accept_irq(struct kvm_lapic *apic, int delivery_mode,
                        kvm_lapic_set_irr(vector, apic);
                        kvm_make_request(KVM_REQ_EVENT, vcpu);
                        kvm_vcpu_kick(vcpu);
+               } else {
+                       trace_kvm_apicv_accept_irq(vcpu->vcpu_id, delivery_mode,
+                                                  trig_mode, vector);
                }
                break;
 
index 953b0fc..92e6f67 100644 (file)
@@ -1356,6 +1356,30 @@ TRACE_EVENT(kvm_apicv_update_request,
                  __entry->bit)
 );
 
+TRACE_EVENT(kvm_apicv_accept_irq,
+           TP_PROTO(__u32 apicid, __u16 dm, __u16 tm, __u8 vec),
+           TP_ARGS(apicid, dm, tm, vec),
+
+       TP_STRUCT__entry(
+               __field(        __u32,          apicid          )
+               __field(        __u16,          dm              )
+               __field(        __u16,          tm              )
+               __field(        __u8,           vec             )
+       ),
+
+       TP_fast_assign(
+               __entry->apicid         = apicid;
+               __entry->dm             = dm;
+               __entry->tm             = tm;
+               __entry->vec            = vec;
+       ),
+
+       TP_printk("apicid %x vec %u (%s|%s)",
+                 __entry->apicid, __entry->vec,
+                 __print_symbolic((__entry->dm >> 8 & 0x7), kvm_deliver_mode),
+                 __entry->tm ? "level" : "edge")
+);
+
 /*
  * Tracepoint for AMD AVIC
  */
index 1aaf37e..26cb3a4 100644 (file)
@@ -12693,6 +12693,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_avic_unaccelerated_access);
 EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_avic_incomplete_ipi);
 EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_avic_ga_log);
 EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_apicv_update_request);
+EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_apicv_accept_irq);
 EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_vmgexit_enter);
 EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_vmgexit_exit);
 EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_vmgexit_msr_protocol_enter);