From: Steven Rostedt <rostedt@goodmis.org>
To: linux-kernel@vger.kernel.org
Cc: Ingo Molnar <mingo@kernel.org>,
Andrew Morton <akpm@linux-foundation.org>,
Frederic Weisbecker <fweisbec@gmail.com>,
Peter Zijlstra <a.p.zijlstra@chello.nl>,
Thomas Gleixner <tglx@linutronix.de>
Subject: [PATCH 06/19] tracing: Enable comm recording if trace_printk() is used
Date: Fri, 02 Nov 2012 14:13:37 -0400 [thread overview]
Message-ID: <20121102181430.874470137@goodmis.org> (raw)
In-Reply-To: 20121102181331.513782854@goodmis.org
[-- Attachment #1: Type: text/plain, Size: 3831 bytes --]
From: Steven Rostedt <srostedt@redhat.com>
If comm recording is not enabled when trace_printk() is used then
you just get this type of output:
[ adding trace_printk("hello! %d", irq); in do_IRQ ]
<...>-2843 [001] d.h. 80.812300: do_IRQ: hello! 14
<...>-2734 [002] d.h2 80.824664: do_IRQ: hello! 14
<...>-2713 [003] d.h. 80.829971: do_IRQ: hello! 14
<...>-2814 [000] d.h. 80.833026: do_IRQ: hello! 14
By enabling the comm recorder when trace_printk is enabled:
hackbench-6715 [001] d.h. 193.233776: do_IRQ: hello! 21
sshd-2659 [001] d.h. 193.665862: do_IRQ: hello! 21
<idle>-0 [001] d.h1 193.665996: do_IRQ: hello! 21
Suggested-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
---
kernel/trace/trace.c | 36 ++++++++++++++++++++++++++++++++++--
kernel/trace/trace.h | 1 +
kernel/trace/trace_events.c | 3 +++
3 files changed, 38 insertions(+), 2 deletions(-)
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index a5411b7..b90a827 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -1559,10 +1559,10 @@ static int alloc_percpu_trace_buffer(void)
return -ENOMEM;
}
+static int buffers_allocated;
+
void trace_printk_init_buffers(void)
{
- static int buffers_allocated;
-
if (buffers_allocated)
return;
@@ -1575,6 +1575,34 @@ void trace_printk_init_buffers(void)
tracing_update_buffers();
buffers_allocated = 1;
+
+ /*
+ * trace_printk_init_buffers() can be called by modules.
+ * If that happens, then we need to start cmdline recording
+ * directly here. If the global_trace.buffer is already
+ * allocated here, then this was called by module code.
+ */
+ if (global_trace.buffer)
+ tracing_start_cmdline_record();
+}
+
+void trace_printk_start_comm(void)
+{
+ /* Start tracing comms if trace printk is set */
+ if (!buffers_allocated)
+ return;
+ tracing_start_cmdline_record();
+}
+
+static void trace_printk_start_stop_comm(int enabled)
+{
+ if (!buffers_allocated)
+ return;
+
+ if (enabled)
+ tracing_start_cmdline_record();
+ else
+ tracing_stop_cmdline_record();
}
/**
@@ -2797,6 +2825,9 @@ static void set_tracer_flags(unsigned int mask, int enabled)
if (mask == TRACE_ITER_OVERWRITE)
ring_buffer_change_overwrite(global_trace.buffer, enabled);
+
+ if (mask == TRACE_ITER_PRINTK)
+ trace_printk_start_stop_comm(enabled);
}
static ssize_t
@@ -5099,6 +5130,7 @@ __init static int tracer_alloc_buffers(void)
/* Only allocate trace_printk buffers if a trace_printk exists */
if (__stop___trace_bprintk_fmt != __start___trace_bprintk_fmt)
+ /* Must be called before global_trace.buffer is allocated */
trace_printk_init_buffers();
/* To save memory, keep the ring buffer size to its minimum */
diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h
index c56a233..7824a55 100644
--- a/kernel/trace/trace.h
+++ b/kernel/trace/trace.h
@@ -841,6 +841,7 @@ extern const char *__start___trace_bprintk_fmt[];
extern const char *__stop___trace_bprintk_fmt[];
void trace_printk_init_buffers(void);
+void trace_printk_start_comm(void);
#undef FTRACE_ENTRY
#define FTRACE_ENTRY(call, struct_name, id, tstruct, print, filter) \
diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
index d608d09..dec47e7 100644
--- a/kernel/trace/trace_events.c
+++ b/kernel/trace/trace_events.c
@@ -1489,6 +1489,9 @@ static __init int event_trace_enable(void)
if (ret)
pr_warn("Failed to enable trace event: %s\n", token);
}
+
+ trace_printk_start_comm();
+
return 0;
}
--
1.7.10.4
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 490 bytes --]
next prev parent reply other threads:[~2012-11-02 18:17 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-11-02 18:13 [PATCH 00/19] [GIT PULL][3.8] tracing: updates (v2) Steven Rostedt
2012-11-02 18:13 ` [PATCH 01/19] tracing: Replace strict_strto* with kstrto* Steven Rostedt
2012-11-02 18:13 ` [PATCH 02/19] tracing: Allow tracers to start at core initcall Steven Rostedt
2012-11-02 18:13 ` [PATCH 03/19] tracing: Change tracers integer flags to bool Steven Rostedt
2012-11-02 18:13 ` [PATCH 04/19] ring-buffer: Add a dropped events counter Steven Rostedt
2012-11-02 18:13 ` [PATCH 05/19] tracing: Expand ring buffer when trace_printk() is used Steven Rostedt
2012-11-02 18:13 ` Steven Rostedt [this message]
2012-11-02 18:13 ` [PATCH 07/19] tracing: Have tracing_sched_wakeup_trace() use standard unlock_commit Steven Rostedt
2012-11-02 18:13 ` [PATCH 08/19] tracing: Cache comms only after an event occurred Steven Rostedt
2012-11-02 18:13 ` [PATCH 09/19] tracing: Trivial cleanup Steven Rostedt
2012-11-02 18:13 ` [PATCH 10/19] tracing: Cleanup unnecessary function declarations Steven Rostedt
2012-11-02 18:13 ` [PATCH 11/19] linux/kernel.h: Remove duplicate trace_printk declaration Steven Rostedt
2012-11-02 18:13 ` [PATCH 12/19] tracing: Reset ring buffer when changing trace_clocks Steven Rostedt
2012-11-02 18:13 ` [PATCH 13/19] ring-buffer: Change unsigned long type of ring_buffer_oldest_event_ts() to u64 Steven Rostedt
2012-11-02 18:13 ` [PATCH 14/19] tracing: Separate open function from set_event and available_events Steven Rostedt
2012-11-02 18:13 ` [PATCH 15/19] tracing: Remove unused function unregister_tracer() Steven Rostedt
2012-11-02 18:13 ` [PATCH 16/19] tracing: Make tracing_enabled be equal to tracing_on Steven Rostedt
2012-11-02 18:13 ` [PATCH 17/19] tracing: Remove deprecated tracing_enabled file Steven Rostedt
2012-11-02 18:13 ` [PATCH 18/19] tracing: Use irq_work for wake ups and remove *_nowake_*() functions Steven Rostedt
2012-11-02 18:13 ` [PATCH 19/19] tracing: Add trace_options kernel command line parameter Steven Rostedt
2012-11-09 12:16 ` [PATCH 00/19] [GIT PULL][3.8] tracing: updates (v2) Steven Rostedt
2012-11-14 6:18 ` Ingo Molnar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20121102181430.874470137@goodmis.org \
--to=rostedt@goodmis.org \
--cc=a.p.zijlstra@chello.nl \
--cc=akpm@linux-foundation.org \
--cc=fweisbec@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=tglx@linutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.