Merge branch 'pci/hotplug'
- Fix pciehp AB-BA deadlock between reset_lock and device_lock (Lukas Wunner) * pci/hotplug: PCI: pciehp: Fix AB-BA deadlock between reset_lock and device_lock
This commit is contained in:
commit
8745c3d542
|
@ -63,7 +63,14 @@ int pciehp_configure_device(struct controller *ctrl)
|
|||
|
||||
pci_assign_unassigned_bridge_resources(bridge);
|
||||
pcie_bus_configure_settings(parent);
|
||||
|
||||
/*
|
||||
* Release reset_lock during driver binding
|
||||
* to avoid AB-BA deadlock with device_lock.
|
||||
*/
|
||||
up_read(&ctrl->reset_lock);
|
||||
pci_bus_add_devices(parent);
|
||||
down_read_nested(&ctrl->reset_lock, ctrl->depth);
|
||||
|
||||
out:
|
||||
pci_unlock_rescan_remove();
|
||||
|
@ -104,7 +111,15 @@ void pciehp_unconfigure_device(struct controller *ctrl, bool presence)
|
|||
list_for_each_entry_safe_reverse(dev, temp, &parent->devices,
|
||||
bus_list) {
|
||||
pci_dev_get(dev);
|
||||
|
||||
/*
|
||||
* Release reset_lock during driver unbinding
|
||||
* to avoid AB-BA deadlock with device_lock.
|
||||
*/
|
||||
up_read(&ctrl->reset_lock);
|
||||
pci_stop_and_remove_bus_device(dev);
|
||||
down_read_nested(&ctrl->reset_lock, ctrl->depth);
|
||||
|
||||
/*
|
||||
* Ensure that no new Requests will be generated from
|
||||
* the device.
|
||||
|
|
Loading…
Reference in New Issue