tracing: make sched_switch stop/start light weight
authorSteven Rostedt <srostedt@redhat.com>
Tue, 17 Mar 2009 23:59:53 +0000 (19:59 -0400)
committerSteven Rostedt <srostedt@redhat.com>
Wed, 18 Mar 2009 03:10:45 +0000 (23:10 -0400)
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>
kernel/trace/trace_sched_switch.c

index 77132c2cf3d97e6b7856cb93647c4044200e74ab..de35f200abd37321944f1fae494146aee60e3a6f 100644 (file)
@@ -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);
@@ -193,6 +194,7 @@ static void stop_sched_trace(struct trace_array *tr)
 static int sched_switch_trace_init(struct trace_array *tr)
 {
        ctx_trace = tr;
+       tracing_reset_online_cpus(tr);
        tracing_start_sched_switch_record();
        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)
 {
-       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 =
This page took 0.029877 seconds and 5 git commands to generate.