From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
To: Xiao Guangrong <xiaoguangrong@cn.fujitsu.com>
Cc: linux-kernel@vger.kernel.org, mingo@elte.hu, fweisbec@gmail.com,
rostedt@goodmis.org, zhaolei@cn.fujitsu.com,
laijs@cn.fujitsu.com, Li Zefan <lizf@cn.fujitsu.com>
Subject: Re: [PATCH v3] ftrace: add a tracepoint for __raise_softirq_irqoff()
Date: Tue, 5 May 2009 12:16:05 -0400 [thread overview]
Message-ID: <20090505161604.GA15524@Krystal> (raw)
In-Reply-To: <49FFDF9C.7040505@cn.fujitsu.com>
* Xiao Guangrong (xiaoguangrong@cn.fujitsu.com) wrote:
> From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
>
> This patch is modified from Mathieu Desnoyers' patch. The original patch
> can be found here:
> http://marc.info/?l=linux-kernel&m=123791201816245&w=2
> This tracepoint can trace the time stamp when softirq action is raised.
>
> Changelog for v1 -> v2:
> 1: Use TRACE_EVENT instead of DEFINE_TRACE
> 2: Move the tracepoint from raise_softirq_irqoff() to
> __raise_softirq_irqoff()
>
> Changelog for v2 -> v3:
> Move the definition of __raise_softifq_irqoff() to .c file when
> CONFIG_TRACEPOINTS is enabled, to avoid recursive includes
>
> Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
> Signed-off-by: Xiao Guangrong <xiaoguangrong@cn.fujitsu.com>
>
> ---
> include/linux/interrupt.h | 6 ++++++
> include/trace/events/irq.h | 18 ++++++++++++++++++
> kernel/softirq.c | 8 ++++++++
> 3 files changed, 32 insertions(+), 0 deletions(-)
>
> diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
> index dd574d5..3143341 100644
> --- a/include/linux/interrupt.h
> +++ b/include/linux/interrupt.h
> @@ -361,7 +361,13 @@ 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);
> +
> +#ifdef CONFIG_TRACEPOINTS
> +extern void __raise_softirq_irqoff(unsigned int nr);
> +#else
> #define __raise_softirq_irqoff(nr) do { or_softirq_pending(1UL << (nr)); } while (0)
Can you put the
trace_irq_softirq_raise(nr);
directly in the define rather than adding this weird CONFIG_TRACEPOINTS?
(and change the define for a static inline), something like :
static inline void __raise_softirq_irqoff(unsigned int nr)
{
trace_irq_softirq_raise(nr);
or_softirq_pending(1UL << (nr);
}
This would ensure we don't add a function call on the
__raise_softirq_irqoff() fast-path.
Beware of circular include dependencies though. The tracepoints are
meant not to have this kind of problems (I try to keep the dependencies
very minimalistic), but I wonder if Steven's TRACE_EVENT is now ok on
this aspect.
If TRACE_EVENT happens to pose problems with circular header
dependencies, then try moving to the DECLARE_TRACE/DEFINE_TRACE scheme
which has been more thoroughly tested as a first step.
Mathieu
> +#endif
> +
> 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 32a9f7e..3c895bb 100644
> --- a/include/trace/events/irq.h
> +++ b/include/trace/events/irq.h
> @@ -128,6 +128,24 @@ TRACE_EVENT(softirq_exit,
> TP_printk("softirq=%d action=%s", __entry->vec, __get_str(name))
> );
>
> +TRACE_EVENT(irq_softirq_raise,
> +
> + TP_PROTO(unsigned int nr),
> +
> + TP_ARGS(nr),
> +
> + TP_STRUCT__entry(
> + __field( unsigned int, nr )
> + ),
> +
> + TP_fast_assign(
> + __entry->nr = nr;
> + ),
> +
> + TP_printk("softirq=%d action=%s is raised",
> + __entry->nr, softirq_to_name[__entry->nr])
> +);
> +
> #endif /* _TRACE_IRQ_H */
>
> /* This part must be outside protection */
> diff --git a/kernel/softirq.c b/kernel/softirq.c
> index b41fb71..bd0546b 100644
> --- a/kernel/softirq.c
> +++ b/kernel/softirq.c
> @@ -310,6 +310,14 @@ void irq_exit(void)
> preempt_enable_no_resched();
> }
>
> +#ifdef CONFIG_TRACEPOINTS
> +inline void __raise_softirq_irqoff(unsigned int nr)
> +{
> + trace_irq_softirq_raise(nr);
> + or_softirq_pending(1UL << (nr));
> +}
> +#endif
> +
> /*
> * This function must run with irqs disabled!
> */
> --
> 1.6.1.2
>
--
Mathieu Desnoyers
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
next prev parent reply other threads:[~2009-05-05 16:16 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-05-05 6:41 [PATCH v3] ftrace: add a tracepoint for __raise_softirq_irqoff() Xiao Guangrong
2009-05-05 6:53 ` Li Zefan
2009-05-07 0:57 ` Xiao Guangrong
2009-05-05 16:16 ` Mathieu Desnoyers [this message]
2009-05-11 7:28 ` Xiao Guangrong
2009-05-11 13:40 ` Mathieu Desnoyers
2009-05-11 14:09 ` Steven Rostedt
2009-05-11 14:27 ` Mathieu Desnoyers
2009-05-11 14:53 ` Steven Rostedt
2009-05-11 15:13 ` Mathieu Desnoyers
2009-05-12 9:50 ` Xiao Guangrong
2009-05-12 13:14 ` Mathieu Desnoyers
2009-05-14 10:53 ` [PATCH v4] " Xiao Guangrong
2009-05-14 12:40 ` Mathieu Desnoyers
2009-05-14 13:26 ` Steven Rostedt
2009-05-14 13:51 ` Mathieu Desnoyers
2009-05-15 1:53 ` Xiao Guangrong
2009-05-18 3:06 ` Zhaolei
2009-05-19 8:24 ` Ingo Molnar
2009-05-21 5:39 ` Zhaolei
2009-06-12 2:36 ` Lai Jiangshan
2009-06-12 9:51 ` [PATCH RFC] softirq: fix ksoftirq starved Lai Jiangshan
2009-06-17 14:53 ` Ingo Molnar
2009-06-18 3:19 ` Lai Jiangshan
2009-06-18 8:22 ` Peter Zijlstra
2009-06-20 15:48 ` Ingo Molnar
2009-07-03 9:35 ` [PATCH v4] ftrace: add a tracepoint for __raise_softirq_irqoff() Lai Jiangshan
2009-07-03 9:44 ` Ingo Molnar
2009-07-09 12:58 ` Lai Jiangshan
2009-05-14 2:44 ` [PATCH v3] " Lai Jiangshan
2009-05-14 3:50 ` Mathieu Desnoyers
2009-05-14 6:06 ` Lai Jiangshan
2009-05-14 8:05 ` Xiao Guangrong
2009-05-14 12:36 ` Mathieu Desnoyers
2009-05-14 13:25 ` Steven Rostedt
2009-05-06 13:49 ` Jason Baron
2009-05-07 1:16 ` Xiao Guangrong
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20090505161604.GA15524@Krystal \
--to=mathieu.desnoyers@polymtl.ca \
--cc=fweisbec@gmail.com \
--cc=laijs@cn.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=lizf@cn.fujitsu.com \
--cc=mingo@elte.hu \
--cc=rostedt@goodmis.org \
--cc=xiaoguangrong@cn.fujitsu.com \
--cc=zhaolei@cn.fujitsu.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.