Blame view

include/trace/events/sched.h 12.8 KB
d0b6e04a4   Li Zefan   tracing/events: M...
1
2
  #undef TRACE_SYSTEM
  #define TRACE_SYSTEM sched
ea20d9293   Steven Rostedt   tracing: consolid...
3
  #if !defined(_TRACE_SCHED_H) || defined(TRACE_HEADER_MULTI_READ)
0a16b6075   Mathieu Desnoyers   tracing, sched: L...
4
5
6
7
  #define _TRACE_SCHED_H
  
  #include <linux/sched.h>
  #include <linux/tracepoint.h>
4ff16c25e   David Smith   tracepoint, vfs, ...
8
  #include <linux/binfmts.h>
0a16b6075   Mathieu Desnoyers   tracing, sched: L...
9

ea20d9293   Steven Rostedt   tracing: consolid...
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
  /*
   * Tracepoint for calling kthread_stop, performed to end a kthread:
   */
  TRACE_EVENT(sched_kthread_stop,
  
  	TP_PROTO(struct task_struct *t),
  
  	TP_ARGS(t),
  
  	TP_STRUCT__entry(
  		__array(	char,	comm,	TASK_COMM_LEN	)
  		__field(	pid_t,	pid			)
  	),
  
  	TP_fast_assign(
  		memcpy(__entry->comm, t->comm, TASK_COMM_LEN);
  		__entry->pid	= t->pid;
  	),
434a83c3f   Ingo Molnar   events: Harmonize...
28
  	TP_printk("comm=%s pid=%d", __entry->comm, __entry->pid)
ea20d9293   Steven Rostedt   tracing: consolid...
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
  );
  
  /*
   * Tracepoint for the return value of the kthread stopping:
   */
  TRACE_EVENT(sched_kthread_stop_ret,
  
  	TP_PROTO(int ret),
  
  	TP_ARGS(ret),
  
  	TP_STRUCT__entry(
  		__field(	int,	ret	)
  	),
  
  	TP_fast_assign(
  		__entry->ret	= ret;
  	),
434a83c3f   Ingo Molnar   events: Harmonize...
47
  	TP_printk("ret=%d", __entry->ret)
ea20d9293   Steven Rostedt   tracing: consolid...
48
49
50
  );
  
  /*
ea20d9293   Steven Rostedt   tracing: consolid...
51
   * Tracepoint for waking up a task:
ea20d9293   Steven Rostedt   tracing: consolid...
52
   */
091ad3658   Ingo Molnar   events: Rename TR...
53
  DECLARE_EVENT_CLASS(sched_wakeup_template,
ea20d9293   Steven Rostedt   tracing: consolid...
54

27a9da653   Peter Zijlstra   sched: Remove rq ...
55
  	TP_PROTO(struct task_struct *p, int success),
ea20d9293   Steven Rostedt   tracing: consolid...
56

12473965c   Oleg Nesterov   tracing/perf: Rei...
57
  	TP_ARGS(__perf_task(p), success),
ea20d9293   Steven Rostedt   tracing: consolid...
58
59
60
61
62
63
  
  	TP_STRUCT__entry(
  		__array(	char,	comm,	TASK_COMM_LEN	)
  		__field(	pid_t,	pid			)
  		__field(	int,	prio			)
  		__field(	int,	success			)
434a83c3f   Ingo Molnar   events: Harmonize...
64
  		__field(	int,	target_cpu		)
ea20d9293   Steven Rostedt   tracing: consolid...
65
66
67
68
69
70
71
  	),
  
  	TP_fast_assign(
  		memcpy(__entry->comm, p->comm, TASK_COMM_LEN);
  		__entry->pid		= p->pid;
  		__entry->prio		= p->prio;
  		__entry->success	= success;
434a83c3f   Ingo Molnar   events: Harmonize...
72
  		__entry->target_cpu	= task_cpu(p);
ea20d9293   Steven Rostedt   tracing: consolid...
73
  	),
434a83c3f   Ingo Molnar   events: Harmonize...
74
  	TP_printk("comm=%s pid=%d prio=%d success=%d target_cpu=%03d",
ea20d9293   Steven Rostedt   tracing: consolid...
75
  		  __entry->comm, __entry->pid, __entry->prio,
434a83c3f   Ingo Molnar   events: Harmonize...
76
  		  __entry->success, __entry->target_cpu)
ea20d9293   Steven Rostedt   tracing: consolid...
77
  );
