From: Bjorn Helgaas Date: Fri, 17 Aug 2012 15:56:14 +0000 (-0600) Subject: PCI: acpiphp: Stop disabling bridges on remove X-Git-Tag: v3.7-rc1~177^2~15^2~15 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=57fd9a4df562e7d2105a01ff57b4cdaa236c28ce;p=thirdparty%2Fkernel%2Flinux.git 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 Signed-off-by: Bjorn Helgaas Acked-by: Yinghai Lu --- diff --git a/drivers/pci/hotplug/acpiphp_glue.c b/drivers/pci/hotplug/acpiphp_glue.c index ad6fd66954956..c25291c74353f 100644 --- a/drivers/pci/hotplug/acpiphp_glue.c +++ b/drivers/pci/hotplug/acpiphp_glue.c @@ -869,17 +869,6 @@ static int __ref enable_device(struct acpiphp_slot *slot) 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 */ 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))) { pci_stop_bus_device(pdev); - if (pdev->subordinate) { - disable_bridges(pdev->subordinate); - pci_disable_device(pdev); - } __pci_remove_bus_device(pdev); pci_dev_put(pdev); }