timers: Add tracepoints for timer_list timers
[linux-2.6.git] / include / trace / events / timer.h
1 #undef TRACE_SYSTEM
2 #define TRACE_SYSTEM timer
3
4 #if !defined(_TRACE_TIMER_H) || defined(TRACE_HEADER_MULTI_READ)
5 #define _TRACE_TIMER_H
6
7 #include <linux/tracepoint.h>
8 #include <linux/timer.h>
9
10 /**
11  * timer_init - called when the timer is initialized
12  * @timer:      pointer to struct timer_list
13  */
14 TRACE_EVENT(timer_init,
15
16         TP_PROTO(struct timer_list *timer),
17
18         TP_ARGS(timer),
19
20         TP_STRUCT__entry(
21                 __field( void *,        timer   )
22         ),
23
24         TP_fast_assign(
25                 __entry->timer  = timer;
26         ),
27
28         TP_printk("timer %p", __entry->timer)
29 );
30
31 /**
32  * timer_start - called when the timer is started
33  * @timer:      pointer to struct timer_list
34  * @expires:    the timers expiry time
35  */
36 TRACE_EVENT(timer_start,
37
38         TP_PROTO(struct timer_list *timer, unsigned long expires),
39
40         TP_ARGS(timer, expires),
41
42         TP_STRUCT__entry(
43                 __field( void *,        timer           )
44                 __field( void *,        function        )
45                 __field( unsigned long, expires         )
46                 __field( unsigned long, now             )
47         ),
48
49         TP_fast_assign(
50                 __entry->timer          = timer;
51                 __entry->function       = timer->function;
52                 __entry->expires        = expires;
53                 __entry->now            = jiffies;
54         ),
55
56         TP_printk("timer %p: func %pf, expires %lu, timeout %ld",
57                   __entry->timer, __entry->function, __entry->expires,
58                   (long)__entry->expires - __entry->now)
59 );
60
61 /**
62  * timer_expire_entry - called immediately before the timer callback
63  * @timer:      pointer to struct timer_list
64  *
65  * Allows to determine the timer latency.
66  */
67 TRACE_EVENT(timer_expire_entry,
68
69         TP_PROTO(struct timer_list *timer),
70
71         TP_ARGS(timer),
72
73         TP_STRUCT__entry(
74                 __field( void *,        timer   )
75                 __field( unsigned long, now     )
76         ),
77
78         TP_fast_assign(
79                 __entry->timer          = timer;
80                 __entry->now            = jiffies;
81         ),
82
83         TP_printk("timer %p: now %lu", __entry->timer, __entry->now)
84 );
85
86 /**
87  * timer_expire_exit - called immediately after the timer callback returns
88  * @timer:      pointer to struct timer_list
89  *
90  * When used in combination with the timer_expire_entry tracepoint we can
91  * determine the runtime of the timer callback function.
92  *
93  * NOTE: Do NOT derefernce timer in TP_fast_assign. The pointer might
94  * be invalid. We solely track the pointer.
95  */
96 TRACE_EVENT(timer_expire_exit,
97
98         TP_PROTO(struct timer_list *timer),
99
100         TP_ARGS(timer),
101
102         TP_STRUCT__entry(
103                 __field(void *, timer   )
104         ),
105
106         TP_fast_assign(
107                 __entry->timer  = timer;
108         ),
109
110         TP_printk("timer %p", __entry->timer)
111 );
112
113 /**
114  * timer_cancel - called when the timer is canceled
115  * @timer:      pointer to struct timer_list
116  */
117 TRACE_EVENT(timer_cancel,
118
119         TP_PROTO(struct timer_list *timer),
120
121         TP_ARGS(timer),
122
123         TP_STRUCT__entry(
124                 __field( void *,        timer   )
125         ),
126
127         TP_fast_assign(
128                 __entry->timer  = timer;
129         ),
130
131         TP_printk("timer %p", __entry->timer)
132 );
133
134 #endif /*  _TRACE_TIMER_H */
135
136 /* This part must be outside protection */
137 #include <trace/define_trace.h>