]> err.no Git - linux-2.6/commitdiff
ftrace: move sched_switch enable after markers
authorSteven Rostedt <rostedt@goodmis.org>
Fri, 11 Jul 2008 00:58:09 +0000 (20:58 -0400)
committerIngo Molnar <mingo@elte.hu>
Fri, 11 Jul 2008 13:49:18 +0000 (15:49 +0200)
We have two markers now that are enabled on sched_switch. One that records
the context switching and the other that records task wake ups. Currently
we enable the tracing first and then set the markers. This causes some
confusing traces:

# tracer: sched_switch
#
#           TASK-PID   CPU#    TIMESTAMP  FUNCTION
#              | |      |          |         |
       trace-cmd-3973  [00]   115.834817:   3973:120:R   +     3:  0:S
       trace-cmd-3973  [01]   115.834910:   3973:120:R   +     6:  0:S
       trace-cmd-3973  [02]   115.834910:   3973:120:R   +     9:  0:S
       trace-cmd-3973  [03]   115.834910:   3973:120:R   +    12:  0:S
       trace-cmd-3973  [02]   115.834910:   3973:120:R   +     9:  0:S
          <idle>-0     [02]   115.834910:      0:140:R ==>  3973:120:R

Here we see that trace-cmd with PID 3973 wakes up task 9 but the next line
shows the idle task doing a context switch to task 3973.

Enabling the tracing to _after_ the markers are set creates a much saner
output:

# tracer: sched_switch
#
#           TASK-PID   CPU#    TIMESTAMP  FUNCTION
#              | |      |          |         |
          <idle>-0     [02]  7922.634225:      0:140:R ==>  4790:120:R
       trace-cmd-4789  [03]  7922.634225:      0:140:R   +  4790:120:R

Signed-off-by: Steven Rostedt <srostedt@redhat.com>
Cc: Steven Rostedt <srostedt@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
kernel/trace/trace_sched_switch.c

index 93a66200915181591c034b113226883f5696a31a..cb817a209aa005d9b151b79e2ef52b48178dffd4 100644 (file)
@@ -227,14 +227,14 @@ void tracing_stop_cmdline_record(void)
 static void start_sched_trace(struct trace_array *tr)
 {
        sched_switch_reset(tr);
-       tracer_enabled = 1;
        tracing_start_cmdline_record();
+       tracer_enabled = 1;
 }
 
 static void stop_sched_trace(struct trace_array *tr)
 {
-       tracing_stop_cmdline_record();
        tracer_enabled = 0;
+       tracing_stop_cmdline_record();
 }
 
 static void sched_switch_trace_init(struct trace_array *tr)