diff options
Diffstat (limited to 'kernel/trace/trace_sched_switch.c')
| -rw-r--r-- | kernel/trace/trace_sched_switch.c | 24 | 
1 files changed, 10 insertions, 14 deletions
diff --git a/kernel/trace/trace_sched_switch.c b/kernel/trace/trace_sched_switch.c index df175cb4564..de35f200abd 100644 --- a/kernel/trace/trace_sched_switch.c +++ b/kernel/trace/trace_sched_switch.c @@ -18,6 +18,7 @@ static struct trace_array	*ctx_trace;  static int __read_mostly	tracer_enabled;  static int			sched_ref;  static DEFINE_MUTEX(sched_register_mutex); +static int			sched_stopped;  static void  probe_sched_switch(struct rq *__rq, struct task_struct *prev, @@ -28,7 +29,7 @@ probe_sched_switch(struct rq *__rq, struct task_struct *prev,  	int cpu;  	int pc; -	if (!sched_ref) +	if (!sched_ref || sched_stopped)  		return;  	tracing_record_cmdline(prev); @@ -43,7 +44,7 @@ probe_sched_switch(struct rq *__rq, struct task_struct *prev,  	data = ctx_trace->data[cpu];  	if (likely(!atomic_read(&data->disabled))) -		tracing_sched_switch_trace(ctx_trace, data, prev, next, flags, pc); +		tracing_sched_switch_trace(ctx_trace, prev, next, flags, pc);  	local_irq_restore(flags);  } @@ -66,7 +67,7 @@ probe_sched_wakeup(struct rq *__rq, struct task_struct *wakee, int success)  	data = ctx_trace->data[cpu];  	if (likely(!atomic_read(&data->disabled))) -		tracing_sched_wakeup_trace(ctx_trace, data, wakee, current, +		tracing_sched_wakeup_trace(ctx_trace, wakee, current,  					   flags, pc);  	local_irq_restore(flags); @@ -93,7 +94,7 @@ static int tracing_sched_register(void)  	ret = register_trace_sched_switch(probe_sched_switch);  	if (ret) {  		pr_info("sched trace: Couldn't activate tracepoint" -			" probe to kernel_sched_schedule\n"); +			" probe to kernel_sched_switch\n");  		goto fail_deprobe_wake_new;  	} @@ -185,12 +186,6 @@ void tracing_sched_switch_assign_trace(struct trace_array *tr)  	ctx_trace = tr;  } -static void start_sched_trace(struct trace_array *tr) -{ -	tracing_reset_online_cpus(tr); -	tracing_start_sched_switch_record(); -} -  static void stop_sched_trace(struct trace_array *tr)  {  	tracing_stop_sched_switch_record(); @@ -199,7 +194,8 @@ static void stop_sched_trace(struct trace_array *tr)  static int sched_switch_trace_init(struct trace_array *tr)  {  	ctx_trace = tr; -	start_sched_trace(tr); +	tracing_reset_online_cpus(tr); +	tracing_start_sched_switch_record();  	return 0;  } @@ -211,13 +207,12 @@ static void sched_switch_trace_reset(struct trace_array *tr)  static void sched_switch_trace_start(struct trace_array *tr)  { -	tracing_reset_online_cpus(tr); -	tracing_start_sched_switch(); +	sched_stopped = 0;  }  static void sched_switch_trace_stop(struct trace_array *tr)  { -	tracing_stop_sched_switch(); +	sched_stopped = 1;  }  static struct tracer sched_switch_trace __read_mostly = @@ -227,6 +222,7 @@ static struct tracer sched_switch_trace __read_mostly =  	.reset		= sched_switch_trace_reset,  	.start		= sched_switch_trace_start,  	.stop		= sched_switch_trace_stop, +	.wait_pipe	= poll_wait_pipe,  #ifdef CONFIG_FTRACE_SELFTEST  	.selftest    = trace_selftest_startup_sched_switch,  #endif  |