xref: /openbmc/linux/include/trace/events/sched.h (revision f977bb49)
1d0b6e04aSLi Zefan #undef TRACE_SYSTEM
2d0b6e04aSLi Zefan #define TRACE_SYSTEM sched
3d0b6e04aSLi Zefan 
4ad8d75ffSSteven Rostedt #if !defined(_TRACE_SCHED_H) || defined(TRACE_HEADER_MULTI_READ)
5ad8d75ffSSteven Rostedt #define _TRACE_SCHED_H
6ad8d75ffSSteven Rostedt 
7ad8d75ffSSteven Rostedt #include <linux/sched.h>
8ad8d75ffSSteven Rostedt #include <linux/tracepoint.h>
9ad8d75ffSSteven Rostedt 
10ad8d75ffSSteven Rostedt /*
11ad8d75ffSSteven Rostedt  * Tracepoint for calling kthread_stop, performed to end a kthread:
12ad8d75ffSSteven Rostedt  */
13ad8d75ffSSteven Rostedt TRACE_EVENT(sched_kthread_stop,
14ad8d75ffSSteven Rostedt 
15ad8d75ffSSteven Rostedt 	TP_PROTO(struct task_struct *t),
16ad8d75ffSSteven Rostedt 
17ad8d75ffSSteven Rostedt 	TP_ARGS(t),
18ad8d75ffSSteven Rostedt 
19ad8d75ffSSteven Rostedt 	TP_STRUCT__entry(
20ad8d75ffSSteven Rostedt 		__array(	char,	comm,	TASK_COMM_LEN	)
21ad8d75ffSSteven Rostedt 		__field(	pid_t,	pid			)
22ad8d75ffSSteven Rostedt 	),
23ad8d75ffSSteven Rostedt 
24ad8d75ffSSteven Rostedt 	TP_fast_assign(
25ad8d75ffSSteven Rostedt 		memcpy(__entry->comm, t->comm, TASK_COMM_LEN);
26ad8d75ffSSteven Rostedt 		__entry->pid	= t->pid;
27ad8d75ffSSteven Rostedt 	),
28ad8d75ffSSteven Rostedt 
29ad8d75ffSSteven Rostedt 	TP_printk("task %s:%d", __entry->comm, __entry->pid)
30ad8d75ffSSteven Rostedt );
31ad8d75ffSSteven Rostedt 
32ad8d75ffSSteven Rostedt /*
33ad8d75ffSSteven Rostedt  * Tracepoint for the return value of the kthread stopping:
34ad8d75ffSSteven Rostedt  */
35ad8d75ffSSteven Rostedt TRACE_EVENT(sched_kthread_stop_ret,
36ad8d75ffSSteven Rostedt 
37ad8d75ffSSteven Rostedt 	TP_PROTO(int ret),
38ad8d75ffSSteven Rostedt 
39ad8d75ffSSteven Rostedt 	TP_ARGS(ret),
40ad8d75ffSSteven Rostedt 
41ad8d75ffSSteven Rostedt 	TP_STRUCT__entry(
42ad8d75ffSSteven Rostedt 		__field(	int,	ret	)
43ad8d75ffSSteven Rostedt 	),
44ad8d75ffSSteven Rostedt 
45ad8d75ffSSteven Rostedt 	TP_fast_assign(
46ad8d75ffSSteven Rostedt 		__entry->ret	= ret;
47ad8d75ffSSteven Rostedt 	),
48ad8d75ffSSteven Rostedt 
49ad8d75ffSSteven Rostedt 	TP_printk("ret %d", __entry->ret)
50ad8d75ffSSteven Rostedt );
51ad8d75ffSSteven Rostedt 
52ad8d75ffSSteven Rostedt /*
53ad8d75ffSSteven Rostedt  * Tracepoint for waiting on task to unschedule:
54ad8d75ffSSteven Rostedt  *
55ad8d75ffSSteven Rostedt  * (NOTE: the 'rq' argument is not used by generic trace events,
56ad8d75ffSSteven Rostedt  *        but used by the latency tracer plugin. )
57ad8d75ffSSteven Rostedt  */
58ad8d75ffSSteven Rostedt TRACE_EVENT(sched_wait_task,
59ad8d75ffSSteven Rostedt 
60ad8d75ffSSteven Rostedt 	TP_PROTO(struct rq *rq, struct task_struct *p),
61ad8d75ffSSteven Rostedt 
62ad8d75ffSSteven Rostedt 	TP_ARGS(rq, p),
63ad8d75ffSSteven Rostedt 
64ad8d75ffSSteven Rostedt 	TP_STRUCT__entry(
65ad8d75ffSSteven Rostedt 		__array(	char,	comm,	TASK_COMM_LEN	)
66ad8d75ffSSteven Rostedt 		__field(	pid_t,	pid			)
67ad8d75ffSSteven Rostedt 		__field(	int,	prio			)
68ad8d75ffSSteven Rostedt 	),
69ad8d75ffSSteven Rostedt 
70ad8d75ffSSteven Rostedt 	TP_fast_assign(
71ad8d75ffSSteven Rostedt 		memcpy(__entry->comm, p->comm, TASK_COMM_LEN);
72ad8d75ffSSteven Rostedt 		__entry->pid	= p->pid;
73ad8d75ffSSteven Rostedt 		__entry->prio	= p->prio;
74ad8d75ffSSteven Rostedt 	),
75ad8d75ffSSteven Rostedt 
76ad8d75ffSSteven Rostedt 	TP_printk("task %s:%d [%d]",
77ad8d75ffSSteven Rostedt 		  __entry->comm, __entry->pid, __entry->prio)
78ad8d75ffSSteven Rostedt );
79ad8d75ffSSteven Rostedt 
80ad8d75ffSSteven Rostedt /*
81ad8d75ffSSteven Rostedt  * Tracepoint for waking up a task:
82ad8d75ffSSteven Rostedt  *
83ad8d75ffSSteven Rostedt  * (NOTE: the 'rq' argument is not used by generic trace events,
84ad8d75ffSSteven Rostedt  *        but used by the latency tracer plugin. )
85ad8d75ffSSteven Rostedt  */
86ad8d75ffSSteven Rostedt TRACE_EVENT(sched_wakeup,
87ad8d75ffSSteven Rostedt 
88ad8d75ffSSteven Rostedt 	TP_PROTO(struct rq *rq, struct task_struct *p, int success),
89ad8d75ffSSteven Rostedt 
90ad8d75ffSSteven Rostedt 	TP_ARGS(rq, p, success),
91ad8d75ffSSteven Rostedt 
92ad8d75ffSSteven Rostedt 	TP_STRUCT__entry(
93ad8d75ffSSteven Rostedt 		__array(	char,	comm,	TASK_COMM_LEN	)
94ad8d75ffSSteven Rostedt 		__field(	pid_t,	pid			)
95ad8d75ffSSteven Rostedt 		__field(	int,	prio			)
96ad8d75ffSSteven Rostedt 		__field(	int,	success			)
97f0693c8bSSteven Rostedt 		__field(	int,	cpu			)
98ad8d75ffSSteven Rostedt 	),
99ad8d75ffSSteven Rostedt 
100ad8d75ffSSteven Rostedt 	TP_fast_assign(
101ad8d75ffSSteven Rostedt 		memcpy(__entry->comm, p->comm, TASK_COMM_LEN);
102ad8d75ffSSteven Rostedt 		__entry->pid		= p->pid;
103ad8d75ffSSteven Rostedt 		__entry->prio		= p->prio;
104ad8d75ffSSteven Rostedt 		__entry->success	= success;
105f0693c8bSSteven Rostedt 		__entry->cpu		= task_cpu(p);
106ad8d75ffSSteven Rostedt 	),
107ad8d75ffSSteven Rostedt 
108f0693c8bSSteven Rostedt 	TP_printk("task %s:%d [%d] success=%d [%03d]",
109ad8d75ffSSteven Rostedt 		  __entry->comm, __entry->pid, __entry->prio,
110f0693c8bSSteven Rostedt 		  __entry->success, __entry->cpu)
111ad8d75ffSSteven Rostedt );
112ad8d75ffSSteven Rostedt 
113ad8d75ffSSteven Rostedt /*
114ad8d75ffSSteven Rostedt  * Tracepoint for waking up a new task:
115ad8d75ffSSteven Rostedt  *
116ad8d75ffSSteven Rostedt  * (NOTE: the 'rq' argument is not used by generic trace events,
117ad8d75ffSSteven Rostedt  *        but used by the latency tracer plugin. )
118ad8d75ffSSteven Rostedt  */
119ad8d75ffSSteven Rostedt TRACE_EVENT(sched_wakeup_new,
120ad8d75ffSSteven Rostedt 
121ad8d75ffSSteven Rostedt 	TP_PROTO(struct rq *rq, struct task_struct *p, int success),
122ad8d75ffSSteven Rostedt 
123ad8d75ffSSteven Rostedt 	TP_ARGS(rq, p, success),
124ad8d75ffSSteven Rostedt 
125ad8d75ffSSteven Rostedt 	TP_STRUCT__entry(
126ad8d75ffSSteven Rostedt 		__array(	char,	comm,	TASK_COMM_LEN	)
127ad8d75ffSSteven Rostedt 		__field(	pid_t,	pid			)
128ad8d75ffSSteven Rostedt 		__field(	int,	prio			)
129ad8d75ffSSteven Rostedt 		__field(	int,	success			)
130f0693c8bSSteven Rostedt 		__field(	int,	cpu			)
131ad8d75ffSSteven Rostedt 	),
132ad8d75ffSSteven Rostedt 
133ad8d75ffSSteven Rostedt 	TP_fast_assign(
134ad8d75ffSSteven Rostedt 		memcpy(__entry->comm, p->comm, TASK_COMM_LEN);
135ad8d75ffSSteven Rostedt 		__entry->pid		= p->pid;
136ad8d75ffSSteven Rostedt 		__entry->prio		= p->prio;
137ad8d75ffSSteven Rostedt 		__entry->success	= success;
138f0693c8bSSteven Rostedt 		__entry->cpu		= task_cpu(p);
139ad8d75ffSSteven Rostedt 	),
140ad8d75ffSSteven Rostedt 
141f0693c8bSSteven Rostedt 	TP_printk("task %s:%d [%d] success=%d [%03d]",
142ad8d75ffSSteven Rostedt 		  __entry->comm, __entry->pid, __entry->prio,
143f0693c8bSSteven Rostedt 		  __entry->success, __entry->cpu)
144ad8d75ffSSteven Rostedt );
145ad8d75ffSSteven Rostedt 
146ad8d75ffSSteven Rostedt /*
147ad8d75ffSSteven Rostedt  * Tracepoint for task switches, performed by the scheduler:
148ad8d75ffSSteven Rostedt  *
149ad8d75ffSSteven Rostedt  * (NOTE: the 'rq' argument is not used by generic trace events,
150ad8d75ffSSteven Rostedt  *        but used by the latency tracer plugin. )
151ad8d75ffSSteven Rostedt  */
152ad8d75ffSSteven Rostedt TRACE_EVENT(sched_switch,
153ad8d75ffSSteven Rostedt 
154ad8d75ffSSteven Rostedt 	TP_PROTO(struct rq *rq, struct task_struct *prev,
155ad8d75ffSSteven Rostedt 		 struct task_struct *next),
156ad8d75ffSSteven Rostedt 
157ad8d75ffSSteven Rostedt 	TP_ARGS(rq, prev, next),
158ad8d75ffSSteven Rostedt 
159ad8d75ffSSteven Rostedt 	TP_STRUCT__entry(
160ad8d75ffSSteven Rostedt 		__array(	char,	prev_comm,	TASK_COMM_LEN	)
161ad8d75ffSSteven Rostedt 		__field(	pid_t,	prev_pid			)
162ad8d75ffSSteven Rostedt 		__field(	int,	prev_prio			)
163937cdb9dSSteven Rostedt 		__field(	long,	prev_state			)
164ad8d75ffSSteven Rostedt 		__array(	char,	next_comm,	TASK_COMM_LEN	)
165ad8d75ffSSteven Rostedt 		__field(	pid_t,	next_pid			)
166ad8d75ffSSteven Rostedt 		__field(	int,	next_prio			)
167ad8d75ffSSteven Rostedt 	),
168ad8d75ffSSteven Rostedt 
169ad8d75ffSSteven Rostedt 	TP_fast_assign(
170ad8d75ffSSteven Rostedt 		memcpy(__entry->next_comm, next->comm, TASK_COMM_LEN);
171ad8d75ffSSteven Rostedt 		__entry->prev_pid	= prev->pid;
172ad8d75ffSSteven Rostedt 		__entry->prev_prio	= prev->prio;
173937cdb9dSSteven Rostedt 		__entry->prev_state	= prev->state;
174ad8d75ffSSteven Rostedt 		memcpy(__entry->prev_comm, prev->comm, TASK_COMM_LEN);
175ad8d75ffSSteven Rostedt 		__entry->next_pid	= next->pid;
176ad8d75ffSSteven Rostedt 		__entry->next_prio	= next->prio;
177ad8d75ffSSteven Rostedt 	),
178ad8d75ffSSteven Rostedt 
179937cdb9dSSteven Rostedt 	TP_printk("task %s:%d [%d] (%s) ==> %s:%d [%d]",
180ad8d75ffSSteven Rostedt 		__entry->prev_comm, __entry->prev_pid, __entry->prev_prio,
181937cdb9dSSteven Rostedt 		__entry->prev_state ?
182937cdb9dSSteven Rostedt 		  __print_flags(__entry->prev_state, "|",
183937cdb9dSSteven Rostedt 				{ 1, "S"} , { 2, "D" }, { 4, "T" }, { 8, "t" },
184937cdb9dSSteven Rostedt 				{ 16, "Z" }, { 32, "X" }, { 64, "x" },
185937cdb9dSSteven Rostedt 				{ 128, "W" }) : "R",
186ad8d75ffSSteven Rostedt 		__entry->next_comm, __entry->next_pid, __entry->next_prio)
187ad8d75ffSSteven Rostedt );
188ad8d75ffSSteven Rostedt 
189ad8d75ffSSteven Rostedt /*
190ad8d75ffSSteven Rostedt  * Tracepoint for a task being migrated:
191ad8d75ffSSteven Rostedt  */
192ad8d75ffSSteven Rostedt TRACE_EVENT(sched_migrate_task,
193ad8d75ffSSteven Rostedt 
194de1d7286SMathieu Desnoyers 	TP_PROTO(struct task_struct *p, int dest_cpu),
195ad8d75ffSSteven Rostedt 
196de1d7286SMathieu Desnoyers 	TP_ARGS(p, dest_cpu),
197ad8d75ffSSteven Rostedt 
198ad8d75ffSSteven Rostedt 	TP_STRUCT__entry(
199ad8d75ffSSteven Rostedt 		__array(	char,	comm,	TASK_COMM_LEN	)
200ad8d75ffSSteven Rostedt 		__field(	pid_t,	pid			)
201ad8d75ffSSteven Rostedt 		__field(	int,	prio			)
202ad8d75ffSSteven Rostedt 		__field(	int,	orig_cpu		)
203ad8d75ffSSteven Rostedt 		__field(	int,	dest_cpu		)
204ad8d75ffSSteven Rostedt 	),
205ad8d75ffSSteven Rostedt 
206ad8d75ffSSteven Rostedt 	TP_fast_assign(
207ad8d75ffSSteven Rostedt 		memcpy(__entry->comm, p->comm, TASK_COMM_LEN);
208ad8d75ffSSteven Rostedt 		__entry->pid		= p->pid;
209ad8d75ffSSteven Rostedt 		__entry->prio		= p->prio;
210de1d7286SMathieu Desnoyers 		__entry->orig_cpu	= task_cpu(p);
211ad8d75ffSSteven Rostedt 		__entry->dest_cpu	= dest_cpu;
212ad8d75ffSSteven Rostedt 	),
213ad8d75ffSSteven Rostedt 
214ad8d75ffSSteven Rostedt 	TP_printk("task %s:%d [%d] from: %d  to: %d",
215ad8d75ffSSteven Rostedt 		  __entry->comm, __entry->pid, __entry->prio,
216ad8d75ffSSteven Rostedt 		  __entry->orig_cpu, __entry->dest_cpu)
217ad8d75ffSSteven Rostedt );
218ad8d75ffSSteven Rostedt 
219ad8d75ffSSteven Rostedt /*
220ad8d75ffSSteven Rostedt  * Tracepoint for freeing a task:
221ad8d75ffSSteven Rostedt  */
222ad8d75ffSSteven Rostedt TRACE_EVENT(sched_process_free,
223ad8d75ffSSteven Rostedt 
224ad8d75ffSSteven Rostedt 	TP_PROTO(struct task_struct *p),
225ad8d75ffSSteven Rostedt 
226ad8d75ffSSteven Rostedt 	TP_ARGS(p),
227ad8d75ffSSteven Rostedt 
228ad8d75ffSSteven Rostedt 	TP_STRUCT__entry(
229ad8d75ffSSteven Rostedt 		__array(	char,	comm,	TASK_COMM_LEN	)
230ad8d75ffSSteven Rostedt 		__field(	pid_t,	pid			)
231ad8d75ffSSteven Rostedt 		__field(	int,	prio			)
232ad8d75ffSSteven Rostedt 	),
233ad8d75ffSSteven Rostedt 
234ad8d75ffSSteven Rostedt 	TP_fast_assign(
235ad8d75ffSSteven Rostedt 		memcpy(__entry->comm, p->comm, TASK_COMM_LEN);
236ad8d75ffSSteven Rostedt 		__entry->pid		= p->pid;
237ad8d75ffSSteven Rostedt 		__entry->prio		= p->prio;
238ad8d75ffSSteven Rostedt 	),
239ad8d75ffSSteven Rostedt 
240ad8d75ffSSteven Rostedt 	TP_printk("task %s:%d [%d]",
241ad8d75ffSSteven Rostedt 		  __entry->comm, __entry->pid, __entry->prio)
242ad8d75ffSSteven Rostedt );
243ad8d75ffSSteven Rostedt 
244ad8d75ffSSteven Rostedt /*
245ad8d75ffSSteven Rostedt  * Tracepoint for a task exiting:
246ad8d75ffSSteven Rostedt  */
247ad8d75ffSSteven Rostedt TRACE_EVENT(sched_process_exit,
248ad8d75ffSSteven Rostedt 
249ad8d75ffSSteven Rostedt 	TP_PROTO(struct task_struct *p),
250ad8d75ffSSteven Rostedt 
251ad8d75ffSSteven Rostedt 	TP_ARGS(p),
252ad8d75ffSSteven Rostedt 
253ad8d75ffSSteven Rostedt 	TP_STRUCT__entry(
254ad8d75ffSSteven Rostedt 		__array(	char,	comm,	TASK_COMM_LEN	)
255ad8d75ffSSteven Rostedt 		__field(	pid_t,	pid			)
256ad8d75ffSSteven Rostedt 		__field(	int,	prio			)
257ad8d75ffSSteven Rostedt 	),
258ad8d75ffSSteven Rostedt 
259ad8d75ffSSteven Rostedt 	TP_fast_assign(
260ad8d75ffSSteven Rostedt 		memcpy(__entry->comm, p->comm, TASK_COMM_LEN);
261ad8d75ffSSteven Rostedt 		__entry->pid		= p->pid;
262ad8d75ffSSteven Rostedt 		__entry->prio		= p->prio;
263ad8d75ffSSteven Rostedt 	),
264ad8d75ffSSteven Rostedt 
265ad8d75ffSSteven Rostedt 	TP_printk("task %s:%d [%d]",
266ad8d75ffSSteven Rostedt 		  __entry->comm, __entry->pid, __entry->prio)
267ad8d75ffSSteven Rostedt );
268ad8d75ffSSteven Rostedt 
269ad8d75ffSSteven Rostedt /*
270ad8d75ffSSteven Rostedt  * Tracepoint for a waiting task:
271ad8d75ffSSteven Rostedt  */
272ad8d75ffSSteven Rostedt TRACE_EVENT(sched_process_wait,
273ad8d75ffSSteven Rostedt 
274ad8d75ffSSteven Rostedt 	TP_PROTO(struct pid *pid),
275ad8d75ffSSteven Rostedt 
276ad8d75ffSSteven Rostedt 	TP_ARGS(pid),
277ad8d75ffSSteven Rostedt 
278ad8d75ffSSteven Rostedt 	TP_STRUCT__entry(
279ad8d75ffSSteven Rostedt 		__array(	char,	comm,	TASK_COMM_LEN	)
280ad8d75ffSSteven Rostedt 		__field(	pid_t,	pid			)
281ad8d75ffSSteven Rostedt 		__field(	int,	prio			)
282ad8d75ffSSteven Rostedt 	),
283ad8d75ffSSteven Rostedt 
284ad8d75ffSSteven Rostedt 	TP_fast_assign(
285ad8d75ffSSteven Rostedt 		memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
286ad8d75ffSSteven Rostedt 		__entry->pid		= pid_nr(pid);
287ad8d75ffSSteven Rostedt 		__entry->prio		= current->prio;
288ad8d75ffSSteven Rostedt 	),
289ad8d75ffSSteven Rostedt 
290ad8d75ffSSteven Rostedt 	TP_printk("task %s:%d [%d]",
291ad8d75ffSSteven Rostedt 		  __entry->comm, __entry->pid, __entry->prio)
292ad8d75ffSSteven Rostedt );
293ad8d75ffSSteven Rostedt 
294ad8d75ffSSteven Rostedt /*
295ad8d75ffSSteven Rostedt  * Tracepoint for do_fork:
296ad8d75ffSSteven Rostedt  */
297ad8d75ffSSteven Rostedt TRACE_EVENT(sched_process_fork,
298ad8d75ffSSteven Rostedt 
299ad8d75ffSSteven Rostedt 	TP_PROTO(struct task_struct *parent, struct task_struct *child),
300ad8d75ffSSteven Rostedt 
301ad8d75ffSSteven Rostedt 	TP_ARGS(parent, child),
302ad8d75ffSSteven Rostedt 
303ad8d75ffSSteven Rostedt 	TP_STRUCT__entry(
304ad8d75ffSSteven Rostedt 		__array(	char,	parent_comm,	TASK_COMM_LEN	)
305ad8d75ffSSteven Rostedt 		__field(	pid_t,	parent_pid			)
306ad8d75ffSSteven Rostedt 		__array(	char,	child_comm,	TASK_COMM_LEN	)
307ad8d75ffSSteven Rostedt 		__field(	pid_t,	child_pid			)
308ad8d75ffSSteven Rostedt 	),
309ad8d75ffSSteven Rostedt 
310ad8d75ffSSteven Rostedt 	TP_fast_assign(
311ad8d75ffSSteven Rostedt 		memcpy(__entry->parent_comm, parent->comm, TASK_COMM_LEN);
312ad8d75ffSSteven Rostedt 		__entry->parent_pid	= parent->pid;
313ad8d75ffSSteven Rostedt 		memcpy(__entry->child_comm, child->comm, TASK_COMM_LEN);
314ad8d75ffSSteven Rostedt 		__entry->child_pid	= child->pid;
315ad8d75ffSSteven Rostedt 	),
316ad8d75ffSSteven Rostedt 
317ad8d75ffSSteven Rostedt 	TP_printk("parent %s:%d  child %s:%d",
318ad8d75ffSSteven Rostedt 		__entry->parent_comm, __entry->parent_pid,
319ad8d75ffSSteven Rostedt 		__entry->child_comm, __entry->child_pid)
320ad8d75ffSSteven Rostedt );
321ad8d75ffSSteven Rostedt 
322ad8d75ffSSteven Rostedt /*
323ad8d75ffSSteven Rostedt  * Tracepoint for sending a signal:
324ad8d75ffSSteven Rostedt  */
325ad8d75ffSSteven Rostedt TRACE_EVENT(sched_signal_send,
326ad8d75ffSSteven Rostedt 
327ad8d75ffSSteven Rostedt 	TP_PROTO(int sig, struct task_struct *p),
328ad8d75ffSSteven Rostedt 
329ad8d75ffSSteven Rostedt 	TP_ARGS(sig, p),
330ad8d75ffSSteven Rostedt 
331ad8d75ffSSteven Rostedt 	TP_STRUCT__entry(
332ad8d75ffSSteven Rostedt 		__field(	int,	sig			)
333ad8d75ffSSteven Rostedt 		__array(	char,	comm,	TASK_COMM_LEN	)
334ad8d75ffSSteven Rostedt 		__field(	pid_t,	pid			)
335ad8d75ffSSteven Rostedt 	),
336ad8d75ffSSteven Rostedt 
337ad8d75ffSSteven Rostedt 	TP_fast_assign(
338ad8d75ffSSteven Rostedt 		memcpy(__entry->comm, p->comm, TASK_COMM_LEN);
339ad8d75ffSSteven Rostedt 		__entry->pid	= p->pid;
340ad8d75ffSSteven Rostedt 		__entry->sig	= sig;
341ad8d75ffSSteven Rostedt 	),
342ad8d75ffSSteven Rostedt 
343ad8d75ffSSteven Rostedt 	TP_printk("sig: %d  task %s:%d",
344ad8d75ffSSteven Rostedt 		  __entry->sig, __entry->comm, __entry->pid)
345ad8d75ffSSteven Rostedt );
346ad8d75ffSSteven Rostedt 
347768d0c27SPeter Zijlstra /*
348768d0c27SPeter Zijlstra  * XXX the below sched_stat tracepoints only apply to SCHED_OTHER/BATCH/IDLE
349768d0c27SPeter Zijlstra  *     adding sched_stat support to SCHED_FIFO/RR would be welcome.
350768d0c27SPeter Zijlstra  */
351768d0c27SPeter Zijlstra 
352768d0c27SPeter Zijlstra /*
353768d0c27SPeter Zijlstra  * Tracepoint for accounting wait time (time the task is runnable
354768d0c27SPeter Zijlstra  * but not actually running due to scheduler contention).
355768d0c27SPeter Zijlstra  */
356768d0c27SPeter Zijlstra TRACE_EVENT(sched_stat_wait,
357768d0c27SPeter Zijlstra 
358768d0c27SPeter Zijlstra 	TP_PROTO(struct task_struct *tsk, u64 delay),
359768d0c27SPeter Zijlstra 
360768d0c27SPeter Zijlstra 	TP_ARGS(tsk, delay),
361768d0c27SPeter Zijlstra 
362768d0c27SPeter Zijlstra 	TP_STRUCT__entry(
363768d0c27SPeter Zijlstra 		__array( char,	comm,	TASK_COMM_LEN	)
364768d0c27SPeter Zijlstra 		__field( pid_t,	pid			)
365768d0c27SPeter Zijlstra 		__field( u64,	delay			)
366768d0c27SPeter Zijlstra 	),
367768d0c27SPeter Zijlstra 
368768d0c27SPeter Zijlstra 	TP_fast_assign(
369768d0c27SPeter Zijlstra 		memcpy(__entry->comm, tsk->comm, TASK_COMM_LEN);
370768d0c27SPeter Zijlstra 		__entry->pid	= tsk->pid;
371768d0c27SPeter Zijlstra 		__entry->delay	= delay;
372768d0c27SPeter Zijlstra 	)
373768d0c27SPeter Zijlstra 	TP_perf_assign(
374768d0c27SPeter Zijlstra 		__perf_count(delay);
375768d0c27SPeter Zijlstra 	),
376768d0c27SPeter Zijlstra 
377768d0c27SPeter Zijlstra 	TP_printk("task: %s:%d wait: %Lu [ns]",
378768d0c27SPeter Zijlstra 			__entry->comm, __entry->pid,
379768d0c27SPeter Zijlstra 			(unsigned long long)__entry->delay)
380768d0c27SPeter Zijlstra );
381768d0c27SPeter Zijlstra 
382768d0c27SPeter Zijlstra /*
383f977bb49SIngo Molnar  * Tracepoint for accounting runtime (time the task is executing
384f977bb49SIngo Molnar  * on a CPU).
385f977bb49SIngo Molnar  */
386f977bb49SIngo Molnar TRACE_EVENT(sched_stat_runtime,
387f977bb49SIngo Molnar 
388f977bb49SIngo Molnar 	TP_PROTO(struct task_struct *tsk, u64 runtime, u64 vruntime),
389f977bb49SIngo Molnar 
390f977bb49SIngo Molnar 	TP_ARGS(tsk, runtime, vruntime),
391f977bb49SIngo Molnar 
392f977bb49SIngo Molnar 	TP_STRUCT__entry(
393f977bb49SIngo Molnar 		__array( char,	comm,	TASK_COMM_LEN	)
394f977bb49SIngo Molnar 		__field( pid_t,	pid			)
395f977bb49SIngo Molnar 		__field( u64,	runtime			)
396f977bb49SIngo Molnar 		__field( u64,	vruntime			)
397f977bb49SIngo Molnar 	),
398f977bb49SIngo Molnar 
399f977bb49SIngo Molnar 	TP_fast_assign(
400f977bb49SIngo Molnar 		memcpy(__entry->comm, tsk->comm, TASK_COMM_LEN);
401f977bb49SIngo Molnar 		__entry->pid		= tsk->pid;
402f977bb49SIngo Molnar 		__entry->runtime	= runtime;
403f977bb49SIngo Molnar 		__entry->vruntime	= vruntime;
404f977bb49SIngo Molnar 	)
405f977bb49SIngo Molnar 	TP_perf_assign(
406f977bb49SIngo Molnar 		__perf_count(runtime);
407f977bb49SIngo Molnar 	),
408f977bb49SIngo Molnar 
409f977bb49SIngo Molnar 	TP_printk("task: %s:%d runtime: %Lu [ns], vruntime: %Lu [ns]",
410f977bb49SIngo Molnar 			__entry->comm, __entry->pid,
411f977bb49SIngo Molnar 			(unsigned long long)__entry->runtime,
412f977bb49SIngo Molnar 			(unsigned long long)__entry->vruntime)
413f977bb49SIngo Molnar );
414f977bb49SIngo Molnar 
415f977bb49SIngo Molnar /*
416768d0c27SPeter Zijlstra  * Tracepoint for accounting sleep time (time the task is not runnable,
417768d0c27SPeter Zijlstra  * including iowait, see below).
418768d0c27SPeter Zijlstra  */
419768d0c27SPeter Zijlstra TRACE_EVENT(sched_stat_sleep,
420768d0c27SPeter Zijlstra 
421768d0c27SPeter Zijlstra 	TP_PROTO(struct task_struct *tsk, u64 delay),
422768d0c27SPeter Zijlstra 
423768d0c27SPeter Zijlstra 	TP_ARGS(tsk, delay),
424768d0c27SPeter Zijlstra 
425768d0c27SPeter Zijlstra 	TP_STRUCT__entry(
426768d0c27SPeter Zijlstra 		__array( char,	comm,	TASK_COMM_LEN	)
427768d0c27SPeter Zijlstra 		__field( pid_t,	pid			)
428768d0c27SPeter Zijlstra 		__field( u64,	delay			)
429768d0c27SPeter Zijlstra 	),
430768d0c27SPeter Zijlstra 
431768d0c27SPeter Zijlstra 	TP_fast_assign(
432768d0c27SPeter Zijlstra 		memcpy(__entry->comm, tsk->comm, TASK_COMM_LEN);
433768d0c27SPeter Zijlstra 		__entry->pid	= tsk->pid;
434768d0c27SPeter Zijlstra 		__entry->delay	= delay;
435768d0c27SPeter Zijlstra 	)
436768d0c27SPeter Zijlstra 	TP_perf_assign(
437768d0c27SPeter Zijlstra 		__perf_count(delay);
438768d0c27SPeter Zijlstra 	),
439768d0c27SPeter Zijlstra 
440768d0c27SPeter Zijlstra 	TP_printk("task: %s:%d sleep: %Lu [ns]",
441768d0c27SPeter Zijlstra 			__entry->comm, __entry->pid,
442768d0c27SPeter Zijlstra 			(unsigned long long)__entry->delay)
443768d0c27SPeter Zijlstra );
444768d0c27SPeter Zijlstra 
445768d0c27SPeter Zijlstra /*
446768d0c27SPeter Zijlstra  * Tracepoint for accounting iowait time (time the task is not runnable
447768d0c27SPeter Zijlstra  * due to waiting on IO to complete).
448768d0c27SPeter Zijlstra  */
449768d0c27SPeter Zijlstra TRACE_EVENT(sched_stat_iowait,
450768d0c27SPeter Zijlstra 
451768d0c27SPeter Zijlstra 	TP_PROTO(struct task_struct *tsk, u64 delay),
452768d0c27SPeter Zijlstra 
453768d0c27SPeter Zijlstra 	TP_ARGS(tsk, delay),
454768d0c27SPeter Zijlstra 
455768d0c27SPeter Zijlstra 	TP_STRUCT__entry(
456768d0c27SPeter Zijlstra 		__array( char,	comm,	TASK_COMM_LEN	)
457768d0c27SPeter Zijlstra 		__field( pid_t,	pid			)
458768d0c27SPeter Zijlstra 		__field( u64,	delay			)
459768d0c27SPeter Zijlstra 	),
460768d0c27SPeter Zijlstra 
461768d0c27SPeter Zijlstra 	TP_fast_assign(
462768d0c27SPeter Zijlstra 		memcpy(__entry->comm, tsk->comm, TASK_COMM_LEN);
463768d0c27SPeter Zijlstra 		__entry->pid	= tsk->pid;
464768d0c27SPeter Zijlstra 		__entry->delay	= delay;
465768d0c27SPeter Zijlstra 	)
466768d0c27SPeter Zijlstra 	TP_perf_assign(
467768d0c27SPeter Zijlstra 		__perf_count(delay);
468768d0c27SPeter Zijlstra 	),
469768d0c27SPeter Zijlstra 
470768d0c27SPeter Zijlstra 	TP_printk("task: %s:%d iowait: %Lu [ns]",
471768d0c27SPeter Zijlstra 			__entry->comm, __entry->pid,
472768d0c27SPeter Zijlstra 			(unsigned long long)__entry->delay)
473768d0c27SPeter Zijlstra );
474768d0c27SPeter Zijlstra 
475ad8d75ffSSteven Rostedt #endif /* _TRACE_SCHED_H */
476ad8d75ffSSteven Rostedt 
477ad8d75ffSSteven Rostedt /* This part must be outside protection */
478ad8d75ffSSteven Rostedt #include <trace/define_trace.h>
479