Loading arch/blackfin/kernel/early_printk.c +2 −1 Original line number Diff line number Diff line Loading @@ -205,7 +205,8 @@ asmlinkage void __init early_trap_c(struct pt_regs *fp, void *retaddr) if (likely(early_console == NULL)) setup_early_printk(DEFAULT_EARLY_PORT); dump_bfin_regs(fp, retaddr); dump_bfin_mem((void *)fp->retx); show_regs(fp); dump_bfin_trace_buffer(); panic("Died early"); Loading arch/blackfin/kernel/process.c +0 −21 Original line number Diff line number Diff line Loading @@ -134,27 +134,6 @@ void cpu_idle(void) } } void show_regs(struct pt_regs *regs) { printk(KERN_NOTICE "\n"); printk(KERN_NOTICE "PC: %08lu Status: %04lu SysStatus: %04lu RETS: %08lu\n", regs->pc, regs->astat, regs->seqstat, regs->rets); printk(KERN_NOTICE "A0.x: %08lx A0.w: %08lx A1.x: %08lx A1.w: %08lx\n", regs->a0x, regs->a0w, regs->a1x, regs->a1w); printk(KERN_NOTICE "P0: %08lx P1: %08lx P2: %08lx P3: %08lx\n", regs->p0, regs->p1, regs->p2, regs->p3); printk(KERN_NOTICE "P4: %08lx P5: %08lx\n", regs->p4, regs->p5); printk(KERN_NOTICE "R0: %08lx R1: %08lx R2: %08lx R3: %08lx\n", regs->r0, regs->r1, regs->r2, regs->r3); printk(KERN_NOTICE "R4: %08lx R5: %08lx R6: %08lx R7: %08lx\n", regs->r4, regs->r5, regs->r6, regs->r7); if (!regs->ipend) printk(KERN_NOTICE "USP: %08lx\n", rdusp()); } /* Fill in the fpu structure for a core dump. */ int dump_fpu(struct pt_regs *regs, elf_fpregset_t * fpregs) Loading arch/blackfin/kernel/traps.c +54 −31 Original line number Diff line number Diff line Loading @@ -169,7 +169,9 @@ asmlinkage void double_fault_c(struct pt_regs *fp) console_verbose(); oops_in_progress = 1; printk(KERN_EMERG "\n" KERN_EMERG "Double Fault\n"); dump_bfin_regs(fp, (void *)fp->retx); dump_bfin_process(fp); dump_bfin_mem((void *)fp->retx); show_regs(fp); panic("Double Fault - unrecoverable event\n"); } Loading Loading @@ -444,7 +446,9 @@ asmlinkage void trap_c(struct pt_regs *fp) if (sig != SIGTRAP) { unsigned long stack; dump_bfin_regs(fp, (void *)fp->retx); dump_bfin_process(fp); dump_bfin_mem((void *)fp->retx); show_regs(fp); /* Print out the trace buffer if it makes sense */ #ifndef CONFIG_DEBUG_BFIN_NO_KERN_HWTRACE Loading Loading @@ -601,16 +605,28 @@ void dump_stack(void) show_stack(current, &stack); trace_buffer_restore(tflags); } EXPORT_SYMBOL(dump_stack); void dump_bfin_regs(struct pt_regs *fp, void *retaddr) void dump_bfin_process(struct pt_regs *fp) { char buf [150]; /* We should be able to look at fp->ipend, but we don't push it on the * stack all the time, so do this until we fix that */ unsigned int context = bfin_read_IPEND(); if (oops_in_progress) printk(KERN_EMERG "Kernel OOPS in progress\n"); if (context & 0x0020) printk(KERN_NOTICE "Deferred excecption or HW Error context\n"); else if (context & 0x3FC0) printk(KERN_NOTICE "Interrupt context\n"); else if (context & 0x4000) printk(KERN_NOTICE "Deferred Interrupt context\n"); else if (context & 0x8000) printk(KERN_NOTICE "Kernel process context\n"); if (!oops_in_progress) { if (current->pid && current->mm) { printk(KERN_NOTICE "\n" KERN_NOTICE "CURRENT PROCESS:\n"); printk(KERN_NOTICE "CURRENT PROCESS:\n"); printk(KERN_NOTICE "COMM=%s PID=%d\n", current->comm, current->pid); Loading @@ -624,16 +640,14 @@ void dump_bfin_regs(struct pt_regs *fp, void *retaddr) (void *)current->mm->end_data, (void *)current->mm->brk, (void *)current->mm->start_stack); } else { } else printk(KERN_NOTICE "\n" KERN_NOTICE "No Valid pid - Either things are really messed up," " or you are in the kernel\n"); } } else { printk(KERN_NOTICE "Kernel or interrupt exception\n"); print_modules(); "No Valid process in current context\n"); } void dump_bfin_mem(void *retaddr) { if (retaddr >= (void *)FIXED_CODE_START && retaddr < (void *)physical_mem_end #if L1_CODE_LENGTH != 0 /* FIXME: Copy the code out of L1 Instruction SRAM through dma Loading Loading @@ -675,6 +689,11 @@ void dump_bfin_regs(struct pt_regs *fp, void *retaddr) printk("\n" KERN_NOTICE "Cannot look at the [PC] <%p> for it is" " in unreadable memory - sorry\n", retaddr); } void show_regs(struct pt_regs *fp) { char buf [150]; printk(KERN_NOTICE "\n" KERN_NOTICE "SEQUENCER STATUS:\n"); printk(KERN_NOTICE " SEQSTAT: %08lx IPEND: %04lx SYSCFG: %04lx\n", Loading @@ -688,6 +707,8 @@ void dump_bfin_regs(struct pt_regs *fp, void *retaddr) printk(KERN_NOTICE " RETX: %s\n", buf); decode_address(buf, fp->rets); printk(KERN_NOTICE " RETS: %s\n", buf); decode_address(buf, fp->pc); printk(KERN_NOTICE " PC: %s\n", buf); if ((long)fp->seqstat & SEQSTAT_EXCAUSE) { decode_address(buf, bfin_read_DCPLB_FAULT_ADDR()); Loading Loading @@ -802,7 +823,9 @@ void panic_cplb_error(int cplb_panic, struct pt_regs *fp) printk(KERN_EMERG "DCPLB_FAULT_ADDR=%p\n", (void *)bfin_read_DCPLB_FAULT_ADDR()); printk(KERN_EMERG "ICPLB_FAULT_ADDR=%p\n", (void *)bfin_read_ICPLB_FAULT_ADDR()); dump_bfin_regs(fp, (void *)fp->retx); dump_bfin_process(fp); dump_bfin_mem((void *)fp->retx); show_regs(fp); dump_stack(); panic("Unrecoverable event\n"); } arch/blackfin/mach-common/irqpanic.c +3 −1 Original line number Diff line number Diff line Loading @@ -173,7 +173,9 @@ asmlinkage void irq_panic(int reason, struct pt_regs *regs) } regs->ipend = bfin_read_IPEND(); dump_bfin_regs(regs, (void *)regs->pc); dump_bfin_process(regs); dump_bfin_mem((void *)regs->pc); show_regs(regs); if (0 == (info.si_signo = sig) || 0 == user_mode(regs)) /* in kernelspace */ panic("Unhandled IRQ or exceptions!\n"); else { /* in userspace */ Loading include/asm-blackfin/bfin-global.h +2 −1 Original line number Diff line number Diff line Loading @@ -50,7 +50,8 @@ extern unsigned long get_sclk(void); extern unsigned long sclk_to_usecs(unsigned long sclk); extern unsigned long usecs_to_sclk(unsigned long usecs); extern void dump_bfin_regs(struct pt_regs *fp, void *retaddr); extern void dump_bfin_process(struct pt_regs *regs); extern void dump_bfin_mem(void *retaddr); extern void dump_bfin_trace_buffer(void); extern int init_arch_irq(void); Loading Loading
arch/blackfin/kernel/early_printk.c +2 −1 Original line number Diff line number Diff line Loading @@ -205,7 +205,8 @@ asmlinkage void __init early_trap_c(struct pt_regs *fp, void *retaddr) if (likely(early_console == NULL)) setup_early_printk(DEFAULT_EARLY_PORT); dump_bfin_regs(fp, retaddr); dump_bfin_mem((void *)fp->retx); show_regs(fp); dump_bfin_trace_buffer(); panic("Died early"); Loading
arch/blackfin/kernel/process.c +0 −21 Original line number Diff line number Diff line Loading @@ -134,27 +134,6 @@ void cpu_idle(void) } } void show_regs(struct pt_regs *regs) { printk(KERN_NOTICE "\n"); printk(KERN_NOTICE "PC: %08lu Status: %04lu SysStatus: %04lu RETS: %08lu\n", regs->pc, regs->astat, regs->seqstat, regs->rets); printk(KERN_NOTICE "A0.x: %08lx A0.w: %08lx A1.x: %08lx A1.w: %08lx\n", regs->a0x, regs->a0w, regs->a1x, regs->a1w); printk(KERN_NOTICE "P0: %08lx P1: %08lx P2: %08lx P3: %08lx\n", regs->p0, regs->p1, regs->p2, regs->p3); printk(KERN_NOTICE "P4: %08lx P5: %08lx\n", regs->p4, regs->p5); printk(KERN_NOTICE "R0: %08lx R1: %08lx R2: %08lx R3: %08lx\n", regs->r0, regs->r1, regs->r2, regs->r3); printk(KERN_NOTICE "R4: %08lx R5: %08lx R6: %08lx R7: %08lx\n", regs->r4, regs->r5, regs->r6, regs->r7); if (!regs->ipend) printk(KERN_NOTICE "USP: %08lx\n", rdusp()); } /* Fill in the fpu structure for a core dump. */ int dump_fpu(struct pt_regs *regs, elf_fpregset_t * fpregs) Loading
arch/blackfin/kernel/traps.c +54 −31 Original line number Diff line number Diff line Loading @@ -169,7 +169,9 @@ asmlinkage void double_fault_c(struct pt_regs *fp) console_verbose(); oops_in_progress = 1; printk(KERN_EMERG "\n" KERN_EMERG "Double Fault\n"); dump_bfin_regs(fp, (void *)fp->retx); dump_bfin_process(fp); dump_bfin_mem((void *)fp->retx); show_regs(fp); panic("Double Fault - unrecoverable event\n"); } Loading Loading @@ -444,7 +446,9 @@ asmlinkage void trap_c(struct pt_regs *fp) if (sig != SIGTRAP) { unsigned long stack; dump_bfin_regs(fp, (void *)fp->retx); dump_bfin_process(fp); dump_bfin_mem((void *)fp->retx); show_regs(fp); /* Print out the trace buffer if it makes sense */ #ifndef CONFIG_DEBUG_BFIN_NO_KERN_HWTRACE Loading Loading @@ -601,16 +605,28 @@ void dump_stack(void) show_stack(current, &stack); trace_buffer_restore(tflags); } EXPORT_SYMBOL(dump_stack); void dump_bfin_regs(struct pt_regs *fp, void *retaddr) void dump_bfin_process(struct pt_regs *fp) { char buf [150]; /* We should be able to look at fp->ipend, but we don't push it on the * stack all the time, so do this until we fix that */ unsigned int context = bfin_read_IPEND(); if (oops_in_progress) printk(KERN_EMERG "Kernel OOPS in progress\n"); if (context & 0x0020) printk(KERN_NOTICE "Deferred excecption or HW Error context\n"); else if (context & 0x3FC0) printk(KERN_NOTICE "Interrupt context\n"); else if (context & 0x4000) printk(KERN_NOTICE "Deferred Interrupt context\n"); else if (context & 0x8000) printk(KERN_NOTICE "Kernel process context\n"); if (!oops_in_progress) { if (current->pid && current->mm) { printk(KERN_NOTICE "\n" KERN_NOTICE "CURRENT PROCESS:\n"); printk(KERN_NOTICE "CURRENT PROCESS:\n"); printk(KERN_NOTICE "COMM=%s PID=%d\n", current->comm, current->pid); Loading @@ -624,16 +640,14 @@ void dump_bfin_regs(struct pt_regs *fp, void *retaddr) (void *)current->mm->end_data, (void *)current->mm->brk, (void *)current->mm->start_stack); } else { } else printk(KERN_NOTICE "\n" KERN_NOTICE "No Valid pid - Either things are really messed up," " or you are in the kernel\n"); } } else { printk(KERN_NOTICE "Kernel or interrupt exception\n"); print_modules(); "No Valid process in current context\n"); } void dump_bfin_mem(void *retaddr) { if (retaddr >= (void *)FIXED_CODE_START && retaddr < (void *)physical_mem_end #if L1_CODE_LENGTH != 0 /* FIXME: Copy the code out of L1 Instruction SRAM through dma Loading Loading @@ -675,6 +689,11 @@ void dump_bfin_regs(struct pt_regs *fp, void *retaddr) printk("\n" KERN_NOTICE "Cannot look at the [PC] <%p> for it is" " in unreadable memory - sorry\n", retaddr); } void show_regs(struct pt_regs *fp) { char buf [150]; printk(KERN_NOTICE "\n" KERN_NOTICE "SEQUENCER STATUS:\n"); printk(KERN_NOTICE " SEQSTAT: %08lx IPEND: %04lx SYSCFG: %04lx\n", Loading @@ -688,6 +707,8 @@ void dump_bfin_regs(struct pt_regs *fp, void *retaddr) printk(KERN_NOTICE " RETX: %s\n", buf); decode_address(buf, fp->rets); printk(KERN_NOTICE " RETS: %s\n", buf); decode_address(buf, fp->pc); printk(KERN_NOTICE " PC: %s\n", buf); if ((long)fp->seqstat & SEQSTAT_EXCAUSE) { decode_address(buf, bfin_read_DCPLB_FAULT_ADDR()); Loading Loading @@ -802,7 +823,9 @@ void panic_cplb_error(int cplb_panic, struct pt_regs *fp) printk(KERN_EMERG "DCPLB_FAULT_ADDR=%p\n", (void *)bfin_read_DCPLB_FAULT_ADDR()); printk(KERN_EMERG "ICPLB_FAULT_ADDR=%p\n", (void *)bfin_read_ICPLB_FAULT_ADDR()); dump_bfin_regs(fp, (void *)fp->retx); dump_bfin_process(fp); dump_bfin_mem((void *)fp->retx); show_regs(fp); dump_stack(); panic("Unrecoverable event\n"); }
arch/blackfin/mach-common/irqpanic.c +3 −1 Original line number Diff line number Diff line Loading @@ -173,7 +173,9 @@ asmlinkage void irq_panic(int reason, struct pt_regs *regs) } regs->ipend = bfin_read_IPEND(); dump_bfin_regs(regs, (void *)regs->pc); dump_bfin_process(regs); dump_bfin_mem((void *)regs->pc); show_regs(regs); if (0 == (info.si_signo = sig) || 0 == user_mode(regs)) /* in kernelspace */ panic("Unhandled IRQ or exceptions!\n"); else { /* in userspace */ Loading
include/asm-blackfin/bfin-global.h +2 −1 Original line number Diff line number Diff line Loading @@ -50,7 +50,8 @@ extern unsigned long get_sclk(void); extern unsigned long sclk_to_usecs(unsigned long sclk); extern unsigned long usecs_to_sclk(unsigned long usecs); extern void dump_bfin_regs(struct pt_regs *fp, void *retaddr); extern void dump_bfin_process(struct pt_regs *regs); extern void dump_bfin_mem(void *retaddr); extern void dump_bfin_trace_buffer(void); extern int init_arch_irq(void); Loading