aboutsummaryrefslogtreecommitdiffstats
path: root/arch/blackfin
diff options
context:
space:
mode:
Diffstat (limited to 'arch/blackfin')
-rw-r--r--arch/blackfin/kernel/traps.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/arch/blackfin/kernel/traps.c b/arch/blackfin/kernel/traps.c
index fb5774275889..0d04a4732b1f 100644
--- a/arch/blackfin/kernel/traps.c
+++ b/arch/blackfin/kernel/traps.c
@@ -196,6 +196,11 @@ done:
196 196
197asmlinkage void double_fault_c(struct pt_regs *fp) 197asmlinkage void double_fault_c(struct pt_regs *fp)
198{ 198{
199#ifdef CONFIG_DEBUG_BFIN_HWTRACE_ON
200 int j;
201 trace_buffer_save(j);
202#endif
203
199 console_verbose(); 204 console_verbose();
200 oops_in_progress = 1; 205 oops_in_progress = 1;
201#ifdef CONFIG_DEBUG_VERBOSE 206#ifdef CONFIG_DEBUG_VERBOSE
@@ -220,6 +225,7 @@ asmlinkage void double_fault_c(struct pt_regs *fp)
220 dump_bfin_process(fp); 225 dump_bfin_process(fp);
221 dump_bfin_mem(fp); 226 dump_bfin_mem(fp);
222 show_regs(fp); 227 show_regs(fp);
228 dump_bfin_trace_buffer();
223 } 229 }
224#endif 230#endif
225 panic("Double Fault - unrecoverable event"); 231 panic("Double Fault - unrecoverable event");
@@ -832,6 +838,11 @@ void show_stack(struct task_struct *task, unsigned long *stack)
832 decode_address(buf, (unsigned int)stack); 838 decode_address(buf, (unsigned int)stack);
833 printk(KERN_NOTICE " SP: [0x%p] %s\n", stack, buf); 839 printk(KERN_NOTICE " SP: [0x%p] %s\n", stack, buf);
834 840
841 if (!access_ok(VERIFY_READ, stack, (unsigned int)endstack - (unsigned int)stack)) {
842 printk(KERN_NOTICE "Invalid stack pointer\n");
843 return;
844 }
845
835 /* First thing is to look for a frame pointer */ 846 /* First thing is to look for a frame pointer */
836 for (addr = (unsigned int *)((unsigned int)stack & ~0xF); addr < endstack; addr++) { 847 for (addr = (unsigned int *)((unsigned int)stack & ~0xF); addr < endstack; addr++) {
837 if (*addr & 0x1) 848 if (*addr & 0x1)