|
@@ -458,9 +458,11 @@ static void *eeh_add_virt_device(void *data, void *userdata)
|
|
|
|
|
|
driver = eeh_pcid_get(dev);
|
|
|
if (driver) {
|
|
|
- eeh_pcid_put(dev);
|
|
|
- if (driver->err_handler)
|
|
|
+ if (driver->err_handler) {
|
|
|
+ eeh_pcid_put(dev);
|
|
|
return NULL;
|
|
|
+ }
|
|
|
+ eeh_pcid_put(dev);
|
|
|
}
|
|
|
|
|
|
#ifdef CONFIG_PCI_IOV
|
|
@@ -497,17 +499,19 @@ static void *eeh_rmv_device(void *data, void *userdata)
|
|
|
if (eeh_dev_removed(edev))
|
|
|
return NULL;
|
|
|
|
|
|
- driver = eeh_pcid_get(dev);
|
|
|
- if (driver) {
|
|
|
- eeh_pcid_put(dev);
|
|
|
- if (removed &&
|
|
|
- eeh_pe_passed(edev->pe))
|
|
|
- return NULL;
|
|
|
- if (removed &&
|
|
|
- driver->err_handler &&
|
|
|
- driver->err_handler->error_detected &&
|
|
|
- driver->err_handler->slot_reset)
|
|
|
+ if (removed) {
|
|
|
+ if (eeh_pe_passed(edev->pe))
|
|
|
return NULL;
|
|
|
+ driver = eeh_pcid_get(dev);
|
|
|
+ if (driver) {
|
|
|
+ if (driver->err_handler &&
|
|
|
+ driver->err_handler->error_detected &&
|
|
|
+ driver->err_handler->slot_reset) {
|
|
|
+ eeh_pcid_put(dev);
|
|
|
+ return NULL;
|
|
|
+ }
|
|
|
+ eeh_pcid_put(dev);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/* Remove it from PCI subsystem */
|