aboutsummaryrefslogtreecommitdiff
path: root/include/linux
diff options
context:
space:
mode:
authorLai Jiangshan <[email protected]>2010-08-23 18:42:48 +0900
committerFrederic Weisbecker <[email protected]>2010-09-07 17:49:34 +0200
commit2bf2160d8805de64308e2e7c3cd97813cb58ed2f (patch)
treeae2b275516c7fb6f09f85eacb195c6cde42c68e3 /include/linux
parentf6195aa09e618d712f52bf4fa33b5293820eb93d (diff)
irq: Add tracepoint to softirq_raise
Add a tracepoint for tracing when softirq action is raised. This and the existing tracepoints complete softirq's tracepoints: softirq_raise, softirq_entry and softirq_exit. And when this tracepoint is used in combination with the softirq_entry tracepoint we can determine the softirq raise latency. Signed-off-by: Lai Jiangshan <[email protected]> Acked-by: Mathieu Desnoyers <[email protected]> Acked-by: Neil Horman <[email protected]> Cc: David Miller <[email protected]> Cc: Kaneshige Kenji <[email protected]> Cc: Izumo Taku <[email protected]> Cc: Kosaki Motohiro <[email protected]> Cc: Lai Jiangshan <[email protected]> Cc: Scott Mcmillan <[email protected]> Cc: Steven Rostedt <[email protected]> Cc: Eric Dumazet <[email protected]> LKML-Reference: <[email protected]> [ factorize softirq events with DECLARE_EVENT_CLASS ] Signed-off-by: Koki Sanagi <[email protected]> Signed-off-by: Frederic Weisbecker <[email protected]>
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/interrupt.h8
1 files changed, 7 insertions, 1 deletions
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
index a0384a4d1e6f..531495db1708 100644
--- a/include/linux/interrupt.h
+++ b/include/linux/interrupt.h
@@ -18,6 +18,7 @@
#include <asm/atomic.h>
#include <asm/ptrace.h>
#include <asm/system.h>
+#include <trace/events/irq.h>
/*
* 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 *)(unsigned long)nr, NULL);
+ 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);