xref: /openbmc/linux/include/trace/events/sched.h (revision 557ab425)
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 
29434a83c3SIngo Molnar 	TP_printk("comm=%s pid=%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 
49434a83c3SIngo Molnar 	TP_printk("ret=%d", __entry->ret)
50ad8d75ffSSteven Rostedt );
51ad8d75ffSSteven Rostedt 
52ad8d75ffSSteven Rostedt /*
53ad8d75ffSSteven Rostedt  * Tracepoint for waking up a task:
54ad8d75ffSSteven Rostedt  */
55091ad365SIngo Molnar DECLARE_EVENT_CLASS(sched_wakeup_template,
56ad8d75ffSSteven Rostedt 
5727a9da65SPeter Zijlstra 	TP_PROTO(struct task_struct *p, int success),
58ad8d75ffSSteven Rostedt 
5927a9da65SPeter Zijlstra 	TP_ARGS(p, success),
60ad8d75ffSSteven Rostedt 
61ad8d75ffSSteven Rostedt 	TP_STRUCT__entry(
62ad8d75ffSSteven Rostedt 		__array(	char,	comm,	TASK_COMM_LEN	)
63ad8d75ffSSteven Rostedt 		__field(	pid_t,	pid			)
64ad8d75ffSSteven Rostedt 		__field(	int,	prio			)
65ad8d75ffSSteven Rostedt 		__field(	int,	success			)
66434a83c3SIngo Molnar 		__field(	int,	target_cpu		)
67ad8d75ffSSteven Rostedt 	),
68ad8d75ffSSteven Rostedt 
69ad8d75ffSSteven Rostedt 	TP_fast_assign(
70ad8d75ffSSteven Rostedt 		memcpy(__entry->comm, p->comm, TASK_COMM_LEN);
71ad8d75ffSSteven Rostedt 		__entry->pid		= p->pid;
72ad8d75ffSSteven Rostedt 		__entry->prio		= p->prio;
73ad8d75ffSSteven Rostedt 		__entry->success	= success;
74434a83c3SIngo Molnar 		__entry->target_cpu	= task_cpu(p);
75ad8d75ffSSteven Rostedt 	),
76ad8d75ffSSteven Rostedt 
77434a83c3SIngo Molnar 	TP_printk("comm=%s pid=%d prio=%d success=%d target_cpu=%03d",
78ad8d75ffSSteven Rostedt 		  __entry->comm, __entry->pid, __entry->prio,
79434a83c3SIngo Molnar 		  __entry->success, __entry->target_cpu)
80ad8d75ffSSteven Rostedt );
81ad8d75ffSSteven Rostedt 
8275ec29abSSteven Rostedt DEFINE_EVENT(sched_wakeup_template, sched_wakeup,
8327a9da65SPeter Zijlstra 	     TP_PROTO(struct task_struct *p, int success),
8427a9da65SPeter Zijlstra 	     TP_ARGS(p, success));
8575ec29abSSteven Rostedt 
86ad8d75ffSSteven Rostedt /*
87ad8d75ffSSteven Rostedt  * Tracepoint for waking up a new task:
88ad8d75ffSSteven Rostedt  */
8975ec29abSSteven Rostedt DEFINE_EVENT(sched_wakeup_template, sched_wakeup_new,
9027a9da65SPeter Zijlstra 	     TP_PROTO(struct task_struct *p, int success),
9127a9da65SPeter Zijlstra 	     TP_ARGS(p, success));
92ad8d75ffSSteven Rostedt 
9302f72694SPeter Zijlstra #ifdef CREATE_TRACE_POINTS
9402f72694SPeter Zijlstra static inline long __trace_sched_switch_state(struct task_struct *p)
9502f72694SPeter Zijlstra {
9602f72694SPeter Zijlstra 	long state = p->state;
9702f72694SPeter Zijlstra 
9802f72694SPeter Zijlstra #ifdef CONFIG_PREEMPT
9902f72694SPeter Zijlstra 	/*
10002f72694SPeter Zijlstra 	 * For all intents and purposes a preempted task is a running task.
10102f72694SPeter Zijlstra 	 */
10202f72694SPeter Zijlstra 	if (task_thread_info(p)->preempt_count & PREEMPT_ACTIVE)
103557ab425SPeter Zijlstra 		state = TASK_RUNNING | TASK_STATE_MAX;
10402f72694SPeter Zijlstra #endif
10502f72694SPeter Zijlstra 
10602f72694SPeter Zijlstra 	return state;
10702f72694SPeter Zijlstra }
10802f72694SPeter Zijlstra #endif
10902f72694SPeter Zijlstra 
110ad8d75ffSSteven Rostedt /*
111ad8d75ffSSteven Rostedt  * Tracepoint for task switches, performed by the scheduler:
112ad8d75ffSSteven Rostedt  */
113ad8d75ffSSteven Rostedt TRACE_EVENT(sched_switch,
114ad8d75ffSSteven Rostedt 
11527a9da65SPeter Zijlstra 	TP_PROTO(struct task_struct *prev,
116ad8d75ffSSteven Rostedt 		 struct task_struct *next),
117ad8d75ffSSteven Rostedt 
11827a9da65SPeter Zijlstra 	TP_ARGS(prev, next),
119ad8d75ffSSteven Rostedt 
120ad8d75ffSSteven Rostedt 	TP_STRUCT__entry(
121ad8d75ffSSteven Rostedt 		__array(	char,	prev_comm,	TASK_COMM_LEN	)
122ad8d75ffSSteven Rostedt 		__field(	pid_t,	prev_pid			)
123ad8d75ffSSteven Rostedt 		__field(	int,	prev_prio			)
124937cdb9dSSteven Rostedt 		__field(	long,	prev_state			)
125ad8d75ffSSteven Rostedt 		__array(	char,	next_comm,	TASK_COMM_LEN	)
126ad8d75ffSSteven Rostedt 		__field(	pid_t,	next_pid			)
127ad8d75ffSSteven Rostedt 		__field(	int,	next_prio			)
128ad8d75ffSSteven Rostedt 	),
129ad8d75ffSSteven Rostedt 
130ad8d75ffSSteven Rostedt 	TP_fast_assign(
131ad8d75ffSSteven Rostedt 		memcpy(__entry->next_comm, next->comm, TASK_COMM_LEN);
132ad8d75ffSSteven Rostedt 		__entry->prev_pid	= prev->pid;
133ad8d75ffSSteven Rostedt 		__entry->prev_prio	= prev->prio;
13402f72694SPeter Zijlstra 		__entry->prev_state	= __trace_sched_switch_state(prev);
135ad8d75ffSSteven Rostedt 		memcpy(__entry->prev_comm, prev->comm, TASK_COMM_LEN);
136ad8d75ffSSteven Rostedt 		__entry->next_pid	= next->pid;
137ad8d75ffSSteven Rostedt 		__entry->next_prio	= next->prio;
138ad8d75ffSSteven Rostedt 	),
139ad8d75ffSSteven Rostedt 
140557ab425SPeter Zijlstra 	TP_printk("prev_comm=%s prev_pid=%d prev_prio=%d prev_state=%s%s ==> next_comm=%s next_pid=%d next_prio=%d",
141ad8d75ffSSteven Rostedt 		__entry->prev_comm, __entry->prev_pid, __entry->prev_prio,
142557ab425SPeter Zijlstra 		__entry->prev_state & (TASK_STATE_MAX-1) ?
143557ab425SPeter Zijlstra 		  __print_flags(__entry->prev_state & (TASK_STATE_MAX-1), "|",
144937cdb9dSSteven Rostedt 				{ 1, "S"} , { 2, "D" }, { 4, "T" }, { 8, "t" },
145937cdb9dSSteven Rostedt 				{ 16, "Z" }, { 32, "X" }, { 64, "x" },
146937cdb9dSSteven Rostedt 				{ 128, "W" }) : "R",
147557ab425SPeter Zijlstra 		__entry->prev_state & TASK_STATE_MAX ? "+" : "",
148ad8d75ffSSteven Rostedt 		__entry->next_comm, __entry->next_pid, __entry->next_prio)
149ad8d75ffSSteven Rostedt );
150ad8d75ffSSteven Rostedt 
151ad8d75ffSSteven Rostedt /*
152ad8d75ffSSteven Rostedt  * Tracepoint for a task being migrated:
153ad8d75ffSSteven Rostedt  */
154ad8d75ffSSteven Rostedt TRACE_EVENT(sched_migrate_task,
155ad8d75ffSSteven Rostedt 
156de1d7286SMathieu Desnoyers 	TP_PROTO(struct task_struct *p, int dest_cpu),
157ad8d75ffSSteven Rostedt 
158de1d7286SMathieu Desnoyers 	TP_ARGS(p, dest_cpu),
159ad8d75ffSSteven Rostedt 
160ad8d75ffSSteven Rostedt 	TP_STRUCT__entry(
161ad8d75ffSSteven Rostedt 		__array(	char,	comm,	TASK_COMM_LEN	)
162ad8d75ffSSteven Rostedt 		__field(	pid_t,	pid			)
163ad8d75ffSSteven Rostedt 		__field(	int,	prio			)
164ad8d75ffSSteven Rostedt 		__field(	int,	orig_cpu		)
165ad8d75ffSSteven Rostedt 		__field(	int,	dest_cpu		)
166ad8d75ffSSteven Rostedt 	),
167ad8d75ffSSteven Rostedt 
168ad8d75ffSSteven Rostedt 	TP_fast_assign(
169ad8d75ffSSteven Rostedt 		memcpy(__entry->comm, p->comm, TASK_COMM_LEN);
170ad8d75ffSSteven Rostedt 		__entry->pid		= p->pid;
171ad8d75ffSSteven Rostedt 		__entry->prio		= p->prio;
172de1d7286SMathieu Desnoyers 		__entry->orig_cpu	= task_cpu(p);
173ad8d75ffSSteven Rostedt 		__entry->dest_cpu	= dest_cpu;
174ad8d75ffSSteven Rostedt 	),
175ad8d75ffSSteven Rostedt 
176434a83c3SIngo Molnar 	TP_printk("comm=%s pid=%d prio=%d orig_cpu=%d dest_cpu=%d",
177ad8d75ffSSteven Rostedt 		  __entry->comm, __entry->pid, __entry->prio,
178ad8d75ffSSteven Rostedt 		  __entry->orig_cpu, __entry->dest_cpu)
179ad8d75ffSSteven Rostedt );
180ad8d75ffSSteven Rostedt 
181091ad365SIngo Molnar DECLARE_EVENT_CLASS(sched_process_template,
182ad8d75ffSSteven Rostedt 
183ad8d75ffSSteven Rostedt 	TP_PROTO(struct task_struct *p),
184ad8d75ffSSteven Rostedt 
185ad8d75ffSSteven Rostedt 	TP_ARGS(p),
186ad8d75ffSSteven Rostedt 
187ad8d75ffSSteven Rostedt 	TP_STRUCT__entry(
188ad8d75ffSSteven Rostedt 		__array(	char,	comm,	TASK_COMM_LEN	)
189ad8d75ffSSteven Rostedt 		__field(	pid_t,	pid			)
190ad8d75ffSSteven Rostedt 		__field(	int,	prio			)
191ad8d75ffSSteven Rostedt 	),
192ad8d75ffSSteven Rostedt 
193ad8d75ffSSteven Rostedt 	TP_fast_assign(
194ad8d75ffSSteven Rostedt 		memcpy(__entry->comm, p->comm, TASK_COMM_LEN);
195ad8d75ffSSteven Rostedt 		__entry->pid		= p->pid;
196ad8d75ffSSteven Rostedt 		__entry->prio		= p->prio;
197ad8d75ffSSteven Rostedt 	),
198ad8d75ffSSteven Rostedt 
199434a83c3SIngo Molnar 	TP_printk("comm=%s pid=%d prio=%d",
200ad8d75ffSSteven Rostedt 		  __entry->comm, __entry->pid, __entry->prio)
201ad8d75ffSSteven Rostedt );
202ad8d75ffSSteven Rostedt 
203ad8d75ffSSteven Rostedt /*
20475ec29abSSteven Rostedt  * Tracepoint for freeing a task:
20575ec29abSSteven Rostedt  */
20675ec29abSSteven Rostedt DEFINE_EVENT(sched_process_template, sched_process_free,
20775ec29abSSteven Rostedt 	     TP_PROTO(struct task_struct *p),
20875ec29abSSteven Rostedt 	     TP_ARGS(p));
20975ec29abSSteven Rostedt 
21075ec29abSSteven Rostedt 
21175ec29abSSteven Rostedt /*
212ad8d75ffSSteven Rostedt  * Tracepoint for a task exiting:
213ad8d75ffSSteven Rostedt  */
21475ec29abSSteven Rostedt DEFINE_EVENT(sched_process_template, sched_process_exit,
215ad8d75ffSSteven Rostedt 	     TP_PROTO(struct task_struct *p),
21675ec29abSSteven Rostedt 	     TP_ARGS(p));
217ad8d75ffSSteven Rostedt 
218ad8d75ffSSteven Rostedt /*
219210f7669SLi Zefan  * Tracepoint for waiting on task to unschedule:
220210f7669SLi Zefan  */
221210f7669SLi Zefan DEFINE_EVENT(sched_process_template, sched_wait_task,
222210f7669SLi Zefan 	TP_PROTO(struct task_struct *p),
223210f7669SLi Zefan 	TP_ARGS(p));
224210f7669SLi Zefan 
225210f7669SLi Zefan /*
226ad8d75ffSSteven Rostedt  * Tracepoint for a waiting task:
227ad8d75ffSSteven Rostedt  */
228ad8d75ffSSteven Rostedt TRACE_EVENT(sched_process_wait,
229ad8d75ffSSteven Rostedt 
230ad8d75ffSSteven Rostedt 	TP_PROTO(struct pid *pid),
231ad8d75ffSSteven Rostedt 
232ad8d75ffSSteven Rostedt 	TP_ARGS(pid),
233ad8d75ffSSteven Rostedt 
234ad8d75ffSSteven Rostedt 	TP_STRUCT__entry(
235ad8d75ffSSteven Rostedt 		__array(	char,	comm,	TASK_COMM_LEN	)
236ad8d75ffSSteven Rostedt 		__field(	pid_t,	pid			)
237ad8d75ffSSteven Rostedt 		__field(	int,	prio			)
238ad8d75ffSSteven Rostedt 	),
239ad8d75ffSSteven Rostedt 
240ad8d75ffSSteven Rostedt 	TP_fast_assign(
241ad8d75ffSSteven Rostedt 		memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
242ad8d75ffSSteven Rostedt 		__entry->pid		= pid_nr(pid);
243ad8d75ffSSteven Rostedt 		__entry->prio		= current->prio;
244ad8d75ffSSteven Rostedt 	),
245ad8d75ffSSteven Rostedt 
246434a83c3SIngo Molnar 	TP_printk("comm=%s pid=%d prio=%d",
247ad8d75ffSSteven Rostedt 		  __entry->comm, __entry->pid, __entry->prio)
248ad8d75ffSSteven Rostedt );
249ad8d75ffSSteven Rostedt 
250ad8d75ffSSteven Rostedt /*
251ad8d75ffSSteven Rostedt  * Tracepoint for do_fork:
252ad8d75ffSSteven Rostedt  */
253ad8d75ffSSteven Rostedt TRACE_EVENT(sched_process_fork,
254ad8d75ffSSteven Rostedt 
255ad8d75ffSSteven Rostedt 	TP_PROTO(struct task_struct *parent, struct task_struct *child),
256ad8d75ffSSteven Rostedt 
257ad8d75ffSSteven Rostedt 	TP_ARGS(parent, child),
258ad8d75ffSSteven Rostedt 
259ad8d75ffSSteven Rostedt 	TP_STRUCT__entry(
260ad8d75ffSSteven Rostedt 		__array(	char,	parent_comm,	TASK_COMM_LEN	)
261ad8d75ffSSteven Rostedt 		__field(	pid_t,	parent_pid			)
262ad8d75ffSSteven Rostedt 		__array(	char,	child_comm,	TASK_COMM_LEN	)
263ad8d75ffSSteven Rostedt 		__field(	pid_t,	child_pid			)
264ad8d75ffSSteven Rostedt 	),
265ad8d75ffSSteven Rostedt 
266ad8d75ffSSteven Rostedt 	TP_fast_assign(
267ad8d75ffSSteven Rostedt 		memcpy(__entry->parent_comm, parent->comm, TASK_COMM_LEN);
268ad8d75ffSSteven Rostedt 		__entry->parent_pid	= parent->pid;
269ad8d75ffSSteven Rostedt 		memcpy(__entry->child_comm, child->comm, TASK_COMM_LEN);
270ad8d75ffSSteven Rostedt 		__entry->child_pid	= child->pid;
271ad8d75ffSSteven Rostedt 	),
272ad8d75ffSSteven Rostedt 
273434a83c3SIngo Molnar 	TP_printk("comm=%s pid=%d child_comm=%s child_pid=%d",
274ad8d75ffSSteven Rostedt 		__entry->parent_comm, __entry->parent_pid,
275ad8d75ffSSteven Rostedt 		__entry->child_comm, __entry->child_pid)
276ad8d75ffSSteven Rostedt );
277ad8d75ffSSteven Rostedt 
278ad8d75ffSSteven Rostedt /*
279768d0c27SPeter Zijlstra  * XXX the below sched_stat tracepoints only apply to SCHED_OTHER/BATCH/IDLE
280768d0c27SPeter Zijlstra  *     adding sched_stat support to SCHED_FIFO/RR would be welcome.
281768d0c27SPeter Zijlstra  */
282091ad365SIngo Molnar DECLARE_EVENT_CLASS(sched_stat_template,
283768d0c27SPeter Zijlstra 
284768d0c27SPeter Zijlstra 	TP_PROTO(struct task_struct *tsk, u64 delay),
285768d0c27SPeter Zijlstra 
286768d0c27SPeter Zijlstra 	TP_ARGS(tsk, delay),
287768d0c27SPeter Zijlstra 
288768d0c27SPeter Zijlstra 	TP_STRUCT__entry(
289768d0c27SPeter Zijlstra 		__array( char,	comm,	TASK_COMM_LEN	)
290768d0c27SPeter Zijlstra 		__field( pid_t,	pid			)
291768d0c27SPeter Zijlstra 		__field( u64,	delay			)
292768d0c27SPeter Zijlstra 	),
293768d0c27SPeter Zijlstra 
294768d0c27SPeter Zijlstra 	TP_fast_assign(
295768d0c27SPeter Zijlstra 		memcpy(__entry->comm, tsk->comm, TASK_COMM_LEN);
296768d0c27SPeter Zijlstra 		__entry->pid	= tsk->pid;
297768d0c27SPeter Zijlstra 		__entry->delay	= delay;
298768d0c27SPeter Zijlstra 	)
299768d0c27SPeter Zijlstra 	TP_perf_assign(
300768d0c27SPeter Zijlstra 		__perf_count(delay);
301768d0c27SPeter Zijlstra 	),
302768d0c27SPeter Zijlstra 
303434a83c3SIngo Molnar 	TP_printk("comm=%s pid=%d delay=%Lu [ns]",
304768d0c27SPeter Zijlstra 			__entry->comm, __entry->pid,
305768d0c27SPeter Zijlstra 			(unsigned long long)__entry->delay)
306768d0c27SPeter Zijlstra );
307768d0c27SPeter Zijlstra 
30875ec29abSSteven Rostedt 
30975ec29abSSteven Rostedt /*
31075ec29abSSteven Rostedt  * Tracepoint for accounting wait time (time the task is runnable
31175ec29abSSteven Rostedt  * but not actually running due to scheduler contention).
31275ec29abSSteven Rostedt  */
31375ec29abSSteven Rostedt DEFINE_EVENT(sched_stat_template, sched_stat_wait,
31475ec29abSSteven Rostedt 	     TP_PROTO(struct task_struct *tsk, u64 delay),
31575ec29abSSteven Rostedt 	     TP_ARGS(tsk, delay));
31675ec29abSSteven Rostedt 
31775ec29abSSteven Rostedt /*
31875ec29abSSteven Rostedt  * Tracepoint for accounting sleep time (time the task is not runnable,
31975ec29abSSteven Rostedt  * including iowait, see below).
32075ec29abSSteven Rostedt  */
321470dda74SLi Zefan DEFINE_EVENT(sched_stat_template, sched_stat_sleep,
32275ec29abSSteven Rostedt 	     TP_PROTO(struct task_struct *tsk, u64 delay),
323470dda74SLi Zefan 	     TP_ARGS(tsk, delay));
32475ec29abSSteven Rostedt 
32575ec29abSSteven Rostedt /*
32675ec29abSSteven Rostedt  * Tracepoint for accounting iowait time (time the task is not runnable
32775ec29abSSteven Rostedt  * due to waiting on IO to complete).
32875ec29abSSteven Rostedt  */
329470dda74SLi Zefan DEFINE_EVENT(sched_stat_template, sched_stat_iowait,
33075ec29abSSteven Rostedt 	     TP_PROTO(struct task_struct *tsk, u64 delay),
331470dda74SLi Zefan 	     TP_ARGS(tsk, delay));
33275ec29abSSteven Rostedt 
333768d0c27SPeter Zijlstra /*
334f977bb49SIngo Molnar  * Tracepoint for accounting runtime (time the task is executing
335f977bb49SIngo Molnar  * on a CPU).
336f977bb49SIngo Molnar  */
337f977bb49SIngo Molnar TRACE_EVENT(sched_stat_runtime,
338f977bb49SIngo Molnar 
339f977bb49SIngo Molnar 	TP_PROTO(struct task_struct *tsk, u64 runtime, u64 vruntime),
340f977bb49SIngo Molnar 
341f977bb49SIngo Molnar 	TP_ARGS(tsk, runtime, vruntime),
342f977bb49SIngo Molnar 
343f977bb49SIngo Molnar 	TP_STRUCT__entry(
344f977bb49SIngo Molnar 		__array( char,	comm,	TASK_COMM_LEN	)
345f977bb49SIngo Molnar 		__field( pid_t,	pid			)
346f977bb49SIngo Molnar 		__field( u64,	runtime			)
347f977bb49SIngo Molnar 		__field( u64,	vruntime			)
348f977bb49SIngo Molnar 	),
349f977bb49SIngo Molnar 
350f977bb49SIngo Molnar 	TP_fast_assign(
351f977bb49SIngo Molnar 		memcpy(__entry->comm, tsk->comm, TASK_COMM_LEN);
352f977bb49SIngo Molnar 		__entry->pid		= tsk->pid;
353f977bb49SIngo Molnar 		__entry->runtime	= runtime;
354f977bb49SIngo Molnar 		__entry->vruntime	= vruntime;
355f977bb49SIngo Molnar 	)
356f977bb49SIngo Molnar 	TP_perf_assign(
357f977bb49SIngo Molnar 		__perf_count(runtime);
358f977bb49SIngo Molnar 	),
359f977bb49SIngo Molnar 
360434a83c3SIngo Molnar 	TP_printk("comm=%s pid=%d runtime=%Lu [ns] vruntime=%Lu [ns]",
361f977bb49SIngo Molnar 			__entry->comm, __entry->pid,
362f977bb49SIngo Molnar 			(unsigned long long)__entry->runtime,
363f977bb49SIngo Molnar 			(unsigned long long)__entry->vruntime)
364f977bb49SIngo Molnar );
365f977bb49SIngo Molnar 
366a8027073SSteven Rostedt /*
367a8027073SSteven Rostedt  * Tracepoint for showing priority inheritance modifying a tasks
368a8027073SSteven Rostedt  * priority.
369a8027073SSteven Rostedt  */
370a8027073SSteven Rostedt TRACE_EVENT(sched_pi_setprio,
371a8027073SSteven Rostedt 
372a8027073SSteven Rostedt 	TP_PROTO(struct task_struct *tsk, int newprio),
373a8027073SSteven Rostedt 
374a8027073SSteven Rostedt 	TP_ARGS(tsk, newprio),
375a8027073SSteven Rostedt 
376a8027073SSteven Rostedt 	TP_STRUCT__entry(
377a8027073SSteven Rostedt 		__array( char,	comm,	TASK_COMM_LEN	)
378a8027073SSteven Rostedt 		__field( pid_t,	pid			)
379a8027073SSteven Rostedt 		__field( int,	oldprio			)
380a8027073SSteven Rostedt 		__field( int,	newprio			)
381a8027073SSteven Rostedt 	),
382a8027073SSteven Rostedt 
383a8027073SSteven Rostedt 	TP_fast_assign(
384a8027073SSteven Rostedt 		memcpy(__entry->comm, tsk->comm, TASK_COMM_LEN);
385a8027073SSteven Rostedt 		__entry->pid		= tsk->pid;
386a8027073SSteven Rostedt 		__entry->oldprio	= tsk->prio;
387a8027073SSteven Rostedt 		__entry->newprio	= newprio;
388a8027073SSteven Rostedt 	),
389a8027073SSteven Rostedt 
390a8027073SSteven Rostedt 	TP_printk("comm=%s pid=%d oldprio=%d newprio=%d",
391a8027073SSteven Rostedt 			__entry->comm, __entry->pid,
392a8027073SSteven Rostedt 			__entry->oldprio, __entry->newprio)
393a8027073SSteven Rostedt );
394a8027073SSteven Rostedt 
395ad8d75ffSSteven Rostedt #endif /* _TRACE_SCHED_H */
396ad8d75ffSSteven Rostedt 
397ad8d75ffSSteven Rostedt /* This part must be outside protection */
398ad8d75ffSSteven Rostedt #include <trace/define_trace.h>
399