aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Chiang <[email protected]>2008-09-05 14:05:03 -0700
committerJesse Barnes <[email protected]>2008-09-09 11:44:06 -0700
commit48902025af4da44dbbc0231061e542d6d40e712e (patch)
tree76560726e8345829b20cf4f604de8456336ba9cb
parent53bc88701be91e7f631ad31418b32392aa952e9b (diff)
PCI Hotplug: fakephp: fix deadlock... again
Commit fe99740cac117f208707488c03f3789cf4904957 (construct one fakephp slot per PCI slot) introduced a regression, causing a deadlock when removing a PCI device. We also never actually removed the device from the PCI core. So we: - remove the device from the PCI core - do not directly call remove_slot() to prevent deadlock Yu Zhao reported and diagnosed this defect. Signed-off-by: Alex Chiang <[email protected]> Acked-by: Yu Zhao <[email protected]> Cc: Matthew Wilcox <[email protected]> Cc: Kristen Carlson Accardi <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Jesse Barnes <[email protected]>
-rw-r--r--drivers/pci/hotplug/fakephp.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/pci/hotplug/fakephp.c b/drivers/pci/hotplug/fakephp.c
index 40337a06c18a..146ca9cd1567 100644
--- a/drivers/pci/hotplug/fakephp.c
+++ b/drivers/pci/hotplug/fakephp.c
@@ -320,15 +320,15 @@ static int disable_slot(struct hotplug_slot *slot)
return -ENODEV;
}
+ /* remove the device from the pci core */
+ pci_remove_bus_device(dev);
+
/* queue work item to blow away this sysfs entry and other
* parts.
*/
INIT_WORK(&dslot->remove_work, remove_slot_worker);
queue_work(dummyphp_wq, &dslot->remove_work);
- /* blow away this sysfs entry and other parts. */
- remove_slot(dslot);
-
pci_dev_put(dev);
}
return 0;