75ec29ab8   Steven Rostedt   tracing: Convert ...
78
  DEFINE_EVENT(sched_wakeup_template, sched_wakeup,
27a9da653   Peter Zijlstra   sched: Remove rq ...
79
80
  	     TP_PROTO(struct task_struct *p, int success),
  	     TP_ARGS(p, success));
75ec29ab8   Steven Rostedt   tracing: Convert ...
81

ea20d9293   Steven Rostedt   tracing: consolid...
82
83
  /*
   * Tracepoint for waking up a new task:
ea20d9293   Steven Rostedt   tracing: consolid...
84
   */
75ec29ab8   Steven Rostedt   tracing: Convert ...
85
  DEFINE_EVENT(sched_wakeup_template, sched_wakeup_new,
27a9da653   Peter Zijlstra   sched: Remove rq ...
86
87
  	     TP_PROTO(struct task_struct *p, int success),
  	     TP_ARGS(p, success));
ea20d9293   Steven Rostedt   tracing: consolid...
88

02f726949   Peter Zijlstra   sched, trace: Fix...
89
90
91
92
93
94
95
96
97
  #ifdef CREATE_TRACE_POINTS
  static inline long __trace_sched_switch_state(struct task_struct *p)
  {
  	long state = p->state;
  
  #ifdef CONFIG_PREEMPT
  	/*
  	 * For all intents and purposes a preempted task is a running task.
  	 */
010287475   Peter Zijlstra   sched: Create mor...
98
  	if (task_preempt_count(p) & PREEMPT_ACTIVE)
557ab4254   Peter Zijlstra   sched, tracing: S...
99
  		state = TASK_RUNNING | TASK_STATE_MAX;
02f726949   Peter Zijlstra   sched, trace: Fix...
100
101
102
103
104
  #endif
  
  	return state;
  }
  #endif
