powerpc/powernv: Fix endless reporting frozen PE
authorGavin Shan <gwshan@linux.vnet.ibm.com>
Thu, 24 Apr 2014 08:00:20 +0000 (18:00 +1000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Mon, 28 Apr 2014 07:34:36 +0000 (17:34 +1000)
Once one specific PE has been marked as EEH_PE_ISOLATED, it's in
the middile of recovery or removed permenently. We needn't report
the frozen PE again. Otherwise, we will have endless reporting
same frozen PE.

Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
arch/powerpc/platforms/powernv/eeh-ioda.c

index 35ec394..3a755b5 100644 (file)
@@ -745,6 +745,11 @@ static int ioda_eeh_next_error(struct eeh_pe **pe)
                         * If we can't find the corresponding PE, the
                         * PEEV / PEST would be messy. So we force an
                         * fenced PHB so that it can be recovered.
+                        *
+                        * If the PE has been marked as isolated, that
+                        * should have been removed permanently or in
+                        * progress with recovery. We needn't report
+                        * it again.
                         */
                        if (ioda_eeh_get_pe(hose, frozen_pe_no, pe)) {
                                *pe = phb_pe;
@@ -753,6 +758,8 @@ static int ioda_eeh_next_error(struct eeh_pe **pe)
                                        hose->global_number,
                                        frozen_pe_no);
                                ret = EEH_NEXT_ERR_FENCED_PHB;
+                       } else if ((*pe)->state & EEH_PE_ISOLATED) {
+                               ret = EEH_NEXT_ERR_NONE;
                        } else {
                                pr_err("EEH: Frozen PE#%x on PHB#%x detected\n",
                                        (*pe)->addr, (*pe)->phb->global_number);