xref: /openbmc/linux/include/trace/events/workqueue.h (revision 4f2c0a4acffbec01079c28f839422e64ddeff004)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
2e36c886aSArjan van de Ven #undef TRACE_SYSTEM
3e36c886aSArjan van de Ven #define TRACE_SYSTEM workqueue
4e36c886aSArjan van de Ven 
5e36c886aSArjan van de Ven #if !defined(_TRACE_WORKQUEUE_H) || defined(TRACE_HEADER_MULTI_READ)
6e36c886aSArjan van de Ven #define _TRACE_WORKQUEUE_H
7e36c886aSArjan van de Ven 
8e36c886aSArjan van de Ven #include <linux/tracepoint.h>
9e36c886aSArjan van de Ven #include <linux/workqueue.h>
10e36c886aSArjan van de Ven 
111cdae042SAhbong Chang struct pool_workqueue;
121cdae042SAhbong Chang 
13e36c886aSArjan van de Ven /**
14cdadf009STejun Heo  * workqueue_queue_work - called when a work gets queued
15cdadf009STejun Heo  * @req_cpu:	the requested cpu
16112202d9STejun Heo  * @pwq:	pointer to struct pool_workqueue
17cdadf009STejun Heo  * @work:	pointer to struct work_struct
18cdadf009STejun Heo  *
19cdadf009STejun Heo  * This event occurs when a work is queued immediately or once a
20cdadf009STejun Heo  * delayed work is actually queued on a workqueue (ie: once the delay
21cdadf009STejun Heo  * has been reached).
22cdadf009STejun Heo  */
23cdadf009STejun Heo TRACE_EVENT(workqueue_queue_work,
24cdadf009STejun Heo 
25*873a4009SWonhyuk Yang 	TP_PROTO(int req_cpu, struct pool_workqueue *pwq,
26cdadf009STejun Heo 		 struct work_struct *work),
27cdadf009STejun Heo 
28112202d9STejun Heo 	TP_ARGS(req_cpu, pwq, work),
29cdadf009STejun Heo 
30cdadf009STejun Heo 	TP_STRUCT__entry(
31cdadf009STejun Heo 		__field( void *,	work	)
32cdadf009STejun Heo 		__field( void *,	function)
3383b62687SSteven Rostedt (VMware) 		__string( workqueue,	pwq->wq->name)
34*873a4009SWonhyuk Yang 		__field( int,	req_cpu	)
35*873a4009SWonhyuk Yang 		__field( int,	cpu	)
36cdadf009STejun Heo 	),
37cdadf009STejun Heo 
38cdadf009STejun Heo 	TP_fast_assign(
39cdadf009STejun Heo 		__entry->work		= work;
40cdadf009STejun Heo 		__entry->function	= work->func;
4183b62687SSteven Rostedt (VMware) 		__assign_str(workqueue, pwq->wq->name);
42cdadf009STejun Heo 		__entry->req_cpu	= req_cpu;
43112202d9STejun Heo 		__entry->cpu		= pwq->pool->cpu;
44cdadf009STejun Heo 	),
45cdadf009STejun Heo 
46*873a4009SWonhyuk Yang 	TP_printk("work struct=%p function=%ps workqueue=%s req_cpu=%d cpu=%d",
4783b62687SSteven Rostedt (VMware) 		  __entry->work, __entry->function, __get_str(workqueue),
48cdadf009STejun Heo 		  __entry->req_cpu, __entry->cpu)
49cdadf009STejun Heo );
50cdadf009STejun Heo 
51cdadf009STejun Heo /**
52cdadf009STejun Heo  * workqueue_activate_work - called when a work gets activated
53cdadf009STejun Heo  * @work:	pointer to struct work_struct
54cdadf009STejun Heo  *
55cdadf009STejun Heo  * This event occurs when a queued work is put on the active queue,
56cdadf009STejun Heo  * which happens immediately after queueing unless @max_active limit
57cdadf009STejun Heo  * is reached.
58cdadf009STejun Heo  */
59e8ab20d9SDaniel Jordan TRACE_EVENT(workqueue_activate_work,
60cdadf009STejun Heo 
61cdadf009STejun Heo 	TP_PROTO(struct work_struct *work),
62cdadf009STejun Heo 
63e8ab20d9SDaniel Jordan 	TP_ARGS(work),
64e8ab20d9SDaniel Jordan 
65e8ab20d9SDaniel Jordan 	TP_STRUCT__entry(
66e8ab20d9SDaniel Jordan 		__field( void *,	work	)
67e8ab20d9SDaniel Jordan 	),
68e8ab20d9SDaniel Jordan 
69e8ab20d9SDaniel Jordan 	TP_fast_assign(
70e8ab20d9SDaniel Jordan 		__entry->work		= work;
71e8ab20d9SDaniel Jordan 	),
72e8ab20d9SDaniel Jordan 
73e8ab20d9SDaniel Jordan 	TP_printk("work struct %p", __entry->work)
74cdadf009STejun Heo );
75cdadf009STejun Heo 
76cdadf009STejun Heo /**
77e36c886aSArjan van de Ven  * workqueue_execute_start - called immediately before the workqueue callback
78e36c886aSArjan van de Ven  * @work:	pointer to struct work_struct
79e36c886aSArjan van de Ven  *
80e36c886aSArjan van de Ven  * Allows to track workqueue execution.
81e36c886aSArjan van de Ven  */
82e36c886aSArjan van de Ven TRACE_EVENT(workqueue_execute_start,
83e36c886aSArjan van de Ven 
84e36c886aSArjan van de Ven 	TP_PROTO(struct work_struct *work),
85e36c886aSArjan van de Ven 
86e36c886aSArjan van de Ven 	TP_ARGS(work),
87e36c886aSArjan van de Ven 
88e36c886aSArjan van de Ven 	TP_STRUCT__entry(
89e36c886aSArjan van de Ven 		__field( void *,	work	)
90e36c886aSArjan van de Ven 		__field( void *,	function)
91e36c886aSArjan van de Ven 	),
92e36c886aSArjan van de Ven 
93e36c886aSArjan van de Ven 	TP_fast_assign(
94e36c886aSArjan van de Ven 		__entry->work		= work;
95e36c886aSArjan van de Ven 		__entry->function	= work->func;
96e36c886aSArjan van de Ven 	),
97e36c886aSArjan van de Ven 
98d75f773cSSakari Ailus 	TP_printk("work struct %p: function %ps", __entry->work, __entry->function)
99e36c886aSArjan van de Ven );
100e36c886aSArjan van de Ven 
101e36c886aSArjan van de Ven /**
102b3aa1584SStephen Boyd  * workqueue_execute_end - called immediately after the workqueue callback
103e36c886aSArjan van de Ven  * @work:	pointer to struct work_struct
1041c5da0ecSDaniel Jordan  * @function:   pointer to worker function
105e36c886aSArjan van de Ven  *
106e36c886aSArjan van de Ven  * Allows to track workqueue execution.
107e36c886aSArjan van de Ven  */
1081c5da0ecSDaniel Jordan TRACE_EVENT(workqueue_execute_end,
109e36c886aSArjan van de Ven 
1101c5da0ecSDaniel Jordan 	TP_PROTO(struct work_struct *work, work_func_t function),
111e36c886aSArjan van de Ven 
1121c5da0ecSDaniel Jordan 	TP_ARGS(work, function),
1131c5da0ecSDaniel Jordan 
1141c5da0ecSDaniel Jordan 	TP_STRUCT__entry(
1151c5da0ecSDaniel Jordan 		__field( void *,	work	)
1161c5da0ecSDaniel Jordan 		__field( void *,	function)
1171c5da0ecSDaniel Jordan 	),
1181c5da0ecSDaniel Jordan 
1191c5da0ecSDaniel Jordan 	TP_fast_assign(
1201c5da0ecSDaniel Jordan 		__entry->work		= work;
1211c5da0ecSDaniel Jordan 		__entry->function	= function;
1221c5da0ecSDaniel Jordan 	),
1231c5da0ecSDaniel Jordan 
1241c5da0ecSDaniel Jordan 	TP_printk("work struct %p: function %ps", __entry->work, __entry->function)
125e36c886aSArjan van de Ven );
126e36c886aSArjan van de Ven 
127e36c886aSArjan van de Ven #endif /*  _TRACE_WORKQUEUE_H */
128e36c886aSArjan van de Ven 
129e36c886aSArjan van de Ven /* This part must be outside protection */
130e36c886aSArjan van de Ven #include <trace/define_trace.h>
131