|
@@ -664,9 +664,17 @@ static void eeh_handle_normal_event(struct eeh_pe *pe)
|
|
|
* to accomplish the reset. Each child gets a report of the
|
|
|
* status ... if any child can't handle the reset, then the entire
|
|
|
* slot is dlpar removed and added.
|
|
|
+ *
|
|
|
+ * When the PHB is fenced, we have to issue a reset to recover from
|
|
|
+ * the error. Override the result if necessary to have partially
|
|
|
+ * hotplug for this case.
|
|
|
*/
|
|
|
pr_info("EEH: Notify device drivers to shutdown\n");
|
|
|
eeh_pe_dev_traverse(pe, eeh_report_error, &result);
|
|
|
+ if ((pe->type & EEH_PE_PHB) &&
|
|
|
+ result != PCI_ERS_RESULT_NONE &&
|
|
|
+ result != PCI_ERS_RESULT_NEED_RESET)
|
|
|
+ result = PCI_ERS_RESULT_NEED_RESET;
|
|
|
|
|
|
/* Get the current PCI slot state. This can take a long time,
|
|
|
* sometimes over 300 seconds for certain systems.
|