powerpc/eeh: Dump PHB diag-data for non-existing PE
authorGavin Shan <gwshan@linux.vnet.ibm.com>
Tue, 12 May 2015 07:05:32 +0000 (17:05 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Tue, 21 Jul 2015 01:38:47 +0000 (11:38 +1000)
When detecting EEH error on non-existing PE, including the reserved
one, the PE is simply unfrozen without dumping the PHB diag-data,
which is useful for locating the root cause of the EEH error. The
patch dumps the PHB diag-data when non-existing PE reports error.

Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/platforms/powernv/eeh-powernv.c

index b357cdc3f4726d493b13ab0e724d4e5591dd28ff..0fe2b0cb587a08986112a5da4489598264cb3f97 100644 (file)
@@ -1394,11 +1394,19 @@ static int pnv_eeh_next_error(struct eeh_pe **pe)
                         */
                        if (pnv_eeh_get_pe(hose,
                                be64_to_cpu(frozen_pe_no), pe)) {
-                               /* Try best to clear it */
                                pr_info("EEH: Clear non-existing PHB#%x-PE#%llx\n",
                                        hose->global_number, be64_to_cpu(frozen_pe_no));
                                pr_info("EEH: PHB location: %s\n",
                                        eeh_pe_loc_get(phb_pe));
+
+                               /* Dump PHB diag-data */
+                               rc = opal_pci_get_phb_diag_data2(phb->opal_id,
+                                       phb->diag.blob, PNV_PCI_DIAG_BUF_SIZE);
+                               if (rc == OPAL_SUCCESS)
+                                       pnv_pci_dump_phb_diag_data(hose,
+                                                       phb->diag.blob);
+
+                               /* Try best to clear it */
                                opal_pci_eeh_freeze_clear(phb->opal_id,
                                        frozen_pe_no,
                                        OPAL_EEH_ACTION_CLEAR_FREEZE_ALL);