On Wed, Nov 02, 2022 at 06:33:33PM +0000, Valentin Schneider wrote: > IPIs sent to remove CPUs via irq_work_queue_on() are now covered by > trace_ipi_send_cpumask(), add another instance of the tracepoint to cover > self-IPIs. > > Signed-off-by: Valentin Schneider <vschneid@xxxxxxxxxx> > --- > kernel/irq_work.c | 14 +++++++++++++- > 1 file changed, 13 insertions(+), 1 deletion(-) > > diff --git a/kernel/irq_work.c b/kernel/irq_work.c > index 7afa40fe5cc43..aec38c294ce68 100644 > --- a/kernel/irq_work.c > +++ b/kernel/irq_work.c > @@ -22,6 +22,8 @@ > #include <asm/processor.h> > #include <linux/kasan.h> > > +#include <trace/events/ipi.h> > + > static DEFINE_PER_CPU(struct llist_head, raised_list); > static DEFINE_PER_CPU(struct llist_head, lazy_list); > static DEFINE_PER_CPU(struct task_struct *, irq_workd); > @@ -74,6 +76,16 @@ void __weak arch_irq_work_raise(void) > */ > } > > +static inline void irq_work_raise(struct irq_work *work) __always_inline, unless you want to occasionally only see it point to __irq_work_queue_local(). > +{ > + if (trace_ipi_send_cpumask_enabled() && arch_irq_work_has_interrupt()) { > + trace_ipi_send_cpumask(cpumask_of(smp_processor_id()), > + _RET_IP_, > + work->func); } > + > + arch_irq_work_raise(); > +} > + > /* Enqueue on current CPU, work must already be claimed and preempt disabled */ > static void __irq_work_queue_local(struct irq_work *work) > { > @@ -99,7 +111,7 @@ static void __irq_work_queue_local(struct irq_work *work) > > /* If the work is "lazy", handle it from next tick if any */ > if (!lazy_work || tick_nohz_tick_stopped()) > - arch_irq_work_raise(); > + irq_work_raise(work); > } > > /* Enqueue the irq work @work on the current CPU */ > -- > 2.31.1 >