|
@@ -921,6 +921,13 @@ void eeh_add_device_late(struct pci_dev *dev)
|
|
eeh_sysfs_remove_device(edev->pdev);
|
|
eeh_sysfs_remove_device(edev->pdev);
|
|
edev->mode &= ~EEH_DEV_SYSFS;
|
|
edev->mode &= ~EEH_DEV_SYSFS;
|
|
|
|
|
|
|
|
+ /*
|
|
|
|
+ * We definitely should have the PCI device removed
|
|
|
|
+ * though it wasn't correctly. So we needn't call
|
|
|
|
+ * into error handler afterwards.
|
|
|
|
+ */
|
|
|
|
+ edev->mode |= EEH_DEV_NO_HANDLER;
|
|
|
|
+
|
|
edev->pdev = NULL;
|
|
edev->pdev = NULL;
|
|
dev->dev.archdata.edev = NULL;
|
|
dev->dev.archdata.edev = NULL;
|
|
}
|
|
}
|
|
@@ -1023,6 +1030,14 @@ void eeh_remove_device(struct pci_dev *dev)
|
|
else
|
|
else
|
|
edev->mode |= EEH_DEV_DISCONNECTED;
|
|
edev->mode |= EEH_DEV_DISCONNECTED;
|
|
|
|
|
|
|
|
+ /*
|
|
|
|
+ * We're removing from the PCI subsystem, that means
|
|
|
|
+ * the PCI device driver can't support EEH or not
|
|
|
|
+ * well. So we rely on hotplug completely to do recovery
|
|
|
|
+ * for the specific PCI device.
|
|
|
|
+ */
|
|
|
|
+ edev->mode |= EEH_DEV_NO_HANDLER;
|
|
|
|
+
|
|
eeh_addr_cache_rmv_dev(dev);
|
|
eeh_addr_cache_rmv_dev(dev);
|
|
eeh_sysfs_remove_device(dev);
|
|
eeh_sysfs_remove_device(dev);
|
|
edev->mode &= ~EEH_DEV_SYSFS;
|
|
edev->mode &= ~EEH_DEV_SYSFS;
|