diff options
author | Frederic Weisbecker <fweisbec@gmail.com> | 2008-12-13 14:18:13 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-12-16 18:26:36 -0500 |
commit | 66896a85cf2890b6bbbc4c9ccdcd296600ffbf89 (patch) | |
tree | ad6b0a4df65a59280163f5b8ab0b92b2fe54c283 /kernel/trace/trace.c | |
parent | 2c2d7329d8afa9efa3ec24e19a53e7be9d14f242 (diff) |
tracing/ftrace: add the printk-msg-only option
Impact: display ftrace_printk messages "as is"
By default, ftrace_printk() messages find their output with some other
informations like pid, caller, ...
Sometimes a developer just want to have the ftrace_printk left "as is", without
other information.
This is done by providing a default-off option called printk-msg-only.
To enable it, just do `echo printk-msg-only > /debugfs/tracing/trace_options`
Before the patch:
<...>-2739 [000] 145.692153: __might_sleep: I'm an ftrace_printk msg in __might_sleep
<...>-2739 [000] 145.692155: __might_sleep: I'm another ftrace_printk msg in __might_sleep
After the patch and the printk-msg-only option enabled:
I'm an ftrace_printk msg in __might_sleep
I'm another ftrace_printk msg in __might_sleep
Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'kernel/trace/trace.c')
-rw-r--r-- | kernel/trace/trace.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 639344a4d3a2..1a3d6b329782 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c | |||
@@ -287,6 +287,7 @@ static const char *trace_options[] = { | |||
287 | "annotate", | 287 | "annotate", |
288 | "userstacktrace", | 288 | "userstacktrace", |
289 | "sym-userobj", | 289 | "sym-userobj", |
290 | "printk-msg-only", | ||
290 | NULL | 291 | NULL |
291 | }; | 292 | }; |
292 | 293 | ||
@@ -2265,6 +2266,25 @@ static enum print_line_t print_hex_fmt(struct trace_iterator *iter) | |||
2265 | return TRACE_TYPE_HANDLED; | 2266 | return TRACE_TYPE_HANDLED; |
2266 | } | 2267 | } |
2267 | 2268 | ||
2269 | static enum print_line_t print_printk_msg_only(struct trace_iterator *iter) | ||
2270 | { | ||
2271 | struct trace_seq *s = &iter->seq; | ||
2272 | struct trace_entry *entry = iter->ent; | ||
2273 | struct print_entry *field; | ||
2274 | int ret; | ||
2275 | |||
2276 | trace_assign_type(field, entry); | ||
2277 | |||
2278 | ret = trace_seq_printf(s, field->buf); | ||
2279 | if (!ret) | ||
2280 | return TRACE_TYPE_PARTIAL_LINE; | ||
2281 | |||
2282 | if (entry->flags & TRACE_FLAG_CONT) | ||
2283 | trace_seq_print_cont(s, iter); | ||
2284 | |||
2285 | return TRACE_TYPE_HANDLED; | ||
2286 | } | ||
2287 | |||
2268 | static enum print_line_t print_bin_fmt(struct trace_iterator *iter) | 2288 | static enum print_line_t print_bin_fmt(struct trace_iterator *iter) |
2269 | { | 2289 | { |
2270 | struct trace_seq *s = &iter->seq; | 2290 | struct trace_seq *s = &iter->seq; |
@@ -2345,6 +2365,11 @@ static enum print_line_t print_trace_line(struct trace_iterator *iter) | |||
2345 | return ret; | 2365 | return ret; |
2346 | } | 2366 | } |
2347 | 2367 | ||
2368 | if (iter->ent->type == TRACE_PRINT && | ||
2369 | trace_flags & TRACE_ITER_PRINTK && | ||
2370 | trace_flags & TRACE_ITER_PRINTK_MSGONLY) | ||
2371 | return print_printk_msg_only(iter); | ||
2372 | |||
2348 | if (trace_flags & TRACE_ITER_BIN) | 2373 | if (trace_flags & TRACE_ITER_BIN) |
2349 | return print_bin_fmt(iter); | 2374 | return print_bin_fmt(iter); |
2350 | 2375 | ||