|
@@ -457,7 +457,14 @@ int machine_check_e500mc(struct pt_regs *regs)
|
|
|
|
|
|
if (reason & MCSR_DCPERR_MC) {
|
|
|
printk("Data Cache Parity Error\n");
|
|
|
- recoverable = 0;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * In write shadow mode we auto-recover from the error, but it
|
|
|
+ * may still get logged and cause a machine check. We should
|
|
|
+ * only treat the non-write shadow case as non-recoverable.
|
|
|
+ */
|
|
|
+ if (!(mfspr(SPRN_L1CSR2) & L1CSR2_DCWS))
|
|
|
+ recoverable = 0;
|
|
|
}
|
|
|
|
|
|
if (reason & MCSR_L2MMU_MHIT) {
|