--- zzzz-none-000/linux-2.6.28.10/arch/arm/kernel/traps.c 2009-05-02 18:54:43.000000000 +0000 +++ puma5-6360-529/linux-2.6.28.10/arch/arm/kernel/traps.c 2010-04-06 16:26:05.000000000 +0000 @@ -216,12 +216,15 @@ __show_regs(regs); printk("Process %s (pid: %d, stack limit = 0x%p)\n", tsk->comm, task_pid_nr(tsk), thread + 1); + printk("Mode: %s in_interrupt: %s\n", + user_mode(regs) ? "user" : "kernel", + in_interrupt() ? "true" : "false"); if (!user_mode(regs) || in_interrupt()) { + dump_instr(regs); dump_mem("Stack: ", regs->ARM_sp, THREAD_SIZE + (unsigned long)task_stack_page(tsk)); dump_backtrace(regs, tsk); - dump_instr(regs); } } @@ -619,6 +622,7 @@ void __bad_xchg(volatile void *ptr, int size) { + restore_printk(); printk("xchg: bad data size: pc 0x%p, ptr 0x%p, size %d\n", __builtin_return_address(0), ptr, size); BUG(); @@ -654,6 +658,7 @@ void __attribute__((noreturn)) __bug(const char *file, int line) { + restore_printk(); printk(KERN_CRIT"kernel BUG at %s:%d!\n", file, line); *(int *)0 = 0;