ea20d9293   Steven Rostedt   tracing: consolid...
105
106
  /*
   * Tracepoint for task switches, performed by the scheduler:
ea20d9293   Steven Rostedt   tracing: consolid...
107
108
   */
  TRACE_EVENT(sched_switch,
27a9da653   Peter Zijlstra   sched: Remove rq ...
109
  	TP_PROTO(struct task_struct *prev,
ea20d9293   Steven Rostedt   tracing: consolid...
110
  		 struct task_struct *next),
27a9da653   Peter Zijlstra   sched: Remove rq ...
111
  	TP_ARGS(prev, next),
ea20d9293   Steven Rostedt   tracing: consolid...
112
113
114
115
116
  
  	TP_STRUCT__entry(
  		__array(	char,	prev_comm,	TASK_COMM_LEN	)
  		__field(	pid_t,	prev_pid			)
  		__field(	int,	prev_prio			)
937cdb9db   Steven Rostedt   tracing: add prev...
117
  		__field(	long,	prev_state			)
ea20d9293   Steven Rostedt   tracing: consolid...
118
119
120
121
122
123
124
125
126
  		__array(	char,	next_comm,	TASK_COMM_LEN	)
  		__field(	pid_t,	next_pid			)
  		__field(	int,	next_prio			)
  	),
  
  	TP_fast_assign(
  		memcpy(__entry->next_comm, next->comm, TASK_COMM_LEN);
  		__entry->prev_pid	= prev->pid;
  		__entry->prev_prio	= prev->prio;
02f726949   Peter Zijlstra   sched, trace: Fix...
127
  		__entry->prev_state	= __trace_sched_switch_state(prev);
ea20d9293   Steven Rostedt   tracing: consolid...
128
129
130
131
  		memcpy(__entry->prev_comm, prev->comm, TASK_COMM_LEN);
  		__entry->next_pid	= next->pid;
  		__entry->next_prio	= next->prio;
  	),
557ab4254   Peter Zijlstra   sched, tracing: S...
132
  	TP_printk("prev_comm=%s prev_pid=%d prev_prio=%d prev_state=%s%s ==> next_comm=%s next_pid=%d next_prio=%d",
ea20d9293   Steven Rostedt   tracing: consolid...
133
  		__entry->prev_comm, __entry->prev_pid, __entry->prev_prio,
557ab4254   Peter Zijlstra   sched, tracing: S...
134
135
  		__entry->prev_state & (TASK_STATE_MAX-1) ?
  		  __print_flags(__entry->prev_state & (TASK_STATE_MAX-1), "|",
937cdb9db   Steven Rostedt   tracing: add prev...
136
137
  				{ 1, "S"} , { 2, "D" }, { 4, "T" }, { 8, "t" },
  				{ 16, "Z" }, { 32, "X" }, { 64, "x" },
f2530dc71   Thomas Gleixner   kthread: Prevent ...
138
  				{ 128, "K" }, { 256, "W" }, { 512, "P" }) : "R",
557ab4254   Peter Zijlstra   sched, tracing: S...
139
  		__entry->prev_state & TASK_STATE_MAX ? "+" : "",
ea20d9293   Steven Rostedt   tracing: consolid...
140
141
142
143
144
145
146
  		__entry->next_comm, __entry->next_pid, __entry->next_prio)
  );
  
  /*
   * Tracepoint for a task being migrated:
   */
  TRACE_EVENT(sched_migrate_task,
de1d72860   Mathieu Desnoyers   tracepoint: trace...
147
  	TP_PROTO(struct task_struct *p, int dest_cpu),
ea20d9293   Steven Rostedt   tracing: consolid...
148

de1d72860   Mathieu Desnoyers   tracepoint: trace...
149
  	TP_ARGS(p, dest_cpu),
ea20d9293   Steven Rostedt   tracing: consolid...
150
151
152
153
154
155
156
157
158
159
160
161
162
  
  	TP_STRUCT__entry(
  		__array(	char,	comm,	TASK_COMM_LEN	)
  		__field(	pid_t,	pid			)
  		__field(	int,	prio			)
  		__field(	int,	orig_cpu		)
  		__field(	int,	dest_cpu		)
  	),
  
  	TP_fast_assign(
  		memcpy(__entry->comm, p->comm, TASK_COMM_LEN);
  		__entry->pid		= p->pid;
  		__entry->prio		= p->prio;
de1d72860   Mathieu Desnoyers   tracepoint: trace...
163
  		__entry->orig_cpu	= task_cpu(p);
ea20d9293   Steven Rostedt   tracing: consolid...
164
165
  		__entry->dest_cpu	= dest_cpu;
  	),
434a83c3f   Ingo Molnar   events: Harmonize...
166
  	TP_printk("comm=%s pid=%d prio=%d orig_cpu=%d dest_cpu=%d",
ea20d9293   Steven Rostedt   tracing: consolid...
167
168
169
  		  __entry->comm, __entry->pid, __entry->prio,
  		  __entry->orig_cpu, __entry->dest_cpu)
  );
091ad3658   Ingo Molnar   events: Rename TR...
170
  DECLARE_EVENT_CLASS(sched_process_template,
ea20d9293   Steven Rostedt   tracing: consolid...
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
  
  	TP_PROTO(struct task_struct *p),
  
  	TP_ARGS(p),
  
  	TP_STRUCT__entry(
  		__array(	char,	comm,	TASK_COMM_LEN	)
  		__field(	pid_t,	pid			)
  		__field(	int,	prio			)
  	),
  
  	TP_fast_assign(
  		memcpy(__entry->comm, p->comm, TASK_COMM_LEN);
  		__entry->pid		= p->pid;
  		__entry->prio		= p->prio;
  	),
434a83c3f   Ingo Molnar   events: Harmonize...
187
  	TP_printk("comm=%s pid=%d prio=%d",
ea20d9293   Steven Rostedt   tracing: consolid...
188
189
190
191
  		  __entry->comm, __entry->pid, __entry->prio)
  );
  
  /*
75ec29ab8   Steven Rostedt   tracing: Convert ...
192
   * Tracepoint for freeing a task:
ea20d9293   Steven Rostedt   tracing: consolid...
193
   */
