Merge remote-tracking branch 'lsk/v3.10/topic/arm64-crypto' into linux-linaro-lsk
[firefly-linux-kernel-4.4.55.git] / include / trace / events / sched.h
1 #undef TRACE_SYSTEM
2 #define TRACE_SYSTEM sched
3
4 #if !defined(_TRACE_SCHED_H) || defined(TRACE_HEADER_MULTI_READ)
5 #define _TRACE_SCHED_H
6
7 #include <linux/sched.h>
8 #include <linux/tracepoint.h>
9 #include <linux/binfmts.h>
10
11 /*
12  * Tracepoint for calling kthread_stop, performed to end a kthread:
13  */
14 TRACE_EVENT(sched_kthread_stop,
15
16         TP_PROTO(struct task_struct *t),
17
18         TP_ARGS(t),
19
20         TP_STRUCT__entry(
21                 __array(        char,   comm,   TASK_COMM_LEN   )
22                 __field(        pid_t,  pid                     )
23         ),
24
25         TP_fast_assign(
26                 memcpy(__entry->comm, t->comm, TASK_COMM_LEN);
27                 __entry->pid    = t->pid;
28         ),
29
30         TP_printk("comm=%s pid=%d", __entry->comm, __entry->pid)
31 );
32
33 /*
34  * Tracepoint for the return value of the kthread stopping:
35  */
36 TRACE_EVENT(sched_kthread_stop_ret,
37
38         TP_PROTO(int ret),
39
40         TP_ARGS(ret),
41
42         TP_STRUCT__entry(
43                 __field(        int,    ret     )
44         ),
45
46         TP_fast_assign(
47                 __entry->ret    = ret;
48         ),
49
50         TP_printk("ret=%d", __entry->ret)
51 );
52
53 /*
54  * Tracepoint for waking up a task:
55  */
56 DECLARE_EVENT_CLASS(sched_wakeup_template,
57
58         TP_PROTO(struct task_struct *p, int success),
59
60         TP_ARGS(p, success),
61
62         TP_STRUCT__entry(
63                 __array(        char,   comm,   TASK_COMM_LEN   )
64                 __field(        pid_t,  pid                     )
65                 __field(        int,    prio                    )
66                 __field(        int,    success                 )
67                 __field(        int,    target_cpu              )
68         ),
69
70         TP_fast_assign(
71                 memcpy(__entry->comm, p->comm, TASK_COMM_LEN);
72                 __entry->pid            = p->pid;
73                 __entry->prio           = p->prio;
74                 __entry->success        = success;
75                 __entry->target_cpu     = task_cpu(p);
76         )
77         TP_perf_assign(
78                 __perf_task(p);
79         ),
80
81         TP_printk("comm=%s pid=%d prio=%d success=%d target_cpu=%03d",
82                   __entry->comm, __entry->pid, __entry->prio,
83                   __entry->success, __entry->target_cpu)
84 );
85
86 DEFINE_EVENT(sched_wakeup_template, sched_wakeup,
87              TP_PROTO(struct task_struct *p, int success),
88              TP_ARGS(p, success));
89
90 /*
91  * Tracepoint for waking up a new task:
92  */
93 DEFINE_EVENT(sched_wakeup_template, sched_wakeup_new,
94              TP_PROTO(struct task_struct *p, int success),
95              TP_ARGS(p, success));
96
97 #ifdef CREATE_TRACE_POINTS
98 static inline long __trace_sched_switch_state(struct task_struct *p)
99 {
100         long state = p->state;
101
102 #ifdef CONFIG_PREEMPT
103         /*
104          * For all intents and purposes a preempted task is a running task.
105          */
106         if (task_thread_info(p)->preempt_count & PREEMPT_ACTIVE)
107                 state = TASK_RUNNING | TASK_STATE_MAX;
108 #endif
109
110         return state;
111 }
112 #endif
113
114 /*
115  * Tracepoint for task switches, performed by the scheduler:
116  */
117 TRACE_EVENT(sched_switch,
118
119         TP_PROTO(struct task_struct *prev,
120                  struct task_struct *next),
121
122         TP_ARGS(prev, next),
123
124         TP_STRUCT__entry(
125                 __array(        char,   prev_comm,      TASK_COMM_LEN   )
126                 __field(        pid_t,  prev_pid                        )
127                 __field(        int,    prev_prio                       )
128                 __field(        long,   prev_state                      )
129                 __array(        char,   next_comm,      TASK_COMM_LEN   )
130                 __field(        pid_t,  next_pid                        )
131                 __field(        int,    next_prio                       )
132         ),
133
134         TP_fast_assign(
135                 memcpy(__entry->next_comm, next->comm, TASK_COMM_LEN);
136                 __entry->prev_pid       = prev->pid;
137                 __entry->prev_prio      = prev->prio;
138                 __entry->prev_state     = __trace_sched_switch_state(prev);
139                 memcpy(__entry->prev_comm, prev->comm, TASK_COMM_LEN);
140                 __entry->next_pid       = next->pid;
141                 __entry->next_prio      = next->prio;
142         ),
143
144         TP_printk("prev_comm=%s prev_pid=%d prev_prio=%d prev_state=%s%s ==> next_comm=%s next_pid=%d next_prio=%d",
145                 __entry->prev_comm, __entry->prev_pid, __entry->prev_prio,
146                 __entry->prev_state & (TASK_STATE_MAX-1) ?
147                   __print_flags(__entry->prev_state & (TASK_STATE_MAX-1), "|",
148                                 { 1, "S"} , { 2, "D" }, { 4, "T" }, { 8, "t" },
149                                 { 16, "Z" }, { 32, "X" }, { 64, "x" },
150                                 { 128, "K" }, { 256, "W" }, { 512, "P" }) : "R",
151                 __entry->prev_state & TASK_STATE_MAX ? "+" : "",
152                 __entry->next_comm, __entry->next_pid, __entry->next_prio)
153 );
154
155 /*
156  * Tracepoint for a task being migrated:
157  */
158 TRACE_EVENT(sched_migrate_task,
159
160         TP_PROTO(struct task_struct *p, int dest_cpu),
161
162         TP_ARGS(p, dest_cpu),
163
164         TP_STRUCT__entry(
165                 __array(        char,   comm,   TASK_COMM_LEN   )
166                 __field(        pid_t,  pid                     )
167                 __field(        int,    prio                    )
168                 __field(        int,    orig_cpu                )
169                 __field(        int,    dest_cpu                )
170         ),
171
172         TP_fast_assign(
173                 memcpy(__entry->comm, p->comm, TASK_COMM_LEN);
174                 __entry->pid            = p->pid;
175                 __entry->prio           = p->prio;
176                 __entry->orig_cpu       = task_cpu(p);
177                 __entry->dest_cpu       = dest_cpu;
178         ),
179
180         TP_printk("comm=%s pid=%d prio=%d orig_cpu=%d dest_cpu=%d",
181                   __entry->comm, __entry->pid, __entry->prio,
182                   __entry->orig_cpu, __entry->dest_cpu)
183 );
184
185 DECLARE_EVENT_CLASS(sched_process_template,
186
187         TP_PROTO(struct task_struct *p),
188
189         TP_ARGS(p),
190
191         TP_STRUCT__entry(
192                 __array(        char,   comm,   TASK_COMM_LEN   )
193                 __field(        pid_t,  pid                     )
194                 __field(        int,    prio                    )
195         ),
196
197         TP_fast_assign(
198                 memcpy(__entry->comm, p->comm, TASK_COMM_LEN);
199                 __entry->pid            = p->pid;
200                 __entry->prio           = p->prio;
201         ),
202
203         TP_printk("comm=%s pid=%d prio=%d",
204                   __entry->comm, __entry->pid, __entry->prio)
205 );
206
207 /*
208  * Tracepoint for freeing a task:
209  */
210 DEFINE_EVENT(sched_process_template, sched_process_free,
211              TP_PROTO(struct task_struct *p),
212              TP_ARGS(p));
213              
214
215 /*
216  * Tracepoint for a task exiting:
217  */
218 DEFINE_EVENT(sched_process_template, sched_process_exit,
219              TP_PROTO(struct task_struct *p),
220              TP_ARGS(p));
221
222 /*
223  * Tracepoint for waiting on task to unschedule:
224  */
225 DEFINE_EVENT(sched_process_template, sched_wait_task,
226         TP_PROTO(struct task_struct *p),
227         TP_ARGS(p));
228
229 /*
230  * Tracepoint for a waiting task:
231  */
232 TRACE_EVENT(sched_process_wait,
233
234         TP_PROTO(struct pid *pid),
235
236         TP_ARGS(pid),
237
238         TP_STRUCT__entry(
239                 __array(        char,   comm,   TASK_COMM_LEN   )
240                 __field(        pid_t,  pid                     )
241                 __field(        int,    prio                    )
242         ),
243
244         TP_fast_assign(
245                 memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
246                 __entry->pid            = pid_nr(pid);
247                 __entry->prio           = current->prio;
248         ),
249
250         TP_printk("comm=%s pid=%d prio=%d",
251                   __entry->comm, __entry->pid, __entry->prio)
252 );
253
254 /*
255  * Tracepoint for do_fork:
256  */
257 TRACE_EVENT(sched_process_fork,
258
259         TP_PROTO(struct task_struct *parent, struct task_struct *child),
260
261         TP_ARGS(parent, child),
262
263         TP_STRUCT__entry(
264                 __array(        char,   parent_comm,    TASK_COMM_LEN   )
265                 __field(        pid_t,  parent_pid                      )
266                 __array(        char,   child_comm,     TASK_COMM_LEN   )
267                 __field(        pid_t,  child_pid                       )
268         ),
269
270         TP_fast_assign(
271                 memcpy(__entry->parent_comm, parent->comm, TASK_COMM_LEN);
272                 __entry->parent_pid     = parent->pid;
273                 memcpy(__entry->child_comm, child->comm, TASK_COMM_LEN);
274                 __entry->child_pid      = child->pid;
275         ),
276
277         TP_printk("comm=%s pid=%d child_comm=%s child_pid=%d",
278                 __entry->parent_comm, __entry->parent_pid,
279                 __entry->child_comm, __entry->child_pid)
280 );
281
282 /*
283  * Tracepoint for exec:
284  */
285 TRACE_EVENT(sched_process_exec,
286
287         TP_PROTO(struct task_struct *p, pid_t old_pid,
288                  struct linux_binprm *bprm),
289
290         TP_ARGS(p, old_pid, bprm),
291
292         TP_STRUCT__entry(
293                 __string(       filename,       bprm->filename  )
294                 __field(        pid_t,          pid             )
295                 __field(        pid_t,          old_pid         )
296         ),
297
298         TP_fast_assign(
299                 __assign_str(filename, bprm->filename);
300                 __entry->pid            = p->pid;
301                 __entry->old_pid        = old_pid;
302         ),
303
304         TP_printk("filename=%s pid=%d old_pid=%d", __get_str(filename),
305                   __entry->pid, __entry->old_pid)
306 );
307
308 /*
309  * XXX the below sched_stat tracepoints only apply to SCHED_OTHER/BATCH/IDLE
310  *     adding sched_stat support to SCHED_FIFO/RR would be welcome.
311  */
312 DECLARE_EVENT_CLASS(sched_stat_template,
313
314         TP_PROTO(struct task_struct *tsk, u64 delay),
315
316         TP_ARGS(tsk, delay),
317
318         TP_STRUCT__entry(
319                 __array( char,  comm,   TASK_COMM_LEN   )
320                 __field( pid_t, pid                     )
321                 __field( u64,   delay                   )
322         ),
323
324         TP_fast_assign(
325                 memcpy(__entry->comm, tsk->comm, TASK_COMM_LEN);
326                 __entry->pid    = tsk->pid;
327                 __entry->delay  = delay;
328         )
329         TP_perf_assign(
330                 __perf_count(delay);
331                 __perf_task(tsk);
332         ),
333
334         TP_printk("comm=%s pid=%d delay=%Lu [ns]",
335                         __entry->comm, __entry->pid,
336                         (unsigned long long)__entry->delay)
337 );
338
339
340 /*
341  * Tracepoint for accounting wait time (time the task is runnable
342  * but not actually running due to scheduler contention).
343  */
344 DEFINE_EVENT(sched_stat_template, sched_stat_wait,
345              TP_PROTO(struct task_struct *tsk, u64 delay),
346              TP_ARGS(tsk, delay));
347
348 /*
349  * Tracepoint for accounting sleep time (time the task is not runnable,
350  * including iowait, see below).
351  */
352 DEFINE_EVENT(sched_stat_template, sched_stat_sleep,
353              TP_PROTO(struct task_struct *tsk, u64 delay),
354              TP_ARGS(tsk, delay));
355
356 /*
357  * Tracepoint for accounting iowait time (time the task is not runnable
358  * due to waiting on IO to complete).
359  */
360 DEFINE_EVENT(sched_stat_template, sched_stat_iowait,
361              TP_PROTO(struct task_struct *tsk, u64 delay),
362              TP_ARGS(tsk, delay));
363
364 /*
365  * Tracepoint for accounting blocked time (time the task is in uninterruptible).
366  */
367 DEFINE_EVENT(sched_stat_template, sched_stat_blocked,
368              TP_PROTO(struct task_struct *tsk, u64 delay),
369              TP_ARGS(tsk, delay));
370
371 /*
372  * Tracepoint for accounting runtime (time the task is executing
373  * on a CPU).
374  */
375 TRACE_EVENT(sched_stat_runtime,
376
377         TP_PROTO(struct task_struct *tsk, u64 runtime, u64 vruntime),
378
379         TP_ARGS(tsk, runtime, vruntime),
380
381         TP_STRUCT__entry(
382                 __array( char,  comm,   TASK_COMM_LEN   )
383                 __field( pid_t, pid                     )
384                 __field( u64,   runtime                 )
385                 __field( u64,   vruntime                        )
386         ),
387
388         TP_fast_assign(
389                 memcpy(__entry->comm, tsk->comm, TASK_COMM_LEN);
390                 __entry->pid            = tsk->pid;
391                 __entry->runtime        = runtime;
392                 __entry->vruntime       = vruntime;
393         )
394         TP_perf_assign(
395                 __perf_count(runtime);
396         ),
397
398         TP_printk("comm=%s pid=%d runtime=%Lu [ns] vruntime=%Lu [ns]",
399                         __entry->comm, __entry->pid,
400                         (unsigned long long)__entry->runtime,
401                         (unsigned long long)__entry->vruntime)
402 );
403
404 /*
405  * Tracepoint for showing priority inheritance modifying a tasks
406  * priority.
407  */
408 TRACE_EVENT(sched_pi_setprio,
409
410         TP_PROTO(struct task_struct *tsk, int newprio),
411
412         TP_ARGS(tsk, newprio),
413
414         TP_STRUCT__entry(
415                 __array( char,  comm,   TASK_COMM_LEN   )
416                 __field( pid_t, pid                     )
417                 __field( int,   oldprio                 )
418                 __field( int,   newprio                 )
419         ),
420
421         TP_fast_assign(
422                 memcpy(__entry->comm, tsk->comm, TASK_COMM_LEN);
423                 __entry->pid            = tsk->pid;
424                 __entry->oldprio        = tsk->prio;
425                 __entry->newprio        = newprio;
426         ),
427
428         TP_printk("comm=%s pid=%d oldprio=%d newprio=%d",
429                         __entry->comm, __entry->pid,
430                         __entry->oldprio, __entry->newprio)
431 );
432
433 /*
434  * Tracepoint for showing tracked load contribution.
435  */
436 TRACE_EVENT(sched_task_load_contrib,
437
438         TP_PROTO(struct task_struct *tsk, unsigned long load_contrib),
439
440         TP_ARGS(tsk, load_contrib),
441
442         TP_STRUCT__entry(
443                 __array(char, comm, TASK_COMM_LEN)
444                 __field(pid_t, pid)
445                 __field(unsigned long, load_contrib)
446         ),
447
448         TP_fast_assign(
449                 memcpy(__entry->comm, tsk->comm, TASK_COMM_LEN);
450                 __entry->pid            = tsk->pid;
451                 __entry->load_contrib   = load_contrib;
452         ),
453
454         TP_printk("comm=%s pid=%d load_contrib=%lu",
455                         __entry->comm, __entry->pid,
456                         __entry->load_contrib)
457 );
458
459 /*
460  * Tracepoint for showing tracked task runnable ratio [0..1023].
461  */
462 TRACE_EVENT(sched_task_runnable_ratio,
463
464         TP_PROTO(struct task_struct *tsk, unsigned long ratio),
465
466         TP_ARGS(tsk, ratio),
467
468         TP_STRUCT__entry(
469                 __array(char, comm, TASK_COMM_LEN)
470                 __field(pid_t, pid)
471                 __field(unsigned long, ratio)
472         ),
473
474         TP_fast_assign(
475         memcpy(__entry->comm, tsk->comm, TASK_COMM_LEN);
476                 __entry->pid   = tsk->pid;
477                 __entry->ratio = ratio;
478         ),
479
480         TP_printk("comm=%s pid=%d ratio=%lu",
481                         __entry->comm, __entry->pid,
482                         __entry->ratio)
483 );
484
485 /*
486  * Tracepoint for showing tracked rq runnable ratio [0..1023].
487  */
488 TRACE_EVENT(sched_rq_runnable_ratio,
489
490         TP_PROTO(int cpu, unsigned long ratio),
491
492         TP_ARGS(cpu, ratio),
493
494         TP_STRUCT__entry(
495                 __field(int, cpu)
496                 __field(unsigned long, ratio)
497         ),
498
499         TP_fast_assign(
500                 __entry->cpu   = cpu;
501                 __entry->ratio = ratio;
502         ),
503
504         TP_printk("cpu=%d ratio=%lu",
505                         __entry->cpu,
506                         __entry->ratio)
507 );
508
509 /*
510  * Tracepoint for showing tracked rq runnable load.
511  */
512 TRACE_EVENT(sched_rq_runnable_load,
513
514         TP_PROTO(int cpu, u64 load),
515
516         TP_ARGS(cpu, load),
517
518         TP_STRUCT__entry(
519                 __field(int, cpu)
520                 __field(u64, load)
521         ),
522
523         TP_fast_assign(
524                 __entry->cpu  = cpu;
525                 __entry->load = load;
526         ),
527
528         TP_printk("cpu=%d load=%llu",
529                         __entry->cpu,
530                         __entry->load)
531 );
532
533 TRACE_EVENT(sched_rq_nr_running,
534
535         TP_PROTO(int cpu, unsigned int nr_running, int nr_iowait),
536
537         TP_ARGS(cpu, nr_running, nr_iowait),
538
539         TP_STRUCT__entry(
540                 __field(int, cpu)
541                 __field(unsigned int, nr_running)
542                 __field(int, nr_iowait)
543         ),
544
545         TP_fast_assign(
546                 __entry->cpu  = cpu;
547                 __entry->nr_running = nr_running;
548                 __entry->nr_iowait = nr_iowait;
549         ),
550
551         TP_printk("cpu=%d nr_running=%u nr_iowait=%d",
552                         __entry->cpu,
553                         __entry->nr_running, __entry->nr_iowait)
554 );
555
556 /*
557  * Tracepoint for showing tracked task cpu usage ratio [0..1023].
558  */
559 TRACE_EVENT(sched_task_usage_ratio,
560
561         TP_PROTO(struct task_struct *tsk, unsigned long ratio),
562
563         TP_ARGS(tsk, ratio),
564
565         TP_STRUCT__entry(
566                 __array(char, comm, TASK_COMM_LEN)
567                 __field(pid_t, pid)
568                 __field(unsigned long, ratio)
569         ),
570
571         TP_fast_assign(
572         memcpy(__entry->comm, tsk->comm, TASK_COMM_LEN);
573                 __entry->pid   = tsk->pid;
574                 __entry->ratio = ratio;
575         ),
576
577         TP_printk("comm=%s pid=%d ratio=%lu",
578                         __entry->comm, __entry->pid,
579                         __entry->ratio)
580 );
581
582 /*
583  * Tracepoint for HMP (CONFIG_SCHED_HMP) task migrations,
584  * marking the forced transition of runnable or running tasks.
585  */
586 TRACE_EVENT(sched_hmp_migrate_force_running,
587
588         TP_PROTO(struct task_struct *tsk, int running),
589
590         TP_ARGS(tsk, running),
591
592         TP_STRUCT__entry(
593                 __array(char, comm, TASK_COMM_LEN)
594                 __field(int, running)
595         ),
596
597         TP_fast_assign(
598                 memcpy(__entry->comm, tsk->comm, TASK_COMM_LEN);
599                 __entry->running = running;
600         ),
601
602         TP_printk("running=%d comm=%s",
603                 __entry->running, __entry->comm)
604 );
605
606 /*
607  * Tracepoint for HMP (CONFIG_SCHED_HMP) task migrations,
608  * marking the forced transition of runnable or running
609  * tasks when a task is about to go idle.
610  */
611 TRACE_EVENT(sched_hmp_migrate_idle_running,
612
613         TP_PROTO(struct task_struct *tsk, int running),
614
615         TP_ARGS(tsk, running),
616
617         TP_STRUCT__entry(
618                 __array(char, comm, TASK_COMM_LEN)
619                 __field(int, running)
620         ),
621
622         TP_fast_assign(
623                 memcpy(__entry->comm, tsk->comm, TASK_COMM_LEN);
624                 __entry->running = running;
625         ),
626
627         TP_printk("running=%d comm=%s",
628                 __entry->running, __entry->comm)
629 );
630
631 /*
632  * Tracepoint for HMP (CONFIG_SCHED_HMP) task migrations.
633  */
634 #define HMP_MIGRATE_WAKEUP 0
635 #define HMP_MIGRATE_FORCE  1
636 #define HMP_MIGRATE_OFFLOAD 2
637 #define HMP_MIGRATE_IDLE_PULL 3
638 TRACE_EVENT(sched_hmp_migrate,
639
640         TP_PROTO(struct task_struct *tsk, int dest, int force),
641
642         TP_ARGS(tsk, dest, force),
643
644         TP_STRUCT__entry(
645                 __array(char, comm, TASK_COMM_LEN)
646                 __field(pid_t, pid)
647                 __field(int,  dest)
648                 __field(int,  force)
649         ),
650
651         TP_fast_assign(
652         memcpy(__entry->comm, tsk->comm, TASK_COMM_LEN);
653                 __entry->pid   = tsk->pid;
654                 __entry->dest  = dest;
655                 __entry->force = force;
656         ),
657
658         TP_printk("comm=%s pid=%d dest=%d force=%d",
659                         __entry->comm, __entry->pid,
660                         __entry->dest, __entry->force)
661 );
662
663 TRACE_EVENT(sched_hmp_offload_abort,
664
665         TP_PROTO(int cpu, int data, char *label),
666
667         TP_ARGS(cpu,data,label),
668
669         TP_STRUCT__entry(
670                 __array(char, label, 64)
671                 __field(int, cpu)
672                 __field(int, data)
673         ),
674
675         TP_fast_assign(
676                 strncpy(__entry->label, label, 64);
677                 __entry->cpu   = cpu;
678                 __entry->data = data;
679         ),
680
681         TP_printk("cpu=%d data=%d label=%63s",
682                         __entry->cpu, __entry->data,
683                         __entry->label)
684 );
685
686 TRACE_EVENT(sched_hmp_offload_succeed,
687
688         TP_PROTO(int cpu, int dest_cpu),
689
690         TP_ARGS(cpu,dest_cpu),
691
692         TP_STRUCT__entry(
693                 __field(int, cpu)
694                 __field(int, dest_cpu)
695         ),
696
697         TP_fast_assign(
698                 __entry->cpu   = cpu;
699                 __entry->dest_cpu = dest_cpu;
700         ),
701
702         TP_printk("cpu=%d dest=%d",
703                         __entry->cpu,
704                         __entry->dest_cpu)
705 );
706
707 #endif /* _TRACE_SCHED_H */
708
709 /* This part must be outside protection */
710 #include <trace/define_trace.h>