]> err.no Git - linux-2.6/commitdiff
ftrace: fix up cmdline recording
authorSteven Rostedt <rostedt@goodmis.org>
Thu, 22 May 2008 15:49:22 +0000 (11:49 -0400)
committerThomas Gleixner <tglx@linutronix.de>
Mon, 26 May 2008 20:51:49 +0000 (22:51 +0200)
The new work with converting the trace hooks over to markers broke the
command line recording of ftrace. This patch fixes it again.

Signed-off-by: Steven Rostedt <srostedt@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
kernel/trace/trace.c
kernel/trace/trace.h
kernel/trace/trace_functions.c
kernel/trace/trace_sched_switch.c

index 583fe24903d39c35240bc66f976dd4a1b156ad02..0feae23d98931e1f1a725296fc0977411fc09eb3 100644 (file)
@@ -652,9 +652,6 @@ static char saved_cmdlines[SAVED_CMDLINES][TASK_COMM_LEN];
 static int cmdline_idx;
 static DEFINE_SPINLOCK(trace_cmdline_lock);
 
-/* trace in all context switches */
-atomic_t trace_record_cmdline_enabled __read_mostly;
-
 /* temporary disable recording */
 atomic_t trace_record_cmdline_disabled __read_mostly;
 
index c460e85e94ed81ddb64283c9bb4ea7749a384663..6b8bd8800d041ad4dcc98e2b10d3972a62f7642c 100644 (file)
@@ -218,6 +218,8 @@ void trace_function(struct trace_array *tr,
 
 void tracing_start_function_trace(void);
 void tracing_stop_function_trace(void);
+void tracing_start_cmdline_record(void);
+void tracing_stop_cmdline_record(void);
 int register_tracer(struct tracer *type);
 void unregister_tracer(struct tracer *type);
 
@@ -226,8 +228,6 @@ extern unsigned long nsecs_to_usecs(unsigned long nsecs);
 extern unsigned long tracing_max_latency;
 extern unsigned long tracing_thresh;
 
-extern atomic_t trace_record_cmdline_enabled;
-
 void update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cpu);
 void update_max_tr_single(struct trace_array *tr,
                          struct task_struct *tsk, int cpu);
index 0a084656d7cfd4901bd4fdbb585bc9adbc1a6d6e..7ee7dcd76b7db76b5eca8afade67b6ce60365542 100644 (file)
@@ -29,14 +29,14 @@ static void function_reset(struct trace_array *tr)
 static void start_function_trace(struct trace_array *tr)
 {
        function_reset(tr);
-       atomic_inc(&trace_record_cmdline_enabled);
+       tracing_start_cmdline_record();
        tracing_start_function_trace();
 }
 
 static void stop_function_trace(struct trace_array *tr)
 {
        tracing_stop_function_trace();
-       atomic_dec(&trace_record_cmdline_enabled);
+       tracing_stop_cmdline_record();
 }
 
 static void function_trace_init(struct trace_array *tr)
index 798ec0dc863c3e9e0541584c398a799304e91dfa..c16935d3bc5cd53f601a0a5961d01c7af3eac7de 100644 (file)
@@ -29,6 +29,9 @@ sched_switch_func(void *private, void *__rq, struct task_struct *prev,
        long disabled;
        int cpu;
 
+       tracing_record_cmdline(prev);
+       tracing_record_cmdline(next);
+
        if (!tracer_enabled)
                return;
 
@@ -63,8 +66,6 @@ sched_switch_callback(void *probe_data, void *call_data,
        prev = va_arg(*args, typeof(prev));
        next = va_arg(*args, typeof(next));
 
-       tracing_record_cmdline(prev);
-
        /*
         * If tracer_switch_func only points to the local
         * switch func, it still needs the ptr passed to it.
@@ -213,18 +214,26 @@ void tracing_stop_sched_switch(void)
                tracing_sched_unregister();
 }
 
+void tracing_start_cmdline_record(void)
+{
+       tracing_start_sched_switch();
+}
+
+void tracing_stop_cmdline_record(void)
+{
+       tracing_stop_sched_switch();
+}
+
 static void start_sched_trace(struct trace_array *tr)
 {
        sched_switch_reset(tr);
-       atomic_inc(&trace_record_cmdline_enabled);
        tracer_enabled = 1;
-       tracing_start_sched_switch();
+       tracing_start_cmdline_record();
 }
 
 static void stop_sched_trace(struct trace_array *tr)
 {
-       tracing_stop_sched_switch();
-       atomic_dec(&trace_record_cmdline_enabled);
+       tracing_stop_cmdline_record();
        tracer_enabled = 0;
 }