diff options
-rw-r--r-- | Documentation/DocBook/tracepoint.tmpl | 5 | ||||
-rw-r--r-- | include/trace/events/irq.h | 46 |
2 files changed, 47 insertions, 4 deletions
diff --git a/Documentation/DocBook/tracepoint.tmpl b/Documentation/DocBook/tracepoint.tmpl index 70891bc68491..b0756d0fd579 100644 --- a/Documentation/DocBook/tracepoint.tmpl +++ b/Documentation/DocBook/tracepoint.tmpl | |||
@@ -81,4 +81,9 @@ | |||
81 | </para> | 81 | </para> |
82 | </chapter> | 82 | </chapter> |
83 | 83 | ||
84 | <chapter id="irq"> | ||
85 | <title>IRQ</title> | ||
86 | !Iinclude/trace/events/irq.h | ||
87 | </chapter> | ||
88 | |||
84 | </book> | 89 | </book> |
diff --git a/include/trace/events/irq.h b/include/trace/events/irq.h index 768686467518..32a9f7ef432b 100644 --- a/include/trace/events/irq.h +++ b/include/trace/events/irq.h | |||
@@ -7,8 +7,16 @@ | |||
7 | #undef TRACE_SYSTEM | 7 | #undef TRACE_SYSTEM |
8 | #define TRACE_SYSTEM irq | 8 | #define TRACE_SYSTEM irq |
9 | 9 | ||
10 | /* | 10 | /** |
11 | * Tracepoint for entry of interrupt handler: | 11 | * irq_handler_entry - called immediately before the irq action handler |
12 | * @irq: irq number | ||
13 | * @action: pointer to struct irqaction | ||
14 | * | ||
15 | * The struct irqaction pointed to by @action contains various | ||
16 | * information about the handler, including the device name, | ||
17 | * @action->name, and the device id, @action->dev_id. When used in | ||
18 | * conjunction with the irq_handler_exit tracepoint, we can figure | ||
19 | * out irq handler latencies. | ||
12 | */ | 20 | */ |
13 | TRACE_EVENT(irq_handler_entry, | 21 | TRACE_EVENT(irq_handler_entry, |
14 | 22 | ||
@@ -29,8 +37,16 @@ TRACE_EVENT(irq_handler_entry, | |||
29 | TP_printk("irq=%d handler=%s", __entry->irq, __get_str(name)) | 37 | TP_printk("irq=%d handler=%s", __entry->irq, __get_str(name)) |
30 | ); | 38 | ); |
31 | 39 | ||
32 | /* | 40 | /** |
33 | * Tracepoint for return of an interrupt handler: | 41 | * irq_handler_exit - called immediately after the irq action handler returns |
42 | * @irq: irq number | ||
43 | * @action: pointer to struct irqaction | ||
44 | * @ret: return value | ||
45 | * | ||
46 | * If the @ret value is set to IRQ_HANDLED, then we know that the corresponding | ||
47 | * @action->handler scuccessully handled this irq. Otherwise, the irq might be | ||
48 | * a shared irq line, or the irq was not handled successfully. Can be used in | ||
49 | * conjunction with the irq_handler_entry to understand irq handler latencies. | ||
34 | */ | 50 | */ |
35 | TRACE_EVENT(irq_handler_exit, | 51 | TRACE_EVENT(irq_handler_exit, |
36 | 52 | ||
@@ -52,6 +68,17 @@ TRACE_EVENT(irq_handler_exit, | |||
52 | __entry->irq, __entry->ret ? "handled" : "unhandled") | 68 | __entry->irq, __entry->ret ? "handled" : "unhandled") |
53 | ); | 69 | ); |
54 | 70 | ||
71 | /** | ||
72 | * softirq_entry - called immediately before the softirq handler | ||
73 | * @h: pointer to struct softirq_action | ||
74 | * @vec: pointer to first struct softirq_action in softirq_vec array | ||
75 | * | ||
76 | * The @h parameter, contains a pointer to the struct softirq_action | ||
77 | * which has a pointer to the action handler that is called. By subtracting | ||
78 | * the @vec pointer from the @h pointer, we can determine the softirq | ||
79 | * number. Also, when used in combination with the softirq_exit tracepoint | ||
80 | * we can determine the softirq latency. | ||
81 | */ | ||
55 | TRACE_EVENT(softirq_entry, | 82 | TRACE_EVENT(softirq_entry, |
56 | 83 | ||
57 | TP_PROTO(struct softirq_action *h, struct softirq_action *vec), | 84 | TP_PROTO(struct softirq_action *h, struct softirq_action *vec), |
@@ -71,6 +98,17 @@ TRACE_EVENT(softirq_entry, | |||
71 | TP_printk("softirq=%d action=%s", __entry->vec, __get_str(name)) | 98 | TP_printk("softirq=%d action=%s", __entry->vec, __get_str(name)) |
72 | ); | 99 | ); |
73 | 100 | ||
101 | /** | ||
102 | * softirq_exit - called immediately after the softirq handler returns | ||
103 | * @h: pointer to struct softirq_action | ||
104 | * @vec: pointer to first struct softirq_action in softirq_vec array | ||
105 | * | ||
106 | * The @h parameter contains a pointer to the struct softirq_action | ||
107 | * that has handled the softirq. By subtracting the @vec pointer from | ||
108 | * the @h pointer, we can determine the softirq number. Also, when used in | ||
109 | * combination with the softirq_entry tracepoint we can determine the softirq | ||
110 | * latency. | ||
111 | */ | ||
74 | TRACE_EVENT(softirq_exit, | 112 | TRACE_EVENT(softirq_exit, |
75 | 113 | ||
76 | TP_PROTO(struct softirq_action *h, struct softirq_action *vec), | 114 | TP_PROTO(struct softirq_action *h, struct softirq_action *vec), |