Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755646Ab0FXTPU (ORCPT ); Thu, 24 Jun 2010 15:15:20 -0400 Received: from hrndva-omtalb.mail.rr.com ([71.74.56.123]:49196 "EHLO hrndva-omtalb.mail.rr.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754642Ab0FXTPS (ORCPT ); Thu, 24 Jun 2010 15:15:18 -0400 X-Authority-Analysis: v=1.1 cv=fhltGCNqn7I0vuW4QMEj3LCOhQQl14bnXIhcDW1W0Bg= c=1 sm=0 a=D2APlSkXLPIA:10 a=UBIxAjGgU1YA:10 a=7U3hwN5JcxgA:10 a=Q9fys5e9bTEA:10 a=gMqfjgEr1zLu/65IO0LwxA==:17 a=gu6fZOg2AAAA:8 a=omOdbC7AAAAA:8 a=CmTFC2cQjkUvqy1l-pQA:9 a=r35PwZhVVKA4cVkBjn8A:7 a=yf7yYGwF_7rRiBNTA5-SEFI1QOEA:4 a=PUjeQqilurYA:10 a=gMqfjgEr1zLu/65IO0LwxA==:117 X-Cloudmark-Score: 0 X-Originating-IP: 74.67.89.75 Subject: Re: [RFC PATCH v2 1/5] irq: add tracepoint to softirq_raise From: Steven Rostedt Reply-To: rostedt@goodmis.org To: Koki Sanagi Cc: netdev@vger.kernel.org, davem@davemloft.net, scott.a.mcmillan@intel.com, kaneshige.kenji@jp.fujitsu.com, izumi.taku@jp.fujitsu.com, linux-kernel@vger.kernel.org In-Reply-To: <4C23145B.30805@jp.fujitsu.com> References: <4C2312A8.9060903@jp.fujitsu.com> <4C23145B.30805@jp.fujitsu.com> Content-Type: text/plain; charset="ISO-8859-15" Organization: Kihon Technologies Inc. Date: Thu, 24 Jun 2010 15:15:14 -0400 Message-ID: <1277406914.9181.67.camel@gandalf.stny.rr.com> Mime-Version: 1.0 X-Mailer: Evolution 2.28.3 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3934 Lines: 128 Hi Koki, Your subject says 1/5 but I do not see any other patches. On Thu, 2010-06-24 at 17:16 +0900, Koki Sanagi wrote: > This patch adds a tracepoint to raising of softirq. > This is useful if you want to detect which hard interrupt raise softirq > and lets you know a time between raising softirq and performing softirq. > Combinating with other tracepoint, it lets us know a process of packets > (See patch 0/5). > > -0 [001] 241229.957184: softirq_raise: vec=3 [action=NET_RX] > -0 [000] 241229.993399: softirq_raise: vec=1 [action=TIMER] > -0 [000] 241229.993400: softirq_raise: vec=9 [action=RCU] > > This is a same patch Lai Jiangshan submitted. > http://marc.info/?l=linux-kernel&m=126026122728732&w=2 > > Signed-off-by: Koki Sanagi > --- > include/linux/interrupt.h | 8 +++++++- > include/trace/events/irq.h | 34 +++++++++++++++++++++++++++++++--- > 2 files changed, 38 insertions(+), 4 deletions(-) > > diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h > index c233113..1cb5726 100644 > --- a/include/linux/interrupt.h > +++ b/include/linux/interrupt.h > @@ -18,6 +18,7 @@ > #include > #include > #include > +#include > > /* > * These correspond to the IORESOURCE_IRQ_* defines in > @@ -402,7 +403,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(nr); > + 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..7cb7435 100644 > --- a/include/trace/events/irq.h > +++ b/include/trace/events/irq.h > @@ -5,7 +5,9 @@ > #define _TRACE_IRQ_H > > #include > -#include > + > +struct irqaction; > +struct softirq_action; > > #define softirq_name(sirq) { sirq##_SOFTIRQ, #sirq } > #define show_softirq_name(val) \ > @@ -82,6 +84,32 @@ TRACE_EVENT(irq_handler_exit, > __entry->irq, __entry->ret ? "handled" : "unhandled") > ); > > +/** > + * softirq_raise - called immediately when a softirq is raised > + * @nr: softirq vector number > + * > + * Tracepoint for tracing when softirq action is raised. > + * Also, when used in combination with the softirq_entry tracepoint > + * we can determine the softirq raise latency. > + */ > +TRACE_EVENT(softirq_raise, > + > + TP_PROTO(unsigned int nr), > + > + TP_ARGS(nr), > + > + TP_STRUCT__entry( > + __field( unsigned int, vec ) > + ), > + > + TP_fast_assign( > + __entry->vec = nr; > + ), > + > + TP_printk("vec=%d [action=%s]", __entry->vec, > + show_softirq_name(__entry->vec)) Hmm, is there a way to reuse a DECLARE_EVENT_CLASS here? > +); > + > DECLARE_EVENT_CLASS(softirq, > > TP_PROTO(struct softirq_action *h, struct softirq_action *vec), > @@ -89,11 +117,11 @@ DECLARE_EVENT_CLASS(softirq, > TP_ARGS(h, vec), > > TP_STRUCT__entry( > - __field( int, vec ) > + __field( unsigned int, vec ) > ), > > TP_fast_assign( > - __entry->vec = (int)(h - vec); > + __entry->vec = (unsigned int)(h - vec); Just curious, did you see the original as a bug? -- Steve > ), > > TP_printk("vec=%d [action=%s]", __entry->vec, -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/