diff options
author | Ralf Baechle <ralf@linux-mips.org> | 2006-05-24 17:51:02 +0200 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2006-06-06 01:15:13 +0200 |
commit | cac4bcbce0e800f2219a27b66aaeb4a33f2e3dbc (patch) | |
tree | d70076cbfca03f74bcc98795f5887579473457b8 /arch | |
parent | [MIPS] Fix declaration of smp_prepare_cpus() platform hook. (diff) | |
download | linux-cac4bcbce0e800f2219a27b66aaeb4a33f2e3dbc.tar.xz linux-cac4bcbce0e800f2219a27b66aaeb4a33f2e3dbc.zip |
[MIPS] Print more information if we're struck by a machine check exception.
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/mips/kernel/traps.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c index 35cb08da3820..a7564b08eb4d 100644 --- a/arch/mips/kernel/traps.c +++ b/arch/mips/kernel/traps.c @@ -819,15 +819,30 @@ asmlinkage void do_watch(struct pt_regs *regs) asmlinkage void do_mcheck(struct pt_regs *regs) { + const int field = 2 * sizeof(unsigned long); + int multi_match = regs->cp0_status & ST0_TS; + show_regs(regs); - dump_tlb_all(); + + if (multi_match) { + printk("Index : %0x\n", read_c0_index()); + printk("Pagemask: %0x\n", read_c0_pagemask()); + printk("EntryHi : %0*lx\n", field, read_c0_entryhi()); + printk("EntryLo0: %0*lx\n", field, read_c0_entrylo0()); + printk("EntryLo1: %0*lx\n", field, read_c0_entrylo1()); + printk("\n"); + dump_tlb_all(); + } + + show_code((unsigned int *) regs->cp0_epc); + /* * Some chips may have other causes of machine check (e.g. SB1 * graduation timer) */ panic("Caught Machine Check exception - %scaused by multiple " "matching entries in the TLB.", - (regs->cp0_status & ST0_TS) ? "" : "not "); + (multi_match) ? "" : "not "); } asmlinkage void do_mt(struct pt_regs *regs) |