# HG changeset patch
# User Jimi Xenidis <[EMAIL PROTECTED]>
# Node ID 1d9c135673e4db41789d730d843c9e5f8de3a4eb
# Parent  2d41938a5599faf3b03c74b04e353b9aef1c9a9c
[POWERPC][XEN] Add newlines on multiline output and dump SLB on SLB errors

Signed-off-by: Jimi Xenidis <[EMAIL PROTECTED]>
---
 xen/arch/powerpc/powerpc64/ppc970_machinecheck.c |   66 ++++++++++++-----------
 1 files changed, 35 insertions(+), 31 deletions(-)

diff -r 2d41938a5599 -r 1d9c135673e4 
xen/arch/powerpc/powerpc64/ppc970_machinecheck.c
--- a/xen/arch/powerpc/powerpc64/ppc970_machinecheck.c  Fri Sep 15 18:19:46 
2006 -0400
+++ b/xen/arch/powerpc/powerpc64/ppc970_machinecheck.c  Fri Sep 15 18:20:55 
2006 -0400
@@ -56,61 +56,65 @@ int cpu_machinecheck(struct cpu_user_reg
 
     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; */
 }

_______________________________________________
Xen-ppc-devel mailing list
Xen-ppc-devel@lists.xensource.com
http://lists.xensource.com/xen-ppc-devel

Reply via email to