diff options
author | Steven Rostedt <rostedt@goodmis.org> | 2016-01-29 15:22:41 (GMT) |
---|---|---|
committer | Steven Rostedt <rostedt@goodmis.org> | 2016-01-29 17:19:10 (GMT) |
commit | 6ccd83714a009ee301b50c15f6c3a5dc1f30164c (patch) | |
tree | e9b16f16bd6558120805a2d03d2a1dd0db27d2f0 /kernel | |
parent | 92e963f50fc74041b5e9e744c330dca48e04f08d (diff) | |
download | linux-6ccd83714a009ee301b50c15f6c3a5dc1f30164c.tar.xz |
tracing/stacktrace: Show entire trace if passed in function not found
When a max stack trace is discovered, the stack dump is saved. In order to
not record the overhead of the stack tracer, the ip of the traced function
is looked for within the dump. The trace is started from the location of
that function. But if for some reason the ip is not found, the entire stack
trace is then truncated. That's not very useful. Instead, print everything
if the ip of the traced function is not found within the trace.
This issue showed up on s390.
Link: http://lkml.kernel.org/r/20160129102241.1b3c9c04@gandalf.local.home
Fixes: 72ac426a5bb0 ("tracing: Clean up stack tracing and fix fentry updates")
Cc: stable@vger.kernel.org # v4.3+
Reported-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Tested-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/trace/trace_stack.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/kernel/trace/trace_stack.c b/kernel/trace/trace_stack.c index dda9e67..202df6c 100644 --- a/kernel/trace/trace_stack.c +++ b/kernel/trace/trace_stack.c @@ -126,6 +126,13 @@ check_stack(unsigned long ip, unsigned long *stack) } /* + * Some archs may not have the passed in ip in the dump. + * If that happens, we need to show everything. + */ + if (i == stack_trace_max.nr_entries) + i = 0; + + /* * Now find where in the stack these are. */ x = 0; |