|
@@ -587,10 +587,16 @@ static int eeh_reset_device(struct eeh_pe *pe, struct pci_bus *bus)
|
|
|
eeh_ops->configure_bridge(pe);
|
|
|
eeh_pe_restore_bars(pe);
|
|
|
|
|
|
- /* Clear frozen state */
|
|
|
- rc = eeh_clear_pe_frozen_state(pe, false);
|
|
|
- if (rc)
|
|
|
- return rc;
|
|
|
+ /*
|
|
|
+ * If it's PHB PE, the frozen state on all available PEs should have
|
|
|
+ * been cleared by the PHB reset. Otherwise, we unfreeze the PE and its
|
|
|
+ * child PEs because they might be in frozen state.
|
|
|
+ */
|
|
|
+ if (!(pe->type & EEH_PE_PHB)) {
|
|
|
+ rc = eeh_clear_pe_frozen_state(pe, false);
|
|
|
+ if (rc)
|
|
|
+ return rc;
|
|
|
+ }
|
|
|
|
|
|
/* Give the system 5 seconds to finish running the user-space
|
|
|
* hotplug shutdown scripts, e.g. ifdown for ethernet. Yes,
|