PCI: acpiphp: Stop disabling bridges on remove
acpiphp_disable_slot() turns off power to the slot immediately after calling disable_device(), so there's no point in disabling any bridges below the slot: we're about to turn them off anyway. Tested-by: Yijing Wang <wangyijing@huawei.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Acked-by: Yinghai Lu <yinghai@kernel.org>
This commit is contained in:
parent
0d7614f09c
commit
57fd9a4df5
|
@ -869,17 +869,6 @@ static int __ref enable_device(struct acpiphp_slot *slot)
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void disable_bridges(struct pci_bus *bus)
|
|
||||||
{
|
|
||||||
struct pci_dev *dev;
|
|
||||||
list_for_each_entry(dev, &bus->devices, bus_list) {
|
|
||||||
if (dev->subordinate) {
|
|
||||||
disable_bridges(dev->subordinate);
|
|
||||||
pci_disable_device(dev);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* return first device in slot, acquiring a reference on it */
|
/* return first device in slot, acquiring a reference on it */
|
||||||
static struct pci_dev *dev_in_slot(struct acpiphp_slot *slot)
|
static struct pci_dev *dev_in_slot(struct acpiphp_slot *slot)
|
||||||
{
|
{
|
||||||
|
@ -932,10 +921,6 @@ static int disable_device(struct acpiphp_slot *slot)
|
||||||
*/
|
*/
|
||||||
while ((pdev = dev_in_slot(slot))) {
|
while ((pdev = dev_in_slot(slot))) {
|
||||||
pci_stop_bus_device(pdev);
|
pci_stop_bus_device(pdev);
|
||||||
if (pdev->subordinate) {
|
|
||||||
disable_bridges(pdev->subordinate);
|
|
||||||
pci_disable_device(pdev);
|
|
||||||
}
|
|
||||||
__pci_remove_bus_device(pdev);
|
__pci_remove_bus_device(pdev);
|
||||||
pci_dev_put(pdev);
|
pci_dev_put(pdev);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue