|
@@ -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)
|