Re: [PATCH v4 1/5] irq: add tracepoint to softirq_raise
From: Koki Sanagi <hidden>
Date: 2010-09-06 01:46:23
Also in:
lkml
(2010/09/04 0:50), Frederic Weisbecker wrote:
On Fri, Sep 03, 2010 at 11:43:12AM -0400, Steven Rostedt wrote:quoted
On Fri, 2010-09-03 at 17:29 +0200, Frederic Weisbecker wrote:quoted
quoted
/* * These correspond to the IORESOURCE_IRQ_* defines in@@ -407,7 +408,12 @@ asmlinkage void do_softirq(void); asmlinkage void __do_softirq(void); extern void open_softirq(int nr, void (*action)(struct softirq_action *)); extern void softirq_init(void); -#define __raise_softirq_irqoff(nr) do { or_softirq_pending(1UL << (nr)); } while (0) +static inline void __raise_softirq_irqoff(unsigned int nr) +{ + trace_softirq_raise((struct softirq_action *)&nr, NULL);Perhaps doing: trace_softirq_raise((struct softirq_action *)((unsigend long)nr), NULL); and ...quoted
quoted
+ or_softirq_pending(1UL << nr); +} + extern void raise_softirq_irqoff(unsigned int nr); extern void raise_softirq(unsigned int nr); extern void wakeup_softirqd(void);diff --git a/include/trace/events/irq.h b/include/trace/events/irq.h index 0e4cfb6..3ddda02 100644 --- a/include/trace/events/irq.h +++ b/include/trace/events/irq.h@@ -5,7 +5,9 @@ #define _TRACE_IRQ_H #include <linux/tracepoint.h> -#include <linux/interrupt.h> + +struct irqaction; +struct softirq_action; #define softirq_name(sirq) { sirq##_SOFTIRQ, #sirq } #define show_softirq_name(val) \@@ -93,7 +95,10 @@ DECLARE_EVENT_CLASS(softirq, ), TP_fast_assign( - __entry->vec = (int)(h - vec); + if (vec) + __entry->vec = (int)(h - vec); + else + __entry->vec = *((int *)h);__entry->vec = (int)h; would be better.quoted
quoted
),It seems that this will break softirq_entry/exit tracepoints. __entry->vec will deref vec->action() for these two, which is not what we want. If you can't have the same tracepoint signature for the three, just split the new one in a seperate TRACE_EVENT().Doing the above will at least be a bit safer.Agreed, I'm going to change that in the patch. Thanks.
I agree. Thanks, Koki Sanagi.