75ec29ab8   Steven Rostedt   tracing: Convert ...
194
195
196
197
  DEFINE_EVENT(sched_process_template, sched_process_free,
  	     TP_PROTO(struct task_struct *p),
  	     TP_ARGS(p));
  	     
ea20d9293   Steven Rostedt   tracing: consolid...
198

75ec29ab8   Steven Rostedt   tracing: Convert ...
199
200
201
202
203
204
  /*
   * Tracepoint for a task exiting:
   */
  DEFINE_EVENT(sched_process_template, sched_process_exit,
  	     TP_PROTO(struct task_struct *p),
  	     TP_ARGS(p));
ea20d9293   Steven Rostedt   tracing: consolid...
205
206
  
  /*
210f76691   Li Zefan   tracing: Convert ...
207
208
209
210
211
212
213
   * Tracepoint for waiting on task to unschedule:
   */
  DEFINE_EVENT(sched_process_template, sched_wait_task,
  	TP_PROTO(struct task_struct *p),
  	TP_ARGS(p));
  
  /*
ea20d9293   Steven Rostedt   tracing: consolid...
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
   * Tracepoint for a waiting task:
   */
  TRACE_EVENT(sched_process_wait,
  
  	TP_PROTO(struct pid *pid),
  
  	TP_ARGS(pid),
  
  	TP_STRUCT__entry(
  		__array(	char,	comm,	TASK_COMM_LEN	)
  		__field(	pid_t,	pid			)
  		__field(	int,	prio			)
  	),
  
  	TP_fast_assign(
  		memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
  		__entry->pid		= pid_nr(pid);
  		__entry->prio		= current->prio;
  	),
434a83c3f   Ingo Molnar   events: Harmonize...
233
  	TP_printk("comm=%s pid=%d prio=%d",
ea20d9293   Steven Rostedt   tracing: consolid...
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
  		  __entry->comm, __entry->pid, __entry->prio)
  );
  
  /*
   * Tracepoint for do_fork:
   */
  TRACE_EVENT(sched_process_fork,
  
  	TP_PROTO(struct task_struct *parent, struct task_struct *child),
  
  	TP_ARGS(parent, child),
  
  	TP_STRUCT__entry(
  		__array(	char,	parent_comm,	TASK_COMM_LEN	)
  		__field(	pid_t,	parent_pid			)
  		__array(	char,	child_comm,	TASK_COMM_LEN	)
  		__field(	pid_t,	child_pid			)
  	),
  
  	TP_fast_assign(
  		memcpy(__entry->parent_comm, parent->comm, TASK_COMM_LEN);
  		__entry->parent_pid	= parent->pid;
  		memcpy(__entry->child_comm, child->comm, TASK_COMM_LEN);
  		__entry->child_pid	= child->pid;
  	),
434a83c3f   Ingo Molnar   events: Harmonize...
259
  	TP_printk("comm=%s pid=%d child_comm=%s child_pid=%d",
ea20d9293   Steven Rostedt   tracing: consolid...
260
261
262
263
264
  		__entry->parent_comm, __entry->parent_pid,
  		__entry->child_comm, __entry->child_pid)
  );
  
  /*
4ff16c25e   David Smith   tracepoint, vfs, ...
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
   * Tracepoint for exec:
   */
  TRACE_EVENT(sched_process_exec,
  
  	TP_PROTO(struct task_struct *p, pid_t old_pid,
  		 struct linux_binprm *bprm),
  
  	TP_ARGS(p, old_pid, bprm),
  
  	TP_STRUCT__entry(
  		__string(	filename,	bprm->filename	)
  		__field(	pid_t,		pid		)
  		__field(	pid_t,		old_pid		)
  	),
  
  	TP_fast_assign(
  		__assign_str(filename, bprm->filename);
  		__entry->pid		= p->pid;
6308191f6   Oleg Nesterov   tracing, sched, v...
283
  		__entry->old_pid	= old_pid;
4ff16c25e   David Smith   tracepoint, vfs, ...
284
285
286
287
288
289
290
  	),
  
  	TP_printk("filename=%s pid=%d old_pid=%d", __get_str(filename),
  		  __entry->pid, __entry->old_pid)
  );
  
  /*
768d0c272   Peter Zijlstra   sched: Add wait, ...
291
292
293
   * XXX the below sched_stat tracepoints only apply to SCHED_OTHER/BATCH/IDLE
   *     adding sched_stat support to SCHED_FIFO/RR would be welcome.
   */
