forked from luck/tmp_suning_uos_patched
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: Steven Rostedt <srostedt@redhat.com>
This commit is contained in:
parent
97e7e4f391
commit
5fec6ddcb4
|
@ -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,
|
||||||
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)
|
||||||
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)
|
||||||
|
|
||||||
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 =
|
||||||
|
|
Loading…
Reference in New Issue
Block a user