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