091ad3658   Ingo Molnar   events: Rename TR...
294
  DECLARE_EVENT_CLASS(sched_stat_template,
768d0c272   Peter Zijlstra   sched: Add wait, ...
295
296
  
  	TP_PROTO(struct task_struct *tsk, u64 delay),
12473965c   Oleg Nesterov   tracing/perf: Rei...
297
  	TP_ARGS(__perf_task(tsk), __perf_count(delay)),
768d0c272   Peter Zijlstra   sched: Add wait, ...
298
299
300
301
302
303
304
305
306
307
308
  
  	TP_STRUCT__entry(
  		__array( char,	comm,	TASK_COMM_LEN	)
  		__field( pid_t,	pid			)
  		__field( u64,	delay			)
  	),
  
  	TP_fast_assign(
  		memcpy(__entry->comm, tsk->comm, TASK_COMM_LEN);
  		__entry->pid	= tsk->pid;
  		__entry->delay	= delay;
768d0c272   Peter Zijlstra   sched: Add wait, ...
309
  	),
434a83c3f   Ingo Molnar   events: Harmonize...
310
  	TP_printk("comm=%s pid=%d delay=%Lu [ns]",
768d0c272   Peter Zijlstra   sched: Add wait, ...
311
312
313
  			__entry->comm, __entry->pid,
  			(unsigned long long)__entry->delay)
  );
75ec29ab8   Steven Rostedt   tracing: Convert ...
314
315
316
317
318
319
320
321
322
323
324
325
326
  
  /*
   * Tracepoint for accounting wait time (time the task is runnable
   * but not actually running due to scheduler contention).
   */
  DEFINE_EVENT(sched_stat_template, sched_stat_wait,
  	     TP_PROTO(struct task_struct *tsk, u64 delay),
  	     TP_ARGS(tsk, delay));
  
  /*
   * Tracepoint for accounting sleep time (time the task is not runnable,
   * including iowait, see below).
   */
470dda741   Li Zefan   tracing: Restore ...
327
328
329
  DEFINE_EVENT(sched_stat_template, sched_stat_sleep,
  	     TP_PROTO(struct task_struct *tsk, u64 delay),
  	     TP_ARGS(tsk, delay));
75ec29ab8   Steven Rostedt   tracing: Convert ...
330
331
332
333
334
  
  /*
   * Tracepoint for accounting iowait time (time the task is not runnable
   * due to waiting on IO to complete).
   */
470dda741   Li Zefan   tracing: Restore ...
335
336
337
  DEFINE_EVENT(sched_stat_template, sched_stat_iowait,
  	     TP_PROTO(struct task_struct *tsk, u64 delay),
  	     TP_ARGS(tsk, delay));
75ec29ab8   Steven Rostedt   tracing: Convert ...
338

768d0c272   Peter Zijlstra   sched: Add wait, ...
339
  /*
b781a602a   Andrew Vagin   events, sched: Ad...
340
341
342
343
344
345
346
   * Tracepoint for accounting blocked time (time the task is in uninterruptible).
   */
  DEFINE_EVENT(sched_stat_template, sched_stat_blocked,
  	     TP_PROTO(struct task_struct *tsk, u64 delay),
  	     TP_ARGS(tsk, delay));
  
  /*
f977bb493   Ingo Molnar   perf_counter, sch...
347
348
349
   * Tracepoint for accounting runtime (time the task is executing
   * on a CPU).
   */
