Commit 71b540adffd9832e025dd9401178a8ef8c814e50
Committed by
Benjamin Herrenschmidt
1 parent
1ad7a72c5e
Exists in
ti-lsk-linux-4.1.y
and in
10 other branches
powerpc/powernv: Don't escalate non-existing frozen PE
Commit cb5b242c ("powerpc/eeh: Escalate error on non-existing PE") escalates the frozen state on non-existing PE to fenced PHB. It was to improve kdump reliability. After that, commit 361f2a2a ("powrpc/powernv: Reset PHB in kdump kernel") was introduced to issue complete reset on all PHBs to increase the reliability of kdump kernel. Commit cb5b242c becomes unuseful and it would be reverted. Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Showing 1 changed file with 9 additions and 15 deletions Side-by-side Diff
arch/powerpc/platforms/powernv/eeh-ioda.c
... | ... | @@ -794,23 +794,17 @@ |
794 | 794 | break; |
795 | 795 | case OPAL_EEH_PE_ERROR: |
796 | 796 | /* |
797 | - * If we can't find the corresponding PE, the | |
798 | - * PEEV / PEST would be messy. So we force an | |
799 | - * fenced PHB so that it can be recovered. | |
800 | - * | |
801 | - * If the PE has been marked as isolated, that | |
802 | - * should have been removed permanently or in | |
803 | - * progress with recovery. We needn't report | |
804 | - * it again. | |
797 | + * If we can't find the corresponding PE, we | |
798 | + * just try to unfreeze. | |
805 | 799 | */ |
806 | 800 | if (ioda_eeh_get_pe(hose, |
807 | - be64_to_cpu(frozen_pe_no), pe)) { | |
808 | - *pe = phb_pe; | |
809 | - pr_err("EEH: Escalated fenced PHB#%x " | |
810 | - "detected for PE#%llx\n", | |
811 | - hose->global_number, | |
812 | - be64_to_cpu(frozen_pe_no)); | |
813 | - ret = EEH_NEXT_ERR_FENCED_PHB; | |
801 | + be64_to_cpu(frozen_pe_no), pe)) { | |
802 | + /* Try best to clear it */ | |
803 | + pr_info("EEH: Clear non-existing PHB#%x-PE#%llx\n", | |
804 | + hose->global_number, frozen_pe_no); | |
805 | + opal_pci_eeh_freeze_clear(phb->opal_id, frozen_pe_no, | |
806 | + OPAL_EEH_ACTION_CLEAR_FREEZE_ALL); | |
807 | + ret = EEH_NEXT_ERR_NONE; | |
814 | 808 | } else if ((*pe)->state & EEH_PE_ISOLATED) { |
815 | 809 | ret = EEH_NEXT_ERR_NONE; |
816 | 810 | } else { |