void do_ip27_dbe(struct pt_regs *regs) { unsigned long fixup, errst0, errst1; int cpu = LOCAL_HUB_L(PI_CPU_NUM); fixup = search_dbe_table(regs->cp0_epc); if (fixup) { long new_epc; new_epc = fixup_exception(dpf_reg, fixup, regs->cp0_epc); regs->cp0_epc = new_epc; return; } printk("Slice %c got dbe at 0x%lx\n", 'A' + cpu, regs->cp0_epc); printk("Hub information:\n"); printk("ERR_INT_PEND = 0x%06lx\n", LOCAL_HUB_L(PI_ERR_INT_PEND)); errst0 = LOCAL_HUB_L(cpu ? PI_ERR_STATUS0_B : PI_ERR_STATUS0_A); errst1 = LOCAL_HUB_L(cpu ? PI_ERR_STATUS1_B : PI_ERR_STATUS1_A); dump_hub_information(errst0, errst1); show_regs(regs); dump_tlb_all(); while(1); force_sig(SIGBUS, current); }
void do_dbe(struct pt_regs *regs) { unsigned long fixup; fixup = search_dbe_table(regs->cp0_epc); if (fixup) { long new_epc; new_epc = fixup_exception(dpf_reg, fixup, regs->cp0_epc); regs->cp0_epc = new_epc; return; } printk("Got dbe at 0x%lx\n", regs->cp0_epc); show_regs(regs); dump_tlb_all(); while(1); force_sig(SIGBUS, current); }