Skip to contentSkip to conversation

tracing/ftrace: add the printk-msg-only option

PATCH In review Frederic Weisbecker 2 participants 3 messages Dec 13, 2008 – Dec 14, 2008 Tracing

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 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

---

kernel/trace/trace.c +25 -0
index 8fd3c5a..cd4dbf2 100644
@@ -287,6 +287,7 @@ static const char *trace_options[] = {
 	"annotate",
 	"userstacktrace",
 	"sym-userobj",
+	"printk-msg-only",
 	NULL
 };
 
@@ -2265,6 +2266,25 @@ static enum print_line_t print_hex_fmt(struct trace_iterator *iter)
 	return TRACE_TYPE_HANDLED;
 }
 
+static enum print_line_t print_printk_msg_only(struct trace_iterator *iter)
+{
+	struct trace_seq *s = &iter->seq;
+	struct trace_entry *entry = iter->ent;
+	struct print_entry *field;
+	int ret;
+
+	trace_assign_type(field, entry);
+
+	ret = trace_seq_printf(s, field->buf);
+	if (!ret)
+		return TRACE_TYPE_PARTIAL_LINE;
+
+	if (entry->flags & TRACE_FLAG_CONT)
+		trace_seq_print_cont(s, iter);
+
+	return TRACE_TYPE_HANDLED;
+}
+
 static enum print_line_t print_bin_fmt(struct trace_iterator *iter)
 {
 	struct trace_seq *s = &iter->seq;
@@ -2345,6 +2365,11 @@ static enum print_line_t print_trace_line(struct trace_iterator *iter)
 			return ret;
 	}
 
+	if (iter->ent->type == TRACE_PRINT &&
+			trace_flags & TRACE_ITER_PRINTK &&
+			trace_flags & TRACE_ITER_PRINTK_MSGONLY)
+		return print_printk_msg_only(iter);
+
 	if (trace_flags & TRACE_ITER_BIN)
 		return print_bin_fmt(iter);
 
kernel/trace/trace.h +2 -1
index f07c246..fc75dce 100644
@@ -578,7 +578,8 @@ enum trace_iterator_flags {
 	TRACE_ITER_BRANCH		= 0x1000,
 	TRACE_ITER_ANNOTATE		= 0x2000,
 	TRACE_ITER_USERSTACKTRACE       = 0x4000,
-	TRACE_ITER_SYM_USEROBJ          = 0x8000
+	TRACE_ITER_SYM_USEROBJ          = 0x8000,
+	TRACE_ITER_PRINTK_MSGONLY	= 0x10000
 };
 
 /*
Signature · 1 line
1.6.0.4
maintainer
#1 lore raw
Quoted 28 lines · Frederic Weisbecker

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

---

kernel/trace/trace.c +0 -0
index 8fd3c5a..cd4dbf2 100644

kernel/trace/trace.c static const char *trace_options[] = { · line 290

Quoted 4 lines
kernel/trace/trace.c +1 -0
@@ -287,6 +287,7 @@ static const char *trace_options[] = {
 	"annotate",
 	"userstacktrace",
 	"sym-userobj",
+	"printk-msg-only",

Hmm, I'm a bit apprehensive about this approach. We are adding a lot of options that I'm not sure will be used. Is this needed because you added a ftrace printk that you want to not have the header, or because there are ftrace printks that exist that you want to turn on and off. Or perhaps, you want to see the header sometimes and sometimes you do not?

If it is the later two, then sure we could have this option. But if it is the former, then we probably should have another type of ftrace_printk that takes an option to make another event type to tell the output not to print?

Oh well, I have patches in mind to clean up the output code anyway.

-- Steve

#2 lore raw

2008/12/14 Steven Rostedt <[email protected]>:

Quoted 42 lines · Frederic Weisbecker
Quoted 29 lines

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

---

kernel/trace/trace.c +0 -0
index 8fd3c5a..cd4dbf2 100644

kernel/trace/trace.c static const char *trace_options[] = { · line 290

Quoted 4 lines
kernel/trace/trace.c +1 -0
@@ -287,6 +287,7 @@ static const char *trace_options[] = {
      "annotate",
      "userstacktrace",
      "sym-userobj",
+     "printk-msg-only",

Hmm, I'm a bit apprehensive about this approach. We are adding a lot of options that I'm not sure will be used. Is this needed because you added a ftrace printk that you want to not have the header, or because there are ftrace printks that exist that you want to turn on and off. Or perhaps, you want to see the header sometimes and sometimes you do not?

Quoted 9 lines

If it is the later two, then sure we could have this option. But if it is the former, then we probably should have another type of ftrace_printk that takes an option to make another event type to tell the output not to print?

Oh well, I have patches in mind to clean up the output code anyway.

-- Steve

Actually, it's not for my needs but Ingo requested it to have only the message output without
the headers while debugging with ftrace_printk.