36009d07b   Oleg Nesterov   tracing/perf: Exp...
350
  DECLARE_EVENT_CLASS(sched_stat_runtime,
f977bb493   Ingo Molnar   perf_counter, sch...
351
352
  
  	TP_PROTO(struct task_struct *tsk, u64 runtime, u64 vruntime),
12473965c   Oleg Nesterov   tracing/perf: Rei...
353
  	TP_ARGS(tsk, __perf_count(runtime), vruntime),
f977bb493   Ingo Molnar   perf_counter, sch...
354
355
356
357
358
359
360
361
362
363
364
365
366
  
  	TP_STRUCT__entry(
  		__array( char,	comm,	TASK_COMM_LEN	)
  		__field( pid_t,	pid			)
  		__field( u64,	runtime			)
  		__field( u64,	vruntime			)
  	),
  
  	TP_fast_assign(
  		memcpy(__entry->comm, tsk->comm, TASK_COMM_LEN);
  		__entry->pid		= tsk->pid;
  		__entry->runtime	= runtime;
  		__entry->vruntime	= vruntime;
f977bb493   Ingo Molnar   perf_counter, sch...
367
  	),
434a83c3f   Ingo Molnar   events: Harmonize...
368
  	TP_printk("comm=%s pid=%d runtime=%Lu [ns] vruntime=%Lu [ns]",
f977bb493   Ingo Molnar   perf_counter, sch...
369
370
371
372
  			__entry->comm, __entry->pid,
  			(unsigned long long)__entry->runtime,
  			(unsigned long long)__entry->vruntime)
  );
36009d07b   Oleg Nesterov   tracing/perf: Exp...
373
374
375
  DEFINE_EVENT(sched_stat_runtime, sched_stat_runtime,
  	     TP_PROTO(struct task_struct *tsk, u64 runtime, u64 vruntime),
  	     TP_ARGS(tsk, runtime, vruntime));
a8027073e   Steven Rostedt   tracing/sched: Ad...
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
  /*
   * Tracepoint for showing priority inheritance modifying a tasks
   * priority.
   */
  TRACE_EVENT(sched_pi_setprio,
  
  	TP_PROTO(struct task_struct *tsk, int newprio),
  
  	TP_ARGS(tsk, newprio),
  
  	TP_STRUCT__entry(
  		__array( char,	comm,	TASK_COMM_LEN	)
  		__field( pid_t,	pid			)
  		__field( int,	oldprio			)
  		__field( int,	newprio			)
  	),
  
  	TP_fast_assign(
  		memcpy(__entry->comm, tsk->comm, TASK_COMM_LEN);
  		__entry->pid		= tsk->pid;
  		__entry->oldprio	= tsk->prio;
  		__entry->newprio	= newprio;
  	),
  
  	TP_printk("comm=%s pid=%d oldprio=%d newprio=%d",
  			__entry->comm, __entry->pid,
  			__entry->oldprio, __entry->newprio)
  );
6a716c90a   Oleg Nesterov   hung_task debuggi...
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
  #ifdef CONFIG_DETECT_HUNG_TASK
  TRACE_EVENT(sched_process_hang,
  	TP_PROTO(struct task_struct *tsk),
  	TP_ARGS(tsk),
  
  	TP_STRUCT__entry(
  		__array( char,	comm,	TASK_COMM_LEN	)
  		__field( pid_t,	pid			)
  	),
  
  	TP_fast_assign(
  		memcpy(__entry->comm, tsk->comm, TASK_COMM_LEN);
  		__entry->pid = tsk->pid;
  	),
  
  	TP_printk("comm=%s pid=%d", __entry->comm, __entry->pid)
  );
  #endif /* CONFIG_DETECT_HUNG_TASK */
