|
|
@@ -811,6 +811,10 @@ void eeh_handle_normal_event(struct eeh_pe *pe)
|
|
|
pr_warn("EEH: This PCI device has failed %d times in the last hour and will be permanently disabled after %d failures.\n",
|
|
|
pe->freeze_count, eeh_max_freezes);
|
|
|
|
|
|
+ eeh_for_each_pe(pe, tmp_pe)
|
|
|
+ eeh_pe_for_each_dev(tmp_pe, edev, tmp)
|
|
|
+ edev->mode &= ~EEH_DEV_NO_HANDLER;
|
|
|
+
|
|
|
/* Walk the various device drivers attached to this slot through
|
|
|
* a reset sequence, giving each an opportunity to do what it needs
|
|
|
* to accomplish the reset. Each child gets a report of the
|
|
|
@@ -1004,7 +1008,8 @@ final:
|
|
|
*/
|
|
|
void eeh_handle_special_event(void)
|
|
|
{
|
|
|
- struct eeh_pe *pe, *phb_pe;
|
|
|
+ struct eeh_pe *pe, *phb_pe, *tmp_pe;
|
|
|
+ struct eeh_dev *edev, *tmp_edev;
|
|
|
struct pci_bus *bus;
|
|
|
struct pci_controller *hose;
|
|
|
unsigned long flags;
|
|
|
@@ -1075,6 +1080,10 @@ void eeh_handle_special_event(void)
|
|
|
(phb_pe->state & EEH_PE_RECOVERING))
|
|
|
continue;
|
|
|
|
|
|
+ eeh_for_each_pe(pe, tmp_pe)
|
|
|
+ eeh_pe_for_each_dev(tmp_pe, edev, tmp_edev)
|
|
|
+ edev->mode &= ~EEH_DEV_NO_HANDLER;
|
|
|
+
|
|
|
/* Notify all devices to be down */
|
|
|
eeh_pe_state_clear(pe, EEH_PE_PRI_BUS);
|
|
|
eeh_set_channel_state(pe, pci_channel_io_perm_failure);
|