On Fri, Aug 17, 2012 at 4:36 PM, Bjorn Helgaas <bhelgaas@xxxxxxxxxx> wrote: > Previously, when we removed a PCI device, we made two passes over the > hierarchy rooted at the device. In the first pass, we stopped all > the devices, and in the second, we removed them. > > This patch combines the two passes into one so that we remove a device as > soon as it and all its children have been stopped. > > Note that we previously stopped devices in reverse order and removed them > in forward order. Now we stop and remove them in reverse order. > > Signed-off-by: Bjorn Helgaas <bhelgaas@xxxxxxxxxx> > --- > drivers/pci/remove.c | 42 +++++++----------------------------------- > 1 files changed, 7 insertions(+), 35 deletions(-) looks like your cleanup will have some conflict with my pci root bus hot plug branch. http://git.kernel.org/?p=linux/kernel/git/yinghai/linux-yinghai.git;a=blob;f=drivers/pci/remove.c;h=f672731922f8db619fb36db05dbd9c27f3253c19;hb=refs/heads/for-pci-root-bus-hotplug it add pci_stop_and_remove_bus and it depends on some functions that you kill in this patch set. 180 void pci_stop_and_remove_bus(struct pci_bus *bus) 181 { 182 struct pci_host_bridge *host_bridge = NULL; 183 struct pci_dev *pci_bridge = NULL; 184 185 pci_stop_bus_devices(bus); 186 187 if (pci_is_root_bus(bus)) { 188 host_bridge = to_pci_host_bridge(bus->bridge); 189 get_device(&host_bridge->dev); 190 pci_stop_host_bridge(host_bridge); 191 } else 192 pci_bridge = bus->self; 193 194 __pci_remove_bus_devices(bus); 195 196 pci_remove_bus(bus); 197 198 if (host_bridge) { 199 host_bridge->bus = NULL; 200 put_device(&host_bridge->dev); 201 } 202 203 if (pci_bridge) 204 pci_bridge->subordinate = NULL; 205 } Yinghai -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html