Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 35845a78 authored by Gavin Shan's avatar Gavin Shan Committed by Benjamin Herrenschmidt
Browse files

powerpc/eeh: Can't recover from non-PE-reset case



When PCI_ERS_RESULT_CAN_RECOVER returned from device drivers, the
EEH core should enable I/O and DMA for the affected PE. However,
it was missed to have DMA enabled in eeh_handle_normal_event().
Besides, the frozen state of the affected PE should be cleared
after successful recovery, but we didn't.

The patch fixes both of the issues as above.

Signed-off-by: default avatarGavin Shan <gwshan@linux.vnet.ibm.com>
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
parent 361f2a2a
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -640,7 +640,6 @@ static void eeh_handle_normal_event(struct eeh_pe *pe)
			result = PCI_ERS_RESULT_NEED_RESET;
		} else {
			pr_info("EEH: Notify device drivers to resume I/O\n");
			result = PCI_ERS_RESULT_NONE;
			eeh_pe_dev_traverse(pe, eeh_report_mmio_enabled, &result);
		}
	}
@@ -652,11 +651,18 @@ static void eeh_handle_normal_event(struct eeh_pe *pe)

		if (rc < 0)
			goto hard_fail;
		if (rc)
		if (rc) {
			result = PCI_ERS_RESULT_NEED_RESET;
		else
		} else {
			/*
			 * We didn't do PE reset for the case. The PE
			 * is still in frozen state. Clear it before
			 * resuming the PE.
			 */
			eeh_pe_state_clear(pe, EEH_PE_ISOLATED);
			result = PCI_ERS_RESULT_RECOVERED;
		}
	}

	/* If any device has a hard failure, then shut off everything. */
	if (result == PCI_ERS_RESULT_DISCONNECT) {