diff options
Diffstat (limited to 'kernel/trace/trace_sched_wakeup.c')
| -rw-r--r-- | kernel/trace/trace_sched_wakeup.c | 34 | 
1 files changed, 32 insertions, 2 deletions
diff --git a/kernel/trace/trace_sched_wakeup.c b/kernel/trace/trace_sched_wakeup.c index e27adef0171..f4895788610 100644 --- a/kernel/trace/trace_sched_wakeup.c +++ b/kernel/trace/trace_sched_wakeup.c @@ -25,6 +25,7 @@ static int __read_mostly	tracer_enabled;  static struct task_struct	*wakeup_task;  static int			wakeup_cpu;  static unsigned			wakeup_prio = -1; +static int			wakeup_rt;  static raw_spinlock_t wakeup_lock =  	(raw_spinlock_t)__RAW_SPIN_LOCK_UNLOCKED; @@ -224,7 +225,7 @@ probe_wakeup(struct rq *rq, struct task_struct *p, int success)  	tracing_record_cmdline(p);  	tracing_record_cmdline(current); -	if (likely(!rt_task(p)) || +	if ((wakeup_rt && !rt_task(p)) ||  			p->prio >= wakeup_prio ||  			p->prio >= current->prio)  		return; @@ -321,7 +322,7 @@ static void stop_wakeup_tracer(struct trace_array *tr)  	unregister_trace_sched_wakeup(probe_wakeup);  } -static int wakeup_tracer_init(struct trace_array *tr) +static int __wakeup_tracer_init(struct trace_array *tr)  {  	tracing_max_latency = 0;  	wakeup_trace = tr; @@ -329,6 +330,18 @@ static int wakeup_tracer_init(struct trace_array *tr)  	return 0;  } +static int wakeup_tracer_init(struct trace_array *tr) +{ +	wakeup_rt = 0; +	return __wakeup_tracer_init(tr); +} + +static int wakeup_rt_tracer_init(struct trace_array *tr) +{ +	wakeup_rt = 1; +	return __wakeup_tracer_init(tr); +} +  static void wakeup_tracer_reset(struct trace_array *tr)  {  	stop_wakeup_tracer(tr); @@ -360,6 +373,19 @@ static struct tracer wakeup_tracer __read_mostly =  #endif  }; +static struct tracer wakeup_rt_tracer __read_mostly = +{ +	.name		= "wakeup_rt", +	.init		= wakeup_rt_tracer_init, +	.reset		= wakeup_tracer_reset, +	.start		= wakeup_tracer_start, +	.stop		= wakeup_tracer_stop, +	.print_max	= 1, +#ifdef CONFIG_FTRACE_SELFTEST +	.selftest    = trace_selftest_startup_wakeup, +#endif +}; +  __init static int init_wakeup_tracer(void)  {  	int ret; @@ -368,6 +394,10 @@ __init static int init_wakeup_tracer(void)  	if (ret)  		return ret; +	ret = register_tracer(&wakeup_rt_tracer); +	if (ret) +		return ret; +  	return 0;  }  device_initcall(init_wakeup_tracer);  |