From: Steven Rostedt <rostedt@goodmis.org>
To: linux-kernel@vger.kernel.org
Cc: Ingo Molnar <mingo@elte.hu>,
Andrew Morton <akpm@linux-foundation.org>,
Thomas Gleixner <tglx@linutronix.de>,
Frederic Weisbecker <fweisbec@gmail.com>
Subject: [PATCH 19/20] tracing: Warn on output if the function tracer was found corrupted
Date: Mon, 10 Oct 2011 09:39:11 -0400 [thread overview]
Message-ID: <20111010134146.110531385@goodmis.org> (raw)
In-Reply-To: 20111010133852.829771373@goodmis.org
[-- Attachment #1: Type: text/plain, Size: 3175 bytes --]
From: Steven Rostedt <srostedt@redhat.com>
As the function tracer is very intrusive, lots of self checks are
performed on the tracer and if something is found to be strange
it will shut itself down keeping it from corrupting the rest of the
kernel. This shutdown may still allow functions to be traced, as the
tracing only stops new modifications from happening. Trying to stop
the function tracer itself can cause more harm as it requires code
modification.
Although a WARN_ON() is executed, a user may not notice it. To help
the user see that something isn't right with the tracing of the system
a big warning is added to the output of the tracer that lets the user
know that their data may be incomplete.
Reported-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
---
kernel/trace/ftrace.c | 8 ++++++++
kernel/trace/trace.c | 15 +++++++++++++++
kernel/trace/trace.h | 2 ++
3 files changed, 25 insertions(+), 0 deletions(-)
diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
index c3e4575..077d853 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -3863,6 +3863,14 @@ void ftrace_kill(void)
}
/**
+ * Test if ftrace is dead or not.
+ */
+int ftrace_is_dead(void)
+{
+ return ftrace_disabled;
+}
+
+/**
* register_ftrace_function - register a function for profiling
* @ops - ops structure that holds the function for profiling.
*
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index 4b8df0d..13f2b84 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -2160,6 +2160,14 @@ void trace_default_header(struct seq_file *m)
}
}
+static void test_ftrace_alive(struct seq_file *m)
+{
+ if (!ftrace_is_dead())
+ return;
+ seq_printf(m, "# WARNING: FUNCTION TRACING IS CORRUPTED\n");
+ seq_printf(m, "# MAY BE MISSING FUNCTION EVENTS\n");
+}
+
static int s_show(struct seq_file *m, void *v)
{
struct trace_iterator *iter = v;
@@ -2169,6 +2177,7 @@ static int s_show(struct seq_file *m, void *v)
if (iter->tr) {
seq_printf(m, "# tracer: %s\n", iter->trace->name);
seq_puts(m, "#\n");
+ test_ftrace_alive(m);
}
if (iter->trace && iter->trace->print_header)
iter->trace->print_header(m);
@@ -4613,6 +4622,12 @@ __ftrace_dump(bool disable_tracing, enum ftrace_dump_mode oops_dump_mode)
tracing_off();
+ /* Did function tracer already get disabled? */
+ if (ftrace_is_dead()) {
+ printk("# WARNING: FUNCTION TRACING IS CORRUPTED\n");
+ printk("# MAY BE MISSING FUNCTION EVENTS\n");
+ }
+
if (disable_tracing)
ftrace_kill();
diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h
index 4c7540a..aa5d94a 100644
--- a/kernel/trace/trace.h
+++ b/kernel/trace/trace.h
@@ -579,11 +579,13 @@ static inline int ftrace_trace_task(struct task_struct *task)
return test_tsk_trace_trace(task);
}
+extern int ftrace_is_dead(void);
#else
static inline int ftrace_trace_task(struct task_struct *task)
{
return 1;
}
+extern static inline int ftrace_is_dead(void) { return 0; }
#endif
/*
--
1.7.6.3
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
next prev parent reply other threads:[~2011-10-10 13:42 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-10-10 13:38 [PATCH 00/20] [GIT PULL][v3.2] tracing: queued updates Steven Rostedt
2011-10-10 13:38 ` [PATCH 01/20] tracing: Clean up tb_fmt to not give faulty compile warning Steven Rostedt
2011-10-10 13:38 ` [PATCH 02/20] Tracepoint: Dissociate from module mutex Steven Rostedt
2011-10-10 13:38 ` [PATCH 03/20] x86: jump_label: arch_jump_label_text_poke_early: add missing __init Steven Rostedt
2011-10-10 13:38 ` [PATCH 04/20] tracing/filter: Use static allocation for filter predicates Steven Rostedt
2011-10-10 13:38 ` [PATCH 05/20] tracing/filter: Separate predicate init and filter addition Steven Rostedt
2011-10-10 13:38 ` [PATCH 06/20] tracing/filter: Remove field_name from filter_pred struct Steven Rostedt
2011-10-10 13:38 ` [PATCH 07/20] tracing/filter: Simplify tracepoint event lookup Steven Rostedt
2011-10-10 13:39 ` [PATCH 08/20] tracing/filter: Unify predicate tree walking, change check_pred_tree Steven Rostedt
2011-10-10 13:39 ` [PATCH 09/20] tracing/filter: Change count_leafs function to use walk_pred_tree Steven Rostedt
2011-10-10 13:39 ` [PATCH 10/20] tracing/filter: Change fold_pred_tree " Steven Rostedt
2011-10-10 13:39 ` [PATCH 11/20] tracing/filter: Change fold_pred " Steven Rostedt
2011-10-10 13:39 ` [PATCH 12/20] tracing/filter: Change filter_match_preds function to use Steven Rostedt
2011-10-10 13:39 ` [PATCH 13/20] tracing/filter: Add startup tests for events filter Steven Rostedt
2011-10-10 13:39 ` [PATCH 14/20] tracing: Add preempt disable for filter self test Steven Rostedt
2011-10-10 13:39 ` [PATCH 15/20] trace: Add a new readonly entry to report total buffer size Steven Rostedt
2011-10-10 13:39 ` [PATCH 16/20] trace: Add ring buffer stats to measure rate of events Steven Rostedt
2011-10-10 13:39 ` [PATCH 17/20] tracing: Add a counter clock for those that do not trust clocks Steven Rostedt
2011-10-10 13:39 ` [PATCH 18/20] tracing: Fix preemptirqsoff tracer to not stop at preempt off Steven Rostedt
2011-10-10 13:39 ` Steven Rostedt [this message]
2011-10-10 13:39 ` [PATCH 20/20] tracing: Do not allocate buffer for trace_marker Steven Rostedt
2011-10-10 13:52 ` [PATCH 00/20] [GIT PULL][v3.2] tracing: queued updates Steven Rostedt
2011-10-11 5:51 ` Ingo Molnar
2011-10-11 8:15 ` Ingo Molnar
2011-10-11 11:14 ` Steven Rostedt
2011-10-11 5:50 ` Ingo Molnar
2011-10-11 21:08 ` Valdis.Kletnieks
2011-10-12 8:07 ` Ingo Molnar
2011-10-12 14:19 ` Jeff King
2011-10-12 16:29 ` 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=20111010134146.110531385@goodmis.org \
--to=rostedt@goodmis.org \
--cc=akpm@linux-foundation.org \
--cc=fweisbec@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox