aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorZhaolei <zhaolei@cn.fujitsu.com>2009-05-25 06:11:59 -0400
committerFrederic Weisbecker <fweisbec@gmail.com>2009-05-25 21:03:21 -0400
commitb11c53e12f94a46b50bccc7a1a953d7ca1d54a31 (patch)
treea0d658e31ffd7f05834c6026874cd4120a35dd29 /kernel
parent29fcefba8a2f0fea11e2b721fe174a1832801284 (diff)
ftrace: Add task_comm support for trace_event
If we enable a trace event alone without any tracer running (such as function tracer, sched switch tracer, etc...) it can't output enough task command information. We need to use the tracing_{start/stop}_cmdline_record() helpers which are designed to keep track of cmdlines for any tasks that were scheduled during the tracing. Before this patch: # echo 1 > debugfs/tracing/events/sched/sched_switch/enable # cat debugfs/tracing/trace # tracer: nop # # TASK-PID CPU# TIMESTAMP FUNCTION # | | | | | <...>-2289 [000] 526276.724790: sched_switch: task bash:2289 [120] ==> sshd:2287 [120] <...>-2287 [000] 526276.725231: sched_switch: task sshd:2287 [120] ==> bash:2289 [120] <...>-2289 [000] 526276.725452: sched_switch: task bash:2289 [120] ==> sshd:2287 [120] <...>-2287 [000] 526276.727181: sched_switch: task sshd:2287 [120] ==> swapper:0 [140] <idle>-0 [000] 526277.032734: sched_switch: task swapper:0 [140] ==> events/0:5 [115] <...>-5 [000] 526277.032782: sched_switch: task events/0:5 [115] ==> swapper:0 [140] ... After this patch: # tracer: nop # # TASK-PID CPU# TIMESTAMP FUNCTION # | | | | | bash-2269 [000] 527347.989229: sched_switch: task bash:2269 [120] ==> sshd:2267 [120] sshd-2267 [000] 527347.990960: sched_switch: task sshd:2267 [120] ==> bash:2269 [120] bash-2269 [000] 527347.991143: sched_switch: task bash:2269 [120] ==> sshd:2267 [120] sshd-2267 [000] 527347.992959: sched_switch: task sshd:2267 [120] ==> swapper:0 [140] <idle>-0 [000] 527348.531989: sched_switch: task swapper:0 [140] ==> events/0:5 [115] events/0-5 [000] 527348.532115: sched_switch: task events/0:5 [115] ==> swapper:0 [140] ... Changelog: v1->v2: Update Kconfig to select CONTEXT_SWITCH_TRACER in ENABLE_EVENT_TRACING v2->v3: v2 can solve problem that was caused by config EVENT_TRACING alone, but when CONFIG_FTRACE is off and CONFIG_TRACING is selected by other config, compile fail happened again. This version solves it. [ Impact: fix incomplete output of event tracing ] Signed-off-by: Zhao Lei <zhaolei@cn.fujitsu.com> Cc: Tom Zanussi <tzanussi@gmail.com> Cc: Steven Rostedt <rostedt@goodmis.org> LKML-Reference: <4A14FDFE.2080402@cn.fujitsu.com> Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Diffstat (limited to 'kernel')
-rw-r--r--kernel/trace/Kconfig9
-rw-r--r--kernel/trace/trace_events.c6
2 files changed, 13 insertions, 2 deletions
diff --git a/kernel/trace/Kconfig b/kernel/trace/Kconfig
index f61be3015783..a508b9d2adb8 100644
--- a/kernel/trace/Kconfig
+++ b/kernel/trace/Kconfig
@@ -49,6 +49,11 @@ config FTRACE_NMI_ENTER
49 default y 49 default y
50 50
51config EVENT_TRACING 51config EVENT_TRACING
52 select CONTEXT_SWITCH_TRACER
53 bool
54
55config CONTEXT_SWITCH_TRACER
56 select MARKERS
52 bool 57 bool
53 58
54config TRACING 59config TRACING
@@ -176,10 +181,10 @@ config SCHED_TRACER
176 This tracer tracks the latency of the highest priority task 181 This tracer tracks the latency of the highest priority task
177 to be scheduled in, starting from the point it has woken up. 182 to be scheduled in, starting from the point it has woken up.
178 183
179config CONTEXT_SWITCH_TRACER 184config ENABLE_CONTEXT_SWITCH_TRACER
180 bool "Trace process context switches" 185 bool "Trace process context switches"
181 select TRACING 186 select TRACING
182 select MARKERS 187 select CONTEXT_SWITCH_TRACER
183 help 188 help
184 This tracer gets called from the context switch and records 189 This tracer gets called from the context switch and records
185 all switching of tasks. 190 all switching of tasks.
diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
index 9e91c4ad7c8b..9b246eb01d5f 100644
--- a/kernel/trace/trace_events.c
+++ b/kernel/trace/trace_events.c
@@ -85,6 +85,7 @@ static void ftrace_clear_events(void)
85 85
86 if (call->enabled) { 86 if (call->enabled) {
87 call->enabled = 0; 87 call->enabled = 0;
88 tracing_stop_cmdline_record();
88 call->unregfunc(); 89 call->unregfunc();
89 } 90 }
90 } 91 }
@@ -99,12 +100,14 @@ static void ftrace_event_enable_disable(struct ftrace_event_call *call,
99 case 0: 100 case 0:
100 if (call->enabled) { 101 if (call->enabled) {
101 call->enabled = 0; 102 call->enabled = 0;
103 tracing_stop_cmdline_record();
102 call->unregfunc(); 104 call->unregfunc();
103 } 105 }
104 break; 106 break;
105 case 1: 107 case 1:
106 if (!call->enabled) { 108 if (!call->enabled) {
107 call->enabled = 1; 109 call->enabled = 1;
110 tracing_start_cmdline_record();
108 call->regfunc(); 111 call->regfunc();
109 } 112 }
110 break; 113 break;
@@ -1058,6 +1061,7 @@ static void trace_module_remove_events(struct module *mod)
1058 found = true; 1061 found = true;
1059 if (call->enabled) { 1062 if (call->enabled) {
1060 call->enabled = 0; 1063 call->enabled = 0;
1064 tracing_stop_cmdline_record();
1061 call->unregfunc(); 1065 call->unregfunc();
1062 } 1066 }
1063 if (call->event) 1067 if (call->event)
@@ -1262,11 +1266,13 @@ static __init void event_trace_self_tests(void)
1262 } 1266 }
1263 1267
1264 call->enabled = 1; 1268 call->enabled = 1;
1269 tracing_start_cmdline_record();
1265 call->regfunc(); 1270 call->regfunc();
1266 1271
1267 event_test_stuff(); 1272 event_test_stuff();
1268 1273
1269 call->unregfunc(); 1274 call->unregfunc();
1275 tracing_stop_cmdline_record();
1270 call->enabled = 0; 1276 call->enabled = 0;
1271 1277
1272 pr_cont("OK\n"); 1278 pr_cont("OK\n");