aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/stacktrace.c
diff options
context:
space:
mode:
authorVegard Nossum <vegard.nossum@gmail.com>2008-02-22 19:23:58 +0100
committerIngo Molnar <mingo@elte.hu>2008-02-26 12:55:58 +0100
commit1650743cdc0db73478f72c57544ce79ea8f3dda6 (patch)
tree14d6218acfc06a20450cf80365a1854af4c096b0 /arch/x86/kernel/stacktrace.c
parented2b7e2b1d1ae201afe8fbd111632074b7b53ed4 (diff)
downloadkernel_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.c4
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) {