diff options
author | Helge Deller <deller@gmx.de> | 2016-10-11 14:49:42 -0400 |
---|---|---|
committer | Helge Deller <deller@gmx.de> | 2016-10-11 14:52:47 -0400 |
commit | 0a862485f42af7df530b0b5f0e5ba8ffbb3a4a12 (patch) | |
tree | 15623a89fecbbfbedcc6854ee148ee8ff2efe171 /arch/parisc | |
parent | e3b6a02816ebbda3acfde2f079446ba92c97e70b (diff) |
parisc: Show trap name in kernel crash
Show the real trap name when the kernel crashes.
Signed-off-by: Helge Deller <deller@gmx.de>
Diffstat (limited to 'arch/parisc')
-rw-r--r-- | arch/parisc/include/asm/traps.h | 1 | ||||
-rw-r--r-- | arch/parisc/kernel/traps.c | 4 | ||||
-rw-r--r-- | arch/parisc/mm/fault.c | 17 |
3 files changed, 14 insertions, 8 deletions
diff --git a/arch/parisc/include/asm/traps.h b/arch/parisc/include/asm/traps.h index 5e953ab4530d..63670231f48a 100644 --- a/arch/parisc/include/asm/traps.h +++ b/arch/parisc/include/asm/traps.h | |||
@@ -11,6 +11,7 @@ void parisc_terminate(char *msg, struct pt_regs *regs, | |||
11 | void die_if_kernel(char *str, struct pt_regs *regs, long err); | 11 | void die_if_kernel(char *str, struct pt_regs *regs, long err); |
12 | 12 | ||
13 | /* mm/fault.c */ | 13 | /* mm/fault.c */ |
14 | const char *trap_name(unsigned long code); | ||
14 | void do_page_fault(struct pt_regs *regs, unsigned long code, | 15 | void do_page_fault(struct pt_regs *regs, unsigned long code, |
15 | unsigned long address); | 16 | unsigned long address); |
16 | #endif | 17 | #endif |
diff --git a/arch/parisc/kernel/traps.c b/arch/parisc/kernel/traps.c index 97d6b208e129..378df9207406 100644 --- a/arch/parisc/kernel/traps.c +++ b/arch/parisc/kernel/traps.c | |||
@@ -458,8 +458,8 @@ void parisc_terminate(char *msg, struct pt_regs *regs, int code, unsigned long o | |||
458 | } | 458 | } |
459 | 459 | ||
460 | printk("\n"); | 460 | printk("\n"); |
461 | printk(KERN_CRIT "%s: Code=%d regs=%p (Addr=" RFMT ")\n", | 461 | pr_crit("%s: Code=%d (%s) regs=%p (Addr=" RFMT ")\n", |
462 | msg, code, regs, offset); | 462 | msg, code, trap_name(code), regs, offset); |
463 | show_regs(regs); | 463 | show_regs(regs); |
464 | 464 | ||
465 | spin_unlock(&terminate_lock); | 465 | spin_unlock(&terminate_lock); |
diff --git a/arch/parisc/mm/fault.c b/arch/parisc/mm/fault.c index d64f1c854fdf..8ff9253930af 100644 --- a/arch/parisc/mm/fault.c +++ b/arch/parisc/mm/fault.c | |||
@@ -204,6 +204,16 @@ static const char * const trap_description[] = { | |||
204 | [28] "Unaligned data reference trap", | 204 | [28] "Unaligned data reference trap", |
205 | }; | 205 | }; |
206 | 206 | ||
207 | const char *trap_name(unsigned long code) | ||
208 | { | ||
209 | const char *t = NULL; | ||
210 | |||
211 | if (code < ARRAY_SIZE(trap_description)) | ||
212 | t = trap_description[code]; | ||
213 | |||
214 | return t ? t : "Unknown trap"; | ||
215 | } | ||
216 | |||
207 | /* | 217 | /* |
208 | * Print out info about fatal segfaults, if the show_unhandled_signals | 218 | * Print out info about fatal segfaults, if the show_unhandled_signals |
209 | * sysctl is set: | 219 | * sysctl is set: |
@@ -213,8 +223,6 @@ show_signal_msg(struct pt_regs *regs, unsigned long code, | |||
213 | unsigned long address, struct task_struct *tsk, | 223 | unsigned long address, struct task_struct *tsk, |
214 | struct vm_area_struct *vma) | 224 | struct vm_area_struct *vma) |
215 | { | 225 | { |
216 | const char *trap_name = NULL; | ||
217 | |||
218 | if (!unhandled_signal(tsk, SIGSEGV)) | 226 | if (!unhandled_signal(tsk, SIGSEGV)) |
219 | return; | 227 | return; |
220 | 228 | ||
@@ -226,10 +234,7 @@ show_signal_msg(struct pt_regs *regs, unsigned long code, | |||
226 | tsk->comm, code, address); | 234 | tsk->comm, code, address); |
227 | print_vma_addr(KERN_CONT " in ", regs->iaoq[0]); | 235 | print_vma_addr(KERN_CONT " in ", regs->iaoq[0]); |
228 | 236 | ||
229 | if (code < ARRAY_SIZE(trap_description)) | 237 | pr_cont(" trap #%lu: %s%c", code, trap_name(code), |
230 | trap_name = trap_description[code]; | ||
231 | pr_warn(KERN_CONT " trap #%lu: %s%c", code, | ||
232 | trap_name ? trap_name : "unknown", | ||
233 | vma ? ',':'\n'); | 238 | vma ? ',':'\n'); |
234 | 239 | ||
235 | if (vma) | 240 | if (vma) |