[patch 4/9] LTTng instrumentation softirq

From: Mathieu Desnoyers
Date: Tue Mar 24 2009 - 12:26:28 EST


Compared to Jason's patch, this patch also instruments softirq raise event.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@xxxxxxxxxx>
CC: 'Ingo Molnar' <mingo@xxxxxxx>
CC: Frederic Weisbecker <fweisbec@xxxxxxxxx>
CC: Jason Baron <jbaron@xxxxxxxxxx>
CC: 'Peter Zijlstra' <peterz@xxxxxxxxxxxxx>
CC: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
CC: Russell King <rmk+lkml@xxxxxxxxxxxxxxxx>
CC: Masami Hiramatsu <mhiramat@xxxxxxxxxx>
CC: "Frank Ch. Eigler" <fche@xxxxxxxxxx>
CC: 'Hideo AOKI' <haoki@xxxxxxxxxx>
CC: Takashi Nishiie <t-nishiie@xxxxxxxxxxxxxxxxxx>
CC: 'Steven Rostedt' <rostedt@xxxxxxxxxxx>
CC: Eduard - Gabriel Munteanu <eduard.munteanu@xxxxxxxxxxx>
---
include/trace/irq.h | 10 ++++++++++
kernel/softirq.c | 7 +++++++
2 files changed, 17 insertions(+)

Index: linux-2.6-lttng/include/trace/irq.h
===================================================================
--- linux-2.6-lttng.orig/include/trace/irq.h 2009-03-24 11:48:36.000000000 -0400
+++ linux-2.6-lttng/include/trace/irq.h 2009-03-24 11:48:56.000000000 -0400
@@ -32,4 +32,14 @@ DECLARE_TRACE(irq_tasklet_high_exit,
TPPROTO(struct tasklet_struct *t),
TPARGS(t));

+DECLARE_TRACE(irq_softirq_entry,
+ TPPROTO(struct softirq_action *h, struct softirq_action *softirq_vec),
+ TPARGS(h, softirq_vec));
+DECLARE_TRACE(irq_softirq_exit,
+ TPPROTO(struct softirq_action *h, struct softirq_action *softirq_vec),
+ TPARGS(h, softirq_vec));
+DECLARE_TRACE(irq_softirq_raise,
+ TPPROTO(unsigned int nr),
+ TPARGS(nr));
+
#endif
Index: linux-2.6-lttng/kernel/softirq.c
===================================================================
--- linux-2.6-lttng.orig/kernel/softirq.c 2009-03-24 11:48:36.000000000 -0400
+++ linux-2.6-lttng/kernel/softirq.c 2009-03-24 11:48:56.000000000 -0400
@@ -58,6 +58,10 @@ DEFINE_TRACE(irq_tasklet_high_exit);
DEFINE_TRACE(irq_tasklet_low_entry);
DEFINE_TRACE(irq_tasklet_low_exit);

+DEFINE_TRACE(irq_softirq_entry);
+DEFINE_TRACE(irq_softirq_exit);
+DEFINE_TRACE(irq_softirq_raise);
+
/*
* we cannot loop indefinitely here to avoid userspace starvation,
* but we also don't want to introduce a worst case 1/HZ latency
@@ -201,7 +205,9 @@ restart:
if (pending & 1) {
int prev_count = preempt_count();

+ trace_irq_softirq_entry(h, softirq_vec);
h->action(h);
+ trace_irq_softirq_exit(h, softirq_vec);

if (unlikely(prev_count != preempt_count())) {
printk(KERN_ERR "huh, entered softirq %td %p"
@@ -300,6 +306,7 @@ void irq_exit(void)
*/
inline void raise_softirq_irqoff(unsigned int nr)
{
+ trace_irq_softirq_raise(nr);
__raise_softirq_irqoff(nr);

/*

--
Mathieu Desnoyers
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/