Skip to content

Commit c5af316

Browse files
committed
KVM: x86: Move posted interrupt tracepoint to common code
Move the pi_irte_update tracepoint to common x86, and call it whenever the IRTE is modified. Tracing only the modifications that result in an IRQ being posted to a vCPU makes the tracepoint useless for debugging. Drop the vendor specific address; plumbing that into common code isn't worth the trouble, as the address is meaningless without a whole pile of other information that isn't provided in any tracepoint. Link: https://lore.kernel.org/r/20250611224604.313496-31-seanjc@google.com Signed-off-by: Sean Christopherson <seanjc@google.com>
1 parent cf04ec3 commit c5af316

File tree

5 files changed

+17
-24
lines changed

5 files changed

+17
-24
lines changed

arch/x86/kvm/irq.c

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -511,9 +511,11 @@ void kvm_arch_irq_routing_update(struct kvm *kvm)
511511
static int kvm_pi_update_irte(struct kvm_kernel_irqfd *irqfd,
512512
struct kvm_kernel_irq_routing_entry *entry)
513513
{
514+
unsigned int host_irq = irqfd->producer->irq;
514515
struct kvm *kvm = irqfd->kvm;
515516
struct kvm_vcpu *vcpu = NULL;
516517
struct kvm_lapic_irq irq;
518+
int r;
517519

518520
if (!irqchip_in_kernel(kvm) ||
519521
!kvm_arch_has_irq_bypass() ||
@@ -540,8 +542,13 @@ static int kvm_pi_update_irte(struct kvm_kernel_irqfd *irqfd,
540542
vcpu = NULL;
541543
}
542544

543-
return kvm_x86_call(pi_update_irte)(irqfd, irqfd->kvm, irqfd->producer->irq,
544-
irqfd->gsi, vcpu, irq.vector);
545+
r = kvm_x86_call(pi_update_irte)(irqfd, irqfd->kvm, host_irq, irqfd->gsi,
546+
vcpu, irq.vector);
547+
if (r)
548+
return r;
549+
550+
trace_kvm_pi_irte_update(host_irq, vcpu, irqfd->gsi, irq.vector, !!vcpu);
551+
return 0;
545552
}
546553

547554
int kvm_arch_irq_bypass_add_producer(struct irq_bypass_consumer *cons,
@@ -595,6 +602,7 @@ void kvm_arch_irq_bypass_del_producer(struct irq_bypass_consumer *cons,
595602

596603
spin_unlock_irq(&kvm->irqfds.lock);
597604

605+
598606
kvm_arch_end_assignment(irqfd->kvm);
599607
}
600608

arch/x86/kvm/svm/avic.c

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -816,9 +816,6 @@ int avic_pi_update_irte(struct kvm_kernel_irqfd *irqfd, struct kvm *kvm,
816816
*/
817817
svm_ir_list_del(irqfd);
818818

819-
pr_debug("SVM: %s: host_irq=%#x, guest_irq=%#x, set=%#x\n",
820-
__func__, host_irq, guest_irq, !!vcpu);
821-
822819
/**
823820
* Here, we setup with legacy mode in the following cases:
824821
* 1. When cannot target interrupt to a specific vcpu.
@@ -854,9 +851,6 @@ int avic_pi_update_irte(struct kvm_kernel_irqfd *irqfd, struct kvm *kvm,
854851
*/
855852
if (!ret)
856853
ret = svm_ir_list_add(to_svm(vcpu), irqfd, &pi);
857-
858-
trace_kvm_pi_irte_update(host_irq, vcpu->vcpu_id, guest_irq,
859-
vector, vcpu_info.pi_desc_addr, true);
860854
} else {
861855
ret = irq_set_vcpu_affinity(host_irq, NULL);
862856
}

arch/x86/kvm/trace.h

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1176,37 +1176,32 @@ TRACE_EVENT(kvm_smm_transition,
11761176
* Tracepoint for VT-d posted-interrupts and AMD-Vi Guest Virtual APIC.
11771177
*/
11781178
TRACE_EVENT(kvm_pi_irte_update,
1179-
TP_PROTO(unsigned int host_irq, unsigned int vcpu_id,
1180-
unsigned int gsi, unsigned int gvec,
1181-
u64 pi_desc_addr, bool set),
1182-
TP_ARGS(host_irq, vcpu_id, gsi, gvec, pi_desc_addr, set),
1179+
TP_PROTO(unsigned int host_irq, struct kvm_vcpu *vcpu,
1180+
unsigned int gsi, unsigned int gvec, bool set),
1181+
TP_ARGS(host_irq, vcpu, gsi, gvec, set),
11831182

11841183
TP_STRUCT__entry(
11851184
__field( unsigned int, host_irq )
1186-
__field( unsigned int, vcpu_id )
1185+
__field( int, vcpu_id )
11871186
__field( unsigned int, gsi )
11881187
__field( unsigned int, gvec )
1189-
__field( u64, pi_desc_addr )
11901188
__field( bool, set )
11911189
),
11921190

11931191
TP_fast_assign(
11941192
__entry->host_irq = host_irq;
1195-
__entry->vcpu_id = vcpu_id;
1193+
__entry->vcpu_id = vcpu ? vcpu->vcpu_id : -1;
11961194
__entry->gsi = gsi;
11971195
__entry->gvec = gvec;
1198-
__entry->pi_desc_addr = pi_desc_addr;
11991196
__entry->set = set;
12001197
),
12011198

1202-
TP_printk("PI is %s for irq %u, vcpu %u, gsi: 0x%x, "
1203-
"gvec: 0x%x, pi_desc_addr: 0x%llx",
1199+
TP_printk("PI is %s for irq %u, vcpu %d, gsi: 0x%x, gvec: 0x%x",
12041200
__entry->set ? "enabled and being updated" : "disabled",
12051201
__entry->host_irq,
12061202
__entry->vcpu_id,
12071203
__entry->gsi,
1208-
__entry->gvec,
1209-
__entry->pi_desc_addr)
1204+
__entry->gvec)
12101205
);
12111206

12121207
/*

arch/x86/kvm/vmx/posted_intr.c

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -308,9 +308,6 @@ int vmx_pi_update_irte(struct kvm_kernel_irqfd *irqfd, struct kvm *kvm,
308308
.vector = vector,
309309
};
310310

311-
trace_kvm_pi_irte_update(host_irq, vcpu->vcpu_id, guest_irq,
312-
vcpu_info.vector, vcpu_info.pi_desc_addr, true);
313-
314311
return irq_set_vcpu_affinity(host_irq, &vcpu_info);
315312
} else {
316313
return irq_set_vcpu_affinity(host_irq, NULL);

arch/x86/kvm/x86.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13891,7 +13891,6 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_nested_intercepts);
1389113891
EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_write_tsc_offset);
1389213892
EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_ple_window_update);
1389313893
EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_pml_full);
13894-
EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_pi_irte_update);
1389513894
EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_avic_unaccelerated_access);
1389613895
EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_avic_incomplete_ipi);
1389713896
EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_avic_ga_log);

0 commit comments

Comments
 (0)