mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
[POWERPC][XEN] Add newlines on multiline output and dump SLB on SLB errors
Signed-off-by: Jimi Xenidis <jimix@watson.ibm.com> Signed-off-by: Hollis Blanchard <hollisb@us.ibm.com>
This commit is contained in:
1 parent
e0a8d4c574
commit
bf31d9ab24
1 file changed
+35
-31
@@ -56,61 +56,65 @@ int cpu_machinecheck(struct cpu_user_regs *regs)
|
||||
|
||||
printk("SRR1: 0x%016lx\n", regs->msr);
|
||||
if (regs->msr & MCK_SRR1_INSN_FETCH_UNIT)
|
||||
printk("42: Exception caused by Instruction Fetch Unit (IFU) "
|
||||
"detection of a hardware uncorrectable error (UE).\n");
|
||||
printk("42: Exception caused by Instruction Fetch Unit (IFU)\n"
|
||||
" detection of a hardware uncorrectable error (UE).\n");
|
||||
|
||||
if (regs->msr & MCK_SRR1_LOAD_STORE)
|
||||
printk("43: Exception caused by load/store detection of error "
|
||||
"(see DSISR)\n");
|
||||
printk("43: Exception caused by load/store detection of error\n"
|
||||
" (see DSISR)\n");
|
||||
|
||||
switch (regs->msr & MCK_SRR1_CAUSE_MASK) {
|
||||
case 0:
|
||||
printk("0b00: Likely caused by an asynchronous machine check,\n"
|
||||
"see SCOM Asynchronous Machine Check Register\n");
|
||||
break;
|
||||
case MCK_SRR1_CAUSE_SLB_PAR:
|
||||
printk("0b01: Exception caused by an SLB parity error detected "
|
||||
"while translating an instruction fetch address.\n");
|
||||
printk("0b01: Exception caused by an SLB parity error detected\n"
|
||||
" while translating an instruction fetch address.\n");
|
||||
break;
|
||||
case MCK_SRR1_CAUSE_TLB_PAR:
|
||||
printk("0b10: Exception caused by a TLB parity error detected "
|
||||
"while translating an instruction fetch address.\n");
|
||||
printk("0b10: Exception caused by a TLB parity error detected\n"
|
||||
" while translating an instruction fetch address.\n");
|
||||
break;
|
||||
case MCK_SRR1_CAUSE_UE:
|
||||
printk("0b11: Exception caused by a hardware uncorrectable "
|
||||
"error (UE) detected while doing a reload of an "
|
||||
"instruction-fetch TLB tablewalk.\n");
|
||||
break;
|
||||
default:
|
||||
printk("0b11: Exception caused by a hardware uncorrectable\n"
|
||||
" error (UE) detected while doing a reload of an\n"
|
||||
" instruction-fetch TLB tablewalk.\n");
|
||||
break;
|
||||
}
|
||||
|
||||
printk("\nDSIDR: 0x%08x\n", dsisr);
|
||||
printk("\nDSISR: 0x%08x\n", dsisr);
|
||||
if (dsisr & MCK_DSISR_UE)
|
||||
printk("16: Exception caused by a UE deferred error "
|
||||
"(DAR is undefined).\n");
|
||||
printk("16: Exception caused by a UE deferred error\n"
|
||||
" (DAR is undefined).\n");
|
||||
|
||||
if (dsisr & MCK_DSISR_UE_TABLE_WALK)
|
||||
printk("17: Exception caused by a UE deferred error "
|
||||
"during a tablewalk (D-side).\n");
|
||||
printk("17: Exception caused by a UE deferred error\n"
|
||||
" during a tablewalk (D-side).\n");
|
||||
|
||||
if (dsisr & MCK_DSISR_L1_DCACHE_PAR)
|
||||
printk("18: Exception was caused by a software recoverable "
|
||||
"parity error in the L1 D-cache.\n");
|
||||
printk("18: Exception was caused by a software recoverable\n"
|
||||
" parity error in the L1 D-cache.\n");
|
||||
|
||||
if (dsisr & MCK_DSISR_L1_DCACHE_TAG_PAR)
|
||||
printk("19: Exception was caused by a software recoverable "
|
||||
"parity error in the L1 D-cache tag.\n");
|
||||
printk("19: Exception was caused by a software recoverable\n"
|
||||
" parity error in the L1 D-cache tag.\n");
|
||||
|
||||
if (dsisr & MCK_DSISR_D_ERAT_PAR)
|
||||
printk("20: Exception was caused by a software recoverable parity "
|
||||
"error in the D-ERAT.\n");
|
||||
printk("20: Exception was caused by a software recoverable parity\n"
|
||||
" error in the D-ERAT.\n");
|
||||
|
||||
if (dsisr & MCK_DSISR_TLB_PAR)
|
||||
printk("21: Exception was caused by a software recoverable parity "
|
||||
"error in the TLB.\n");
|
||||
printk("21: Exception was caused by a software recoverable parity\n"
|
||||
" error in the TLB.\n");
|
||||
|
||||
if (dsisr & MCK_DSISR_SLB_PAR)
|
||||
printk("23: Exception was caused by an SLB parity error (may not be "
|
||||
"recoverable). This condition could occur if the "
|
||||
"effective segment ID (ESID) fields of two or more SLB "
|
||||
"entries contain the same value.");
|
||||
if (dsisr & MCK_DSISR_SLB_PAR) {
|
||||
printk("23: Exception was caused by an SLB parity error (may not be\n"
|
||||
" recoverable). This condition could occur if the\n"
|
||||
" effective segment ID (ESID) fields of two or more SLB\n"
|
||||
" entries contain the same value.\n");
|
||||
dump_segments(0);
|
||||
}
|
||||
|
||||
return 0; /* for now lets not recover; */
|
||||
}
|
||||