diff options
Diffstat (limited to 'include/trace/events/sched.h')
| -rw-r--r-- | include/trace/events/sched.h | 19 | 
1 files changed, 18 insertions, 1 deletions
diff --git a/include/trace/events/sched.h b/include/trace/events/sched.h index 4f733ecea46..b9e1dd6c620 100644 --- a/include/trace/events/sched.h +++ b/include/trace/events/sched.h @@ -115,6 +115,23 @@ DEFINE_EVENT(sched_wakeup_template, sched_wakeup_new,  	     TP_PROTO(struct task_struct *p, int success),  	     TP_ARGS(p, success)); +#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. +	 */ +	if (task_thread_info(p)->preempt_count & PREEMPT_ACTIVE) +		state = TASK_RUNNING; +#endif + +	return state; +} +#endif +  /*   * Tracepoint for task switches, performed by the scheduler:   */ @@ -139,7 +156,7 @@ TRACE_EVENT(sched_switch,  		memcpy(__entry->next_comm, next->comm, TASK_COMM_LEN);  		__entry->prev_pid	= prev->pid;  		__entry->prev_prio	= prev->prio; -		__entry->prev_state	= prev->state; +		__entry->prev_state	= __trace_sched_switch_state(prev);  		memcpy(__entry->prev_comm, prev->comm, TASK_COMM_LEN);  		__entry->next_pid	= next->pid;  		__entry->next_prio	= next->prio;  |