PCI Hotplug: fakephp: fix deadlock... again
Commit fe99740cac
(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 <achiang@hp.com>
Acked-by: Yu Zhao <yu.zhao@intel.com>
Cc: Matthew Wilcox <matthew@wil.cx>
Cc: Kristen Carlson Accardi <kristen.c.accardi@intel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
This commit is contained in:
Родитель
53bc88701b
Коммит
48902025af
|
@ -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;
|
||||
|
|
Загрузка…
Ссылка в новой задаче