On 12/03/20 11:39, Suravee Suthikulpanit wrote: > GA Log tracepoint is useful when debugging AVIC performance > issue as it can be used with perf to count the number of times > IOMMU AVIC injects interrupts through the slow-path instead of > directly inject interrupts to the target vcpu. > > Signed-off-by: Suravee Suthikulpanit <suravee.suthikulpanit@xxxxxxx> > --- > arch/x86/kvm/svm.c | 1 + > arch/x86/kvm/trace.h | 18 ++++++++++++++++++ > arch/x86/kvm/x86.c | 1 + > 3 files changed, 20 insertions(+) > > diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c > index 24c0b2b..504f2cb 100644 > --- a/arch/x86/kvm/svm.c > +++ b/arch/x86/kvm/svm.c > @@ -1208,6 +1208,7 @@ static int avic_ga_log_notifier(u32 ga_tag) > u32 vcpu_id = AVIC_GATAG_TO_VCPUID(ga_tag); > > pr_debug("SVM: %s: vm_id=%#x, vcpu_id=%#x\n", __func__, vm_id, vcpu_id); > + trace_kvm_avic_ga_log(vm_id, vcpu_id); > > spin_lock_irqsave(&svm_vm_data_hash_lock, flags); > hash_for_each_possible(svm_vm_data_hash, kvm_svm, hnode, vm_id) { > diff --git a/arch/x86/kvm/trace.h b/arch/x86/kvm/trace.h > index f194dd0..023de6c 100644 > --- a/arch/x86/kvm/trace.h > +++ b/arch/x86/kvm/trace.h > @@ -1367,6 +1367,24 @@ > __entry->vec) > ); > > +TRACE_EVENT(kvm_avic_ga_log, > + TP_PROTO(u32 vmid, u32 vcpuid), > + TP_ARGS(vmid, vcpuid), > + > + TP_STRUCT__entry( > + __field(u32, vmid) > + __field(u32, vcpuid) > + ), > + > + TP_fast_assign( > + __entry->vmid = vmid; > + __entry->vcpuid = vcpuid; > + ), > + > + TP_printk("vmid=%u, vcpuid=%u", > + __entry->vmid, __entry->vcpuid) > +); > + > TRACE_EVENT(kvm_hv_timer_state, > TP_PROTO(unsigned int vcpu_id, unsigned int hv_timer_in_use), > TP_ARGS(vcpu_id, hv_timer_in_use), > diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c > index 5de2006..ef38b82 100644 > --- a/arch/x86/kvm/x86.c > +++ b/arch/x86/kvm/x86.c > @@ -10514,4 +10514,5 @@ u64 kvm_spec_ctrl_valid_bits(struct kvm_vcpu *vcpu) > EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_pi_irte_update); > 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); > Queued, thanks. Paolo