| Li Zefan | d0b6e04 | 2009-07-13 10:33:21 +0800 | [diff] [blame] | 1 | #undef TRACE_SYSTEM | 
|  | 2 | #define TRACE_SYSTEM sched | 
|  | 3 |  | 
| Steven Rostedt | ea20d92 | 2009-04-10 08:54:16 -0400 | [diff] [blame] | 4 | #if !defined(_TRACE_SCHED_H) || defined(TRACE_HEADER_MULTI_READ) | 
| Mathieu Desnoyers | 0a16b60 | 2008-07-18 12:16:17 -0400 | [diff] [blame] | 5 | #define _TRACE_SCHED_H | 
|  | 6 |  | 
|  | 7 | #include <linux/sched.h> | 
|  | 8 | #include <linux/tracepoint.h> | 
|  | 9 |  | 
| Steven Rostedt | ea20d92 | 2009-04-10 08:54:16 -0400 | [diff] [blame] | 10 | /* | 
|  | 11 | * Tracepoint for calling kthread_stop, performed to end a kthread: | 
|  | 12 | */ | 
|  | 13 | TRACE_EVENT(sched_kthread_stop, | 
|  | 14 |  | 
|  | 15 | TP_PROTO(struct task_struct *t), | 
|  | 16 |  | 
|  | 17 | TP_ARGS(t), | 
|  | 18 |  | 
|  | 19 | TP_STRUCT__entry( | 
|  | 20 | __array(	char,	comm,	TASK_COMM_LEN	) | 
|  | 21 | __field(	pid_t,	pid			) | 
|  | 22 | ), | 
|  | 23 |  | 
|  | 24 | TP_fast_assign( | 
|  | 25 | memcpy(__entry->comm, t->comm, TASK_COMM_LEN); | 
|  | 26 | __entry->pid	= t->pid; | 
|  | 27 | ), | 
|  | 28 |  | 
| Ingo Molnar | 434a83c | 2009-10-15 11:50:39 +0200 | [diff] [blame] | 29 | TP_printk("comm=%s pid=%d", __entry->comm, __entry->pid) | 
| Steven Rostedt | ea20d92 | 2009-04-10 08:54:16 -0400 | [diff] [blame] | 30 | ); | 
|  | 31 |  | 
|  | 32 | /* | 
|  | 33 | * Tracepoint for the return value of the kthread stopping: | 
|  | 34 | */ | 
|  | 35 | TRACE_EVENT(sched_kthread_stop_ret, | 
|  | 36 |  | 
|  | 37 | TP_PROTO(int ret), | 
|  | 38 |  | 
|  | 39 | TP_ARGS(ret), | 
|  | 40 |  | 
|  | 41 | TP_STRUCT__entry( | 
|  | 42 | __field(	int,	ret	) | 
|  | 43 | ), | 
|  | 44 |  | 
|  | 45 | TP_fast_assign( | 
|  | 46 | __entry->ret	= ret; | 
|  | 47 | ), | 
|  | 48 |  | 
| Ingo Molnar | 434a83c | 2009-10-15 11:50:39 +0200 | [diff] [blame] | 49 | TP_printk("ret=%d", __entry->ret) | 
| Steven Rostedt | ea20d92 | 2009-04-10 08:54:16 -0400 | [diff] [blame] | 50 | ); | 
|  | 51 |  | 
|  | 52 | /* | 
| Steven Rostedt | ea20d92 | 2009-04-10 08:54:16 -0400 | [diff] [blame] | 53 | * Tracepoint for waking up a task: | 
| Steven Rostedt | ea20d92 | 2009-04-10 08:54:16 -0400 | [diff] [blame] | 54 | */ | 
| Ingo Molnar | 091ad36 | 2009-11-26 09:04:55 +0100 | [diff] [blame] | 55 | DECLARE_EVENT_CLASS(sched_wakeup_template, | 
| Steven Rostedt | ea20d92 | 2009-04-10 08:54:16 -0400 | [diff] [blame] | 56 |  | 
| Peter Zijlstra | 27a9da6 | 2010-05-04 20:36:56 +0200 | [diff] [blame] | 57 | TP_PROTO(struct task_struct *p, int success), | 
| Steven Rostedt | ea20d92 | 2009-04-10 08:54:16 -0400 | [diff] [blame] | 58 |  | 
| Peter Zijlstra | 27a9da6 | 2010-05-04 20:36:56 +0200 | [diff] [blame] | 59 | TP_ARGS(p, success), | 
| Steven Rostedt | ea20d92 | 2009-04-10 08:54:16 -0400 | [diff] [blame] | 60 |  | 
|  | 61 | TP_STRUCT__entry( | 
|  | 62 | __array(	char,	comm,	TASK_COMM_LEN	) | 
|  | 63 | __field(	pid_t,	pid			) | 
|  | 64 | __field(	int,	prio			) | 
|  | 65 | __field(	int,	success			) | 
| Ingo Molnar | 434a83c | 2009-10-15 11:50:39 +0200 | [diff] [blame] | 66 | __field(	int,	target_cpu		) | 
| Steven Rostedt | ea20d92 | 2009-04-10 08:54:16 -0400 | [diff] [blame] | 67 | ), | 
|  | 68 |  | 
|  | 69 | TP_fast_assign( | 
|  | 70 | memcpy(__entry->comm, p->comm, TASK_COMM_LEN); | 
|  | 71 | __entry->pid		= p->pid; | 
|  | 72 | __entry->prio		= p->prio; | 
|  | 73 | __entry->success	= success; | 
| Ingo Molnar | 434a83c | 2009-10-15 11:50:39 +0200 | [diff] [blame] | 74 | __entry->target_cpu	= task_cpu(p); | 
| Steven Rostedt | ea20d92 | 2009-04-10 08:54:16 -0400 | [diff] [blame] | 75 | ), | 
|  | 76 |  | 
| Ingo Molnar | 434a83c | 2009-10-15 11:50:39 +0200 | [diff] [blame] | 77 | TP_printk("comm=%s pid=%d prio=%d success=%d target_cpu=%03d", | 
| Steven Rostedt | ea20d92 | 2009-04-10 08:54:16 -0400 | [diff] [blame] | 78 | __entry->comm, __entry->pid, __entry->prio, | 
| Ingo Molnar | 434a83c | 2009-10-15 11:50:39 +0200 | [diff] [blame] | 79 | __entry->success, __entry->target_cpu) | 
| Steven Rostedt | ea20d92 | 2009-04-10 08:54:16 -0400 | [diff] [blame] | 80 | ); | 
|  | 81 |  | 
| Steven Rostedt | 75ec29a | 2009-11-18 20:48:08 -0500 | [diff] [blame] | 82 | DEFINE_EVENT(sched_wakeup_template, sched_wakeup, | 
| Peter Zijlstra | 27a9da6 | 2010-05-04 20:36:56 +0200 | [diff] [blame] | 83 | TP_PROTO(struct task_struct *p, int success), | 
|  | 84 | TP_ARGS(p, success)); | 
| Steven Rostedt | 75ec29a | 2009-11-18 20:48:08 -0500 | [diff] [blame] | 85 |  | 
| Steven Rostedt | ea20d92 | 2009-04-10 08:54:16 -0400 | [diff] [blame] | 86 | /* | 
|  | 87 | * Tracepoint for waking up a new task: | 
| Steven Rostedt | ea20d92 | 2009-04-10 08:54:16 -0400 | [diff] [blame] | 88 | */ | 
| Steven Rostedt | 75ec29a | 2009-11-18 20:48:08 -0500 | [diff] [blame] | 89 | DEFINE_EVENT(sched_wakeup_template, sched_wakeup_new, | 
| Peter Zijlstra | 27a9da6 | 2010-05-04 20:36:56 +0200 | [diff] [blame] | 90 | TP_PROTO(struct task_struct *p, int success), | 
|  | 91 | TP_ARGS(p, success)); | 
| Steven Rostedt | ea20d92 | 2009-04-10 08:54:16 -0400 | [diff] [blame] | 92 |  | 
| Peter Zijlstra | 02f7269 | 2010-05-31 18:13:25 +0200 | [diff] [blame] | 93 | #ifdef CREATE_TRACE_POINTS | 
|  | 94 | static inline long __trace_sched_switch_state(struct task_struct *p) | 
|  | 95 | { | 
|  | 96 | long state = p->state; | 
|  | 97 |  | 
|  | 98 | #ifdef CONFIG_PREEMPT | 
|  | 99 | /* | 
|  | 100 | * For all intents and purposes a preempted task is a running task. | 
|  | 101 | */ | 
|  | 102 | if (task_thread_info(p)->preempt_count & PREEMPT_ACTIVE) | 
| Peter Zijlstra | 557ab42 | 2011-09-16 11:16:43 +0200 | [diff] [blame] | 103 | state = TASK_RUNNING | TASK_STATE_MAX; | 
| Peter Zijlstra | 02f7269 | 2010-05-31 18:13:25 +0200 | [diff] [blame] | 104 | #endif | 
|  | 105 |  | 
|  | 106 | return state; | 
|  | 107 | } | 
|  | 108 | #endif | 
|  | 109 |  | 
| Steven Rostedt | ea20d92 | 2009-04-10 08:54:16 -0400 | [diff] [blame] | 110 | /* | 
|  | 111 | * Tracepoint for task switches, performed by the scheduler: | 
| Steven Rostedt | ea20d92 | 2009-04-10 08:54:16 -0400 | [diff] [blame] | 112 | */ | 
|  | 113 | TRACE_EVENT(sched_switch, | 
|  | 114 |  | 
| Peter Zijlstra | 27a9da6 | 2010-05-04 20:36:56 +0200 | [diff] [blame] | 115 | TP_PROTO(struct task_struct *prev, | 
| Steven Rostedt | ea20d92 | 2009-04-10 08:54:16 -0400 | [diff] [blame] | 116 | struct task_struct *next), | 
|  | 117 |  | 
| Peter Zijlstra | 27a9da6 | 2010-05-04 20:36:56 +0200 | [diff] [blame] | 118 | TP_ARGS(prev, next), | 
| Steven Rostedt | ea20d92 | 2009-04-10 08:54:16 -0400 | [diff] [blame] | 119 |  | 
|  | 120 | TP_STRUCT__entry( | 
|  | 121 | __array(	char,	prev_comm,	TASK_COMM_LEN	) | 
|  | 122 | __field(	pid_t,	prev_pid			) | 
|  | 123 | __field(	int,	prev_prio			) | 
| Steven Rostedt | 937cdb9 | 2009-05-15 10:51:13 -0400 | [diff] [blame] | 124 | __field(	long,	prev_state			) | 
| Steven Rostedt | ea20d92 | 2009-04-10 08:54:16 -0400 | [diff] [blame] | 125 | __array(	char,	next_comm,	TASK_COMM_LEN	) | 
|  | 126 | __field(	pid_t,	next_pid			) | 
|  | 127 | __field(	int,	next_prio			) | 
|  | 128 | ), | 
|  | 129 |  | 
|  | 130 | TP_fast_assign( | 
|  | 131 | memcpy(__entry->next_comm, next->comm, TASK_COMM_LEN); | 
|  | 132 | __entry->prev_pid	= prev->pid; | 
|  | 133 | __entry->prev_prio	= prev->prio; | 
| Peter Zijlstra | 02f7269 | 2010-05-31 18:13:25 +0200 | [diff] [blame] | 134 | __entry->prev_state	= __trace_sched_switch_state(prev); | 
| Steven Rostedt | ea20d92 | 2009-04-10 08:54:16 -0400 | [diff] [blame] | 135 | memcpy(__entry->prev_comm, prev->comm, TASK_COMM_LEN); | 
|  | 136 | __entry->next_pid	= next->pid; | 
|  | 137 | __entry->next_prio	= next->prio; | 
|  | 138 | ), | 
|  | 139 |  | 
| Peter Zijlstra | 557ab42 | 2011-09-16 11:16:43 +0200 | [diff] [blame] | 140 | TP_printk("prev_comm=%s prev_pid=%d prev_prio=%d prev_state=%s%s ==> next_comm=%s next_pid=%d next_prio=%d", | 
| Steven Rostedt | ea20d92 | 2009-04-10 08:54:16 -0400 | [diff] [blame] | 141 | __entry->prev_comm, __entry->prev_pid, __entry->prev_prio, | 
| Peter Zijlstra | 557ab42 | 2011-09-16 11:16:43 +0200 | [diff] [blame] | 142 | __entry->prev_state & (TASK_STATE_MAX-1) ? | 
|  | 143 | __print_flags(__entry->prev_state & (TASK_STATE_MAX-1), "|", | 
| Steven Rostedt | 937cdb9 | 2009-05-15 10:51:13 -0400 | [diff] [blame] | 144 | { 1, "S"} , { 2, "D" }, { 4, "T" }, { 8, "t" }, | 
|  | 145 | { 16, "Z" }, { 32, "X" }, { 64, "x" }, | 
|  | 146 | { 128, "W" }) : "R", | 
| Peter Zijlstra | 557ab42 | 2011-09-16 11:16:43 +0200 | [diff] [blame] | 147 | __entry->prev_state & TASK_STATE_MAX ? "+" : "", | 
| Steven Rostedt | ea20d92 | 2009-04-10 08:54:16 -0400 | [diff] [blame] | 148 | __entry->next_comm, __entry->next_pid, __entry->next_prio) | 
|  | 149 | ); | 
|  | 150 |  | 
|  | 151 | /* | 
|  | 152 | * Tracepoint for a task being migrated: | 
|  | 153 | */ | 
|  | 154 | TRACE_EVENT(sched_migrate_task, | 
|  | 155 |  | 
| Mathieu Desnoyers | de1d728 | 2009-05-05 16:49:59 +0800 | [diff] [blame] | 156 | TP_PROTO(struct task_struct *p, int dest_cpu), | 
| Steven Rostedt | ea20d92 | 2009-04-10 08:54:16 -0400 | [diff] [blame] | 157 |  | 
| Mathieu Desnoyers | de1d728 | 2009-05-05 16:49:59 +0800 | [diff] [blame] | 158 | TP_ARGS(p, dest_cpu), | 
| Steven Rostedt | ea20d92 | 2009-04-10 08:54:16 -0400 | [diff] [blame] | 159 |  | 
|  | 160 | TP_STRUCT__entry( | 
|  | 161 | __array(	char,	comm,	TASK_COMM_LEN	) | 
|  | 162 | __field(	pid_t,	pid			) | 
|  | 163 | __field(	int,	prio			) | 
|  | 164 | __field(	int,	orig_cpu		) | 
|  | 165 | __field(	int,	dest_cpu		) | 
|  | 166 | ), | 
|  | 167 |  | 
|  | 168 | TP_fast_assign( | 
|  | 169 | memcpy(__entry->comm, p->comm, TASK_COMM_LEN); | 
|  | 170 | __entry->pid		= p->pid; | 
|  | 171 | __entry->prio		= p->prio; | 
| Mathieu Desnoyers | de1d728 | 2009-05-05 16:49:59 +0800 | [diff] [blame] | 172 | __entry->orig_cpu	= task_cpu(p); | 
| Steven Rostedt | ea20d92 | 2009-04-10 08:54:16 -0400 | [diff] [blame] | 173 | __entry->dest_cpu	= dest_cpu; | 
|  | 174 | ), | 
|  | 175 |  | 
| Ingo Molnar | 434a83c | 2009-10-15 11:50:39 +0200 | [diff] [blame] | 176 | TP_printk("comm=%s pid=%d prio=%d orig_cpu=%d dest_cpu=%d", | 
| Steven Rostedt | ea20d92 | 2009-04-10 08:54:16 -0400 | [diff] [blame] | 177 | __entry->comm, __entry->pid, __entry->prio, | 
|  | 178 | __entry->orig_cpu, __entry->dest_cpu) | 
|  | 179 | ); | 
|  | 180 |  | 
| Ingo Molnar | 091ad36 | 2009-11-26 09:04:55 +0100 | [diff] [blame] | 181 | DECLARE_EVENT_CLASS(sched_process_template, | 
| Steven Rostedt | ea20d92 | 2009-04-10 08:54:16 -0400 | [diff] [blame] | 182 |  | 
|  | 183 | TP_PROTO(struct task_struct *p), | 
|  | 184 |  | 
|  | 185 | TP_ARGS(p), | 
|  | 186 |  | 
|  | 187 | TP_STRUCT__entry( | 
|  | 188 | __array(	char,	comm,	TASK_COMM_LEN	) | 
|  | 189 | __field(	pid_t,	pid			) | 
|  | 190 | __field(	int,	prio			) | 
|  | 191 | ), | 
|  | 192 |  | 
|  | 193 | TP_fast_assign( | 
|  | 194 | memcpy(__entry->comm, p->comm, TASK_COMM_LEN); | 
|  | 195 | __entry->pid		= p->pid; | 
|  | 196 | __entry->prio		= p->prio; | 
|  | 197 | ), | 
|  | 198 |  | 
| Ingo Molnar | 434a83c | 2009-10-15 11:50:39 +0200 | [diff] [blame] | 199 | TP_printk("comm=%s pid=%d prio=%d", | 
| Steven Rostedt | ea20d92 | 2009-04-10 08:54:16 -0400 | [diff] [blame] | 200 | __entry->comm, __entry->pid, __entry->prio) | 
|  | 201 | ); | 
|  | 202 |  | 
|  | 203 | /* | 
| Steven Rostedt | 75ec29a | 2009-11-18 20:48:08 -0500 | [diff] [blame] | 204 | * Tracepoint for freeing a task: | 
|  | 205 | */ | 
|  | 206 | DEFINE_EVENT(sched_process_template, sched_process_free, | 
|  | 207 | TP_PROTO(struct task_struct *p), | 
|  | 208 | TP_ARGS(p)); | 
|  | 209 |  | 
|  | 210 |  | 
|  | 211 | /* | 
| Steven Rostedt | ea20d92 | 2009-04-10 08:54:16 -0400 | [diff] [blame] | 212 | * Tracepoint for a task exiting: | 
|  | 213 | */ | 
| Steven Rostedt | 75ec29a | 2009-11-18 20:48:08 -0500 | [diff] [blame] | 214 | DEFINE_EVENT(sched_process_template, sched_process_exit, | 
|  | 215 | TP_PROTO(struct task_struct *p), | 
|  | 216 | TP_ARGS(p)); | 
| Steven Rostedt | ea20d92 | 2009-04-10 08:54:16 -0400 | [diff] [blame] | 217 |  | 
|  | 218 | /* | 
| Li Zefan | 210f766 | 2010-05-24 16:23:35 +0800 | [diff] [blame] | 219 | * Tracepoint for waiting on task to unschedule: | 
|  | 220 | */ | 
|  | 221 | DEFINE_EVENT(sched_process_template, sched_wait_task, | 
|  | 222 | TP_PROTO(struct task_struct *p), | 
|  | 223 | TP_ARGS(p)); | 
|  | 224 |  | 
|  | 225 | /* | 
| Steven Rostedt | ea20d92 | 2009-04-10 08:54:16 -0400 | [diff] [blame] | 226 | * Tracepoint for a waiting task: | 
|  | 227 | */ | 
|  | 228 | TRACE_EVENT(sched_process_wait, | 
|  | 229 |  | 
|  | 230 | TP_PROTO(struct pid *pid), | 
|  | 231 |  | 
|  | 232 | TP_ARGS(pid), | 
|  | 233 |  | 
|  | 234 | TP_STRUCT__entry( | 
|  | 235 | __array(	char,	comm,	TASK_COMM_LEN	) | 
|  | 236 | __field(	pid_t,	pid			) | 
|  | 237 | __field(	int,	prio			) | 
|  | 238 | ), | 
|  | 239 |  | 
|  | 240 | TP_fast_assign( | 
|  | 241 | memcpy(__entry->comm, current->comm, TASK_COMM_LEN); | 
|  | 242 | __entry->pid		= pid_nr(pid); | 
|  | 243 | __entry->prio		= current->prio; | 
|  | 244 | ), | 
|  | 245 |  | 
| Ingo Molnar | 434a83c | 2009-10-15 11:50:39 +0200 | [diff] [blame] | 246 | TP_printk("comm=%s pid=%d prio=%d", | 
| Steven Rostedt | ea20d92 | 2009-04-10 08:54:16 -0400 | [diff] [blame] | 247 | __entry->comm, __entry->pid, __entry->prio) | 
|  | 248 | ); | 
|  | 249 |  | 
|  | 250 | /* | 
|  | 251 | * Tracepoint for do_fork: | 
|  | 252 | */ | 
|  | 253 | TRACE_EVENT(sched_process_fork, | 
|  | 254 |  | 
|  | 255 | TP_PROTO(struct task_struct *parent, struct task_struct *child), | 
|  | 256 |  | 
|  | 257 | TP_ARGS(parent, child), | 
|  | 258 |  | 
|  | 259 | TP_STRUCT__entry( | 
|  | 260 | __array(	char,	parent_comm,	TASK_COMM_LEN	) | 
|  | 261 | __field(	pid_t,	parent_pid			) | 
|  | 262 | __array(	char,	child_comm,	TASK_COMM_LEN	) | 
|  | 263 | __field(	pid_t,	child_pid			) | 
|  | 264 | ), | 
|  | 265 |  | 
|  | 266 | TP_fast_assign( | 
|  | 267 | memcpy(__entry->parent_comm, parent->comm, TASK_COMM_LEN); | 
|  | 268 | __entry->parent_pid	= parent->pid; | 
|  | 269 | memcpy(__entry->child_comm, child->comm, TASK_COMM_LEN); | 
|  | 270 | __entry->child_pid	= child->pid; | 
|  | 271 | ), | 
|  | 272 |  | 
| Ingo Molnar | 434a83c | 2009-10-15 11:50:39 +0200 | [diff] [blame] | 273 | TP_printk("comm=%s pid=%d child_comm=%s child_pid=%d", | 
| Steven Rostedt | ea20d92 | 2009-04-10 08:54:16 -0400 | [diff] [blame] | 274 | __entry->parent_comm, __entry->parent_pid, | 
|  | 275 | __entry->child_comm, __entry->child_pid) | 
|  | 276 | ); | 
|  | 277 |  | 
|  | 278 | /* | 
| Peter Zijlstra | 768d0c2 | 2009-07-23 20:13:26 +0200 | [diff] [blame] | 279 | * XXX the below sched_stat tracepoints only apply to SCHED_OTHER/BATCH/IDLE | 
|  | 280 | *     adding sched_stat support to SCHED_FIFO/RR would be welcome. | 
|  | 281 | */ | 
| Ingo Molnar | 091ad36 | 2009-11-26 09:04:55 +0100 | [diff] [blame] | 282 | DECLARE_EVENT_CLASS(sched_stat_template, | 
| Peter Zijlstra | 768d0c2 | 2009-07-23 20:13:26 +0200 | [diff] [blame] | 283 |  | 
|  | 284 | TP_PROTO(struct task_struct *tsk, u64 delay), | 
|  | 285 |  | 
|  | 286 | TP_ARGS(tsk, delay), | 
|  | 287 |  | 
|  | 288 | TP_STRUCT__entry( | 
|  | 289 | __array( char,	comm,	TASK_COMM_LEN	) | 
|  | 290 | __field( pid_t,	pid			) | 
|  | 291 | __field( u64,	delay			) | 
|  | 292 | ), | 
|  | 293 |  | 
|  | 294 | TP_fast_assign( | 
|  | 295 | memcpy(__entry->comm, tsk->comm, TASK_COMM_LEN); | 
|  | 296 | __entry->pid	= tsk->pid; | 
|  | 297 | __entry->delay	= delay; | 
|  | 298 | ) | 
|  | 299 | TP_perf_assign( | 
|  | 300 | __perf_count(delay); | 
|  | 301 | ), | 
|  | 302 |  | 
| Ingo Molnar | 434a83c | 2009-10-15 11:50:39 +0200 | [diff] [blame] | 303 | TP_printk("comm=%s pid=%d delay=%Lu [ns]", | 
| Peter Zijlstra | 768d0c2 | 2009-07-23 20:13:26 +0200 | [diff] [blame] | 304 | __entry->comm, __entry->pid, | 
|  | 305 | (unsigned long long)__entry->delay) | 
|  | 306 | ); | 
|  | 307 |  | 
| Steven Rostedt | 75ec29a | 2009-11-18 20:48:08 -0500 | [diff] [blame] | 308 |  | 
|  | 309 | /* | 
|  | 310 | * Tracepoint for accounting wait time (time the task is runnable | 
|  | 311 | * but not actually running due to scheduler contention). | 
|  | 312 | */ | 
|  | 313 | DEFINE_EVENT(sched_stat_template, sched_stat_wait, | 
|  | 314 | TP_PROTO(struct task_struct *tsk, u64 delay), | 
|  | 315 | TP_ARGS(tsk, delay)); | 
|  | 316 |  | 
|  | 317 | /* | 
|  | 318 | * Tracepoint for accounting sleep time (time the task is not runnable, | 
|  | 319 | * including iowait, see below). | 
|  | 320 | */ | 
| Li Zefan | 470dda7 | 2009-11-26 15:08:01 +0800 | [diff] [blame] | 321 | DEFINE_EVENT(sched_stat_template, sched_stat_sleep, | 
|  | 322 | TP_PROTO(struct task_struct *tsk, u64 delay), | 
|  | 323 | TP_ARGS(tsk, delay)); | 
| Steven Rostedt | 75ec29a | 2009-11-18 20:48:08 -0500 | [diff] [blame] | 324 |  | 
|  | 325 | /* | 
|  | 326 | * Tracepoint for accounting iowait time (time the task is not runnable | 
|  | 327 | * due to waiting on IO to complete). | 
|  | 328 | */ | 
| Li Zefan | 470dda7 | 2009-11-26 15:08:01 +0800 | [diff] [blame] | 329 | DEFINE_EVENT(sched_stat_template, sched_stat_iowait, | 
|  | 330 | TP_PROTO(struct task_struct *tsk, u64 delay), | 
|  | 331 | TP_ARGS(tsk, delay)); | 
| Steven Rostedt | 75ec29a | 2009-11-18 20:48:08 -0500 | [diff] [blame] | 332 |  | 
| Peter Zijlstra | 768d0c2 | 2009-07-23 20:13:26 +0200 | [diff] [blame] | 333 | /* | 
| Ingo Molnar | f977bb4 | 2009-09-13 18:15:54 +0200 | [diff] [blame] | 334 | * Tracepoint for accounting runtime (time the task is executing | 
|  | 335 | * on a CPU). | 
|  | 336 | */ | 
|  | 337 | TRACE_EVENT(sched_stat_runtime, | 
|  | 338 |  | 
|  | 339 | TP_PROTO(struct task_struct *tsk, u64 runtime, u64 vruntime), | 
|  | 340 |  | 
|  | 341 | TP_ARGS(tsk, runtime, vruntime), | 
|  | 342 |  | 
|  | 343 | TP_STRUCT__entry( | 
|  | 344 | __array( char,	comm,	TASK_COMM_LEN	) | 
|  | 345 | __field( pid_t,	pid			) | 
|  | 346 | __field( u64,	runtime			) | 
|  | 347 | __field( u64,	vruntime			) | 
|  | 348 | ), | 
|  | 349 |  | 
|  | 350 | TP_fast_assign( | 
|  | 351 | memcpy(__entry->comm, tsk->comm, TASK_COMM_LEN); | 
|  | 352 | __entry->pid		= tsk->pid; | 
|  | 353 | __entry->runtime	= runtime; | 
|  | 354 | __entry->vruntime	= vruntime; | 
|  | 355 | ) | 
|  | 356 | TP_perf_assign( | 
|  | 357 | __perf_count(runtime); | 
|  | 358 | ), | 
|  | 359 |  | 
| Ingo Molnar | 434a83c | 2009-10-15 11:50:39 +0200 | [diff] [blame] | 360 | TP_printk("comm=%s pid=%d runtime=%Lu [ns] vruntime=%Lu [ns]", | 
| Ingo Molnar | f977bb4 | 2009-09-13 18:15:54 +0200 | [diff] [blame] | 361 | __entry->comm, __entry->pid, | 
|  | 362 | (unsigned long long)__entry->runtime, | 
|  | 363 | (unsigned long long)__entry->vruntime) | 
|  | 364 | ); | 
|  | 365 |  | 
| Steven Rostedt | a802707 | 2010-09-20 15:13:34 -0400 | [diff] [blame] | 366 | /* | 
|  | 367 | * Tracepoint for showing priority inheritance modifying a tasks | 
|  | 368 | * priority. | 
|  | 369 | */ | 
|  | 370 | TRACE_EVENT(sched_pi_setprio, | 
|  | 371 |  | 
|  | 372 | TP_PROTO(struct task_struct *tsk, int newprio), | 
|  | 373 |  | 
|  | 374 | TP_ARGS(tsk, newprio), | 
|  | 375 |  | 
|  | 376 | TP_STRUCT__entry( | 
|  | 377 | __array( char,	comm,	TASK_COMM_LEN	) | 
|  | 378 | __field( pid_t,	pid			) | 
|  | 379 | __field( int,	oldprio			) | 
|  | 380 | __field( int,	newprio			) | 
|  | 381 | ), | 
|  | 382 |  | 
|  | 383 | TP_fast_assign( | 
|  | 384 | memcpy(__entry->comm, tsk->comm, TASK_COMM_LEN); | 
|  | 385 | __entry->pid		= tsk->pid; | 
|  | 386 | __entry->oldprio	= tsk->prio; | 
|  | 387 | __entry->newprio	= newprio; | 
|  | 388 | ), | 
|  | 389 |  | 
|  | 390 | TP_printk("comm=%s pid=%d oldprio=%d newprio=%d", | 
|  | 391 | __entry->comm, __entry->pid, | 
|  | 392 | __entry->oldprio, __entry->newprio) | 
|  | 393 | ); | 
|  | 394 |  | 
| Steven Rostedt | ea20d92 | 2009-04-10 08:54:16 -0400 | [diff] [blame] | 395 | #endif /* _TRACE_SCHED_H */ | 
| Steven Rostedt | a8d154b | 2009-04-10 09:36:00 -0400 | [diff] [blame] | 396 |  | 
|  | 397 | /* This part must be outside protection */ | 
|  | 398 | #include <trace/define_trace.h> |