Commit 5fec6ddc authored by Steven Rostedt's avatar Steven Rostedt

tracing: make sched_switch stop/start light weight

The stopping and starting of a tracer should be light weight and
be able to be called in all contexts. The sched_switch grabbed
mutexes in the start/stop functions. This patch changes it to a
simple variable, on/off.
Signed-off-by: default avatarSteven Rostedt <srostedt@redhat.com>
parent 97e7e4f3
...@@ -18,6 +18,7 @@ static struct trace_array *ctx_trace; ...@@ -18,6 +18,7 @@ static struct trace_array *ctx_trace;
static int __read_mostly tracer_enabled; static int __read_mostly tracer_enabled;
static int sched_ref; static int sched_ref;
static DEFINE_MUTEX(sched_register_mutex); static DEFINE_MUTEX(sched_register_mutex);
static int sched_stopped;
static void static void
probe_sched_switch(struct rq *__rq, struct task_struct *prev, probe_sched_switch(struct rq *__rq, struct task_struct *prev,
...@@ -28,7 +29,7 @@ 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 cpu;
int pc; int pc;
if (!sched_ref) if (!sched_ref || sched_stopped)
return; return;
tracing_record_cmdline(prev); tracing_record_cmdline(prev);
...@@ -193,6 +194,7 @@ static void stop_sched_trace(struct trace_array *tr) ...@@ -193,6 +194,7 @@ static void stop_sched_trace(struct trace_array *tr)
static int sched_switch_trace_init(struct trace_array *tr) static int sched_switch_trace_init(struct trace_array *tr)
{ {
ctx_trace = tr; ctx_trace = tr;
tracing_reset_online_cpus(tr);
tracing_start_sched_switch_record(); tracing_start_sched_switch_record();
return 0; return 0;
} }
...@@ -205,13 +207,12 @@ static void sched_switch_trace_reset(struct trace_array *tr) ...@@ -205,13 +207,12 @@ static void sched_switch_trace_reset(struct trace_array *tr)
static void sched_switch_trace_start(struct trace_array *tr) static void sched_switch_trace_start(struct trace_array *tr)
{ {
tracing_reset_online_cpus(tr); sched_stopped = 0;
tracing_start_sched_switch();
} }
static void sched_switch_trace_stop(struct trace_array *tr) 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 = static struct tracer sched_switch_trace __read_mostly =
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment