diff options
author | Vegard Nossum <vegard.nossum@gmail.com> | 2008-02-22 19:23:58 +0100 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-02-26 12:55:58 +0100 |
commit | 1650743cdc0db73478f72c57544ce79ea8f3dda6 (patch) | |
tree | 14d6218acfc06a20450cf80365a1854af4c096b0 /arch/x86/kernel/stacktrace.c | |
parent | ed2b7e2b1d1ae201afe8fbd111632074b7b53ed4 (diff) | |
download | kernel_samsung_smdk4412-1650743cdc0db73478f72c57544ce79ea8f3dda6.zip kernel_samsung_smdk4412-1650743cdc0db73478f72c57544ce79ea8f3dda6.tar.gz kernel_samsung_smdk4412-1650743cdc0db73478f72c57544ce79ea8f3dda6.tar.bz2 |
x86: don't save unreliable stack trace entries
Currently, there is no way for print_stack_trace() to determine whether
a given stack trace entry was deemed reliable or not, simply because
save_stack_trace() does not record this information. (Perhaps needless
to say, this makes the saved stack traces A LOT harder to read, and
probably with no other benefits, since debugging features that use
save_stack_trace() most likely also require frame pointers, etc.)
This patch reverts to the old behaviour of only recording the reliable trace
entries for saved stack traces.
Signed-off-by: Vegard Nossum <vegardno@ifi.uio.no>
Acked-by: Arjan van de Ven <arjan@linux.intel.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/kernel/stacktrace.c')
-rw-r--r-- | arch/x86/kernel/stacktrace.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/arch/x86/kernel/stacktrace.c b/arch/x86/kernel/stacktrace.c index 02f0f61..c28c342 100644 --- a/arch/x86/kernel/stacktrace.c +++ b/arch/x86/kernel/stacktrace.c @@ -25,6 +25,8 @@ static int save_stack_stack(void *data, char *name) static void save_stack_address(void *data, unsigned long addr, int reliable) { struct stack_trace *trace = data; + if (!reliable) + return; if (trace->skip > 0) { trace->skip--; return; @@ -37,6 +39,8 @@ static void save_stack_address_nosched(void *data, unsigned long addr, int reliable) { struct stack_trace *trace = (struct stack_trace *)data; + if (!reliable) + return; if (in_sched_functions(addr)) return; if (trace->skip > 0) { |