]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
ftrace: fix comm on function trace output
authorSteven Rostedt <rostedt@goodmis.org>
Mon, 12 May 2008 19:21:00 +0000 (21:21 +0200)
committerThomas Gleixner <tglx@linutronix.de>
Fri, 23 May 2008 19:52:12 +0000 (21:52 +0200)
In cleaning up of the sched_switch code, the function trace recording
of task comms was removed. This patch adds back the recording of comms
for function trace. The output of ftrace now has the task comm instead
of <...>.

Signed-off-by: Steven Rostedt <srostedt@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
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 a102b11eacf2276784ee11271919ad25e5b5fa0f..1281969103b80f1907c69733233ef5221e115425 100644 (file)
@@ -620,7 +620,12 @@ static unsigned map_cmdline_to_pid[SAVED_CMDLINES];
 static char saved_cmdlines[SAVED_CMDLINES][TASK_COMM_LEN];
 static int cmdline_idx;
 static DEFINE_SPINLOCK(trace_cmdline_lock);
-atomic_t trace_record_cmdline_disabled;
+
+/* trace in all context switches */
+atomic_t trace_record_cmdline_enabled __read_mostly;
+
+/* temporary disable recording */
+atomic_t trace_record_cmdline_disabled __read_mostly;
 
 static void trace_init_cmdlines(void)
 {
index 21c29ee13e538c0ef21136b2a50a97612073ed3a..8991c5efcc74efc2e38403a7a04a1a5cf3a15070 100644 (file)
@@ -216,6 +216,8 @@ 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 4165d34bd28a4db79023f9698f9639d4a53851ab..0a084656d7cfd4901bd4fdbb585bc9adbc1a6d6e 100644 (file)
@@ -29,12 +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_function_trace();
 }
 
 static void stop_function_trace(struct trace_array *tr)
 {
        tracing_stop_function_trace();
+       atomic_dec(&trace_record_cmdline_enabled);
 }
 
 static void function_trace_init(struct trace_array *tr)
index 5671db0e1827e99b7828cf84f36569a8a8dd4b26..a3376478fc2cfab0170a5d09d85c454ef39227fe 100644 (file)
@@ -29,8 +29,6 @@ ctx_switch_func(void *__rq, struct task_struct *prev, struct task_struct *next)
        if (!tracer_enabled)
                return;
 
-       tracing_record_cmdline(prev);
-
        local_irq_save(flags);
        cpu = raw_smp_processor_id();
        data = tr->data[cpu];
@@ -73,6 +71,9 @@ void
 ftrace_ctx_switch(void *__rq, struct task_struct *prev,
                  struct task_struct *next)
 {
+       if (unlikely(atomic_read(&trace_record_cmdline_enabled)))
+               tracing_record_cmdline(prev);
+
        /*
         * If tracer_switch_func only points to the local
         * switch func, it still needs the ptr passed to it.
@@ -134,11 +135,13 @@ static void sched_switch_reset(struct trace_array *tr)
 static void start_sched_trace(struct trace_array *tr)
 {
        sched_switch_reset(tr);
+       atomic_inc(&trace_record_cmdline_enabled);
        tracer_enabled = 1;
 }
 
 static void stop_sched_trace(struct trace_array *tr)
 {
+       atomic_dec(&trace_record_cmdline_enabled);
        tracer_enabled = 0;
 }