From ec2ef8d4e21e8a93eb0166b090a30cdbe377b1c2 Mon Sep 17 00:00:00 2001 From: Robin Getz Date: Mon, 11 May 2009 18:34:41 +0000 Subject: [PATCH] --- yaml --- r: 148568 b: refs/heads/master c: a0cab65642813b7990e1b4b2ab6ad92e171571f4 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/arch/blackfin/kernel/traps.c | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 4af3a27b12c8..b8691cfde3e5 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: b9a3899d59c3f0fc074573f0eba2419b1e4c0bca +refs/heads/master: a0cab65642813b7990e1b4b2ab6ad92e171571f4 diff --git a/trunk/arch/blackfin/kernel/traps.c b/trunk/arch/blackfin/kernel/traps.c index fb5774275889..0d04a4732b1f 100644 --- a/trunk/arch/blackfin/kernel/traps.c +++ b/trunk/arch/blackfin/kernel/traps.c @@ -196,6 +196,11 @@ static void decode_address(char *buf, unsigned long address) asmlinkage void double_fault_c(struct pt_regs *fp) { +#ifdef CONFIG_DEBUG_BFIN_HWTRACE_ON + int j; + trace_buffer_save(j); +#endif + console_verbose(); oops_in_progress = 1; #ifdef CONFIG_DEBUG_VERBOSE @@ -220,6 +225,7 @@ asmlinkage void double_fault_c(struct pt_regs *fp) dump_bfin_process(fp); dump_bfin_mem(fp); show_regs(fp); + dump_bfin_trace_buffer(); } #endif panic("Double Fault - unrecoverable event"); @@ -832,6 +838,11 @@ void show_stack(struct task_struct *task, unsigned long *stack) decode_address(buf, (unsigned int)stack); printk(KERN_NOTICE " SP: [0x%p] %s\n", stack, buf); + if (!access_ok(VERIFY_READ, stack, (unsigned int)endstack - (unsigned int)stack)) { + printk(KERN_NOTICE "Invalid stack pointer\n"); + return; + } + /* First thing is to look for a frame pointer */ for (addr = (unsigned int *)((unsigned int)stack & ~0xF); addr < endstack; addr++) { if (*addr & 0x1)