286549dca   Mel Gorman   sched: add tracep...
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
  DECLARE_EVENT_CLASS(sched_move_task_template,
  
  	TP_PROTO(struct task_struct *tsk, int src_cpu, int dst_cpu),
  
  	TP_ARGS(tsk, src_cpu, dst_cpu),
  
  	TP_STRUCT__entry(
  		__field( pid_t,	pid			)
  		__field( pid_t,	tgid			)
  		__field( pid_t,	ngid			)
  		__field( int,	src_cpu			)
  		__field( int,	src_nid			)
  		__field( int,	dst_cpu			)
  		__field( int,	dst_nid			)
  	),
  
  	TP_fast_assign(
  		__entry->pid		= task_pid_nr(tsk);
  		__entry->tgid		= task_tgid_nr(tsk);
  		__entry->ngid		= task_numa_group_id(tsk);
  		__entry->src_cpu	= src_cpu;
  		__entry->src_nid	= cpu_to_node(src_cpu);
  		__entry->dst_cpu	= dst_cpu;
  		__entry->dst_nid	= cpu_to_node(dst_cpu);
  	),
  
  	TP_printk("pid=%d tgid=%d ngid=%d src_cpu=%d src_nid=%d dst_cpu=%d dst_nid=%d",
  			__entry->pid, __entry->tgid, __entry->ngid,
  			__entry->src_cpu, __entry->src_nid,
  			__entry->dst_cpu, __entry->dst_nid)
  );
  
  /*
   * Tracks migration of tasks from one runqueue to another. Can be used to
   * detect if automatic NUMA balancing is bouncing between nodes
   */
  DEFINE_EVENT(sched_move_task_template, sched_move_numa,
  	TP_PROTO(struct task_struct *tsk, int src_cpu, int dst_cpu),
  
  	TP_ARGS(tsk, src_cpu, dst_cpu)
  );
  
  DEFINE_EVENT(sched_move_task_template, sched_stick_numa,
  	TP_PROTO(struct task_struct *tsk, int src_cpu, int dst_cpu),
  
  	TP_ARGS(tsk, src_cpu, dst_cpu)
  );
  
  TRACE_EVENT(sched_swap_numa,
  
  	TP_PROTO(struct task_struct *src_tsk, int src_cpu,
  		 struct task_struct *dst_tsk, int dst_cpu),
  
  	TP_ARGS(src_tsk, src_cpu, dst_tsk, dst_cpu),
  
  	TP_STRUCT__entry(
  		__field( pid_t,	src_pid			)
  		__field( pid_t,	src_tgid		)
  		__field( pid_t,	src_ngid		)
  		__field( int,	src_cpu			)
  		__field( int,	src_nid			)
  		__field( pid_t,	dst_pid			)
  		__field( pid_t,	dst_tgid		)
  		__field( pid_t,	dst_ngid		)
  		__field( int,	dst_cpu			)
  		__field( int,	dst_nid			)
  	),
  
  	TP_fast_assign(
  		__entry->src_pid	= task_pid_nr(src_tsk);
  		__entry->src_tgid	= task_tgid_nr(src_tsk);
  		__entry->src_ngid	= task_numa_group_id(src_tsk);
  		__entry->src_cpu	= src_cpu;
  		__entry->src_nid	= cpu_to_node(src_cpu);
  		__entry->dst_pid	= task_pid_nr(dst_tsk);
  		__entry->dst_tgid	= task_tgid_nr(dst_tsk);
  		__entry->dst_ngid	= task_numa_group_id(dst_tsk);
  		__entry->dst_cpu	= dst_cpu;
  		__entry->dst_nid	= cpu_to_node(dst_cpu);
  	),
  
  	TP_printk("src_pid=%d src_tgid=%d src_ngid=%d src_cpu=%d src_nid=%d dst_pid=%d dst_tgid=%d dst_ngid=%d dst_cpu=%d dst_nid=%d",
  			__entry->src_pid, __entry->src_tgid, __entry->src_ngid,
  			__entry->src_cpu, __entry->src_nid,
  			__entry->dst_pid, __entry->dst_tgid, __entry->dst_ngid,
  			__entry->dst_cpu, __entry->dst_nid)
  );
ea20d9293   Steven Rostedt   tracing: consolid...
509
  #endif /* _TRACE_SCHED_H */
a8d154b00   Steven Rostedt   tracing: create a...
510
511
512
  
  /* This part must be outside protection */
  #include <trace/define_trace.h>