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