diff options
| author | Paul Mundt <lethal@linux-sh.org> | 2009-10-12 21:57:52 -0400 |
|---|---|---|
| committer | Paul Mundt <lethal@linux-sh.org> | 2009-10-12 21:57:52 -0400 |
| commit | af67c3a9e68ee0a9e30ee8582577408adba0e299 (patch) | |
| tree | 1e334fd6ecc9e42b5756f800b59d3fd4c9681f64 | |
| parent | 2caa731819a633bec5a56736e64c562b7e193666 (diff) | |
sh: update die() output.
This follows the ARM change, as SH had all of the same issues:
Make die() better match x86:
- add printing of the last accessed sysfs file
- ensure console_verbose() is called under the lock
- ensure we panic outside of oops_exit()
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
| -rw-r--r-- | arch/sh/kernel/traps_32.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/arch/sh/kernel/traps_32.c b/arch/sh/kernel/traps_32.c index e0b5e4b5accd..7a2ee3a6b8e7 100644 --- a/arch/sh/kernel/traps_32.c +++ b/arch/sh/kernel/traps_32.c | |||
| @@ -25,6 +25,7 @@ | |||
| 25 | #include <linux/kexec.h> | 25 | #include <linux/kexec.h> |
| 26 | #include <linux/limits.h> | 26 | #include <linux/limits.h> |
| 27 | #include <linux/proc_fs.h> | 27 | #include <linux/proc_fs.h> |
| 28 | #include <linux/sysfs.h> | ||
| 28 | #include <asm/system.h> | 29 | #include <asm/system.h> |
| 29 | #include <asm/uaccess.h> | 30 | #include <asm/uaccess.h> |
| 30 | #include <asm/fpu.h> | 31 | #include <asm/fpu.h> |
| @@ -159,12 +160,12 @@ void die(const char * str, struct pt_regs * regs, long err) | |||
| 159 | 160 | ||
| 160 | oops_enter(); | 161 | oops_enter(); |
| 161 | 162 | ||
| 162 | console_verbose(); | ||
| 163 | spin_lock_irq(&die_lock); | 163 | spin_lock_irq(&die_lock); |
| 164 | console_verbose(); | ||
| 164 | bust_spinlocks(1); | 165 | bust_spinlocks(1); |
| 165 | 166 | ||
| 166 | printk("%s: %04lx [#%d]\n", str, err & 0xffff, ++die_counter); | 167 | printk("%s: %04lx [#%d]\n", str, err & 0xffff, ++die_counter); |
| 167 | 168 | sysfs_printk_last_file(); | |
| 168 | print_modules(); | 169 | print_modules(); |
| 169 | show_regs(regs); | 170 | show_regs(regs); |
| 170 | 171 | ||
| @@ -180,6 +181,7 @@ void die(const char * str, struct pt_regs * regs, long err) | |||
| 180 | bust_spinlocks(0); | 181 | bust_spinlocks(0); |
| 181 | add_taint(TAINT_DIE); | 182 | add_taint(TAINT_DIE); |
| 182 | spin_unlock_irq(&die_lock); | 183 | spin_unlock_irq(&die_lock); |
| 184 | oops_exit(); | ||
| 183 | 185 | ||
| 184 | if (kexec_should_crash(current)) | 186 | if (kexec_should_crash(current)) |
| 185 | crash_kexec(regs); | 187 | crash_kexec(regs); |
| @@ -190,7 +192,6 @@ void die(const char * str, struct pt_regs * regs, long err) | |||
| 190 | if (panic_on_oops) | 192 | if (panic_on_oops) |
| 191 | panic("Fatal exception"); | 193 | panic("Fatal exception"); |
| 192 | 194 | ||
| 193 | oops_exit(); | ||
| 194 | do_exit(SIGSEGV); | 195 | do_exit(SIGSEGV); |
| 195 | } | 196 | } |
| 196 | 197 | ||
