diff options
Diffstat (limited to 'drivers/pci/remove.c')
| -rw-r--r-- | drivers/pci/remove.c | 42 | 
1 files changed, 7 insertions, 35 deletions
diff --git a/drivers/pci/remove.c b/drivers/pci/remove.c index 30d002e83e2..38281042c31 100644 --- a/drivers/pci/remove.c +++ b/drivers/pci/remove.c @@ -78,8 +78,6 @@ void pci_remove_bus(struct pci_bus *pci_bus)  }  EXPORT_SYMBOL(pci_remove_bus); -static void pci_stop_bus_device(struct pci_dev *dev); -  /**   * pci_stop_and_remove_bus_device - remove a PCI device and any children   * @dev: the device to remove @@ -92,38 +90,8 @@ static void pci_stop_bus_device(struct pci_dev *dev);   * device lists, remove the /proc entry, and notify userspace   * (/sbin/hotplug).   */ -static void __pci_remove_bus_device(struct pci_dev *dev) -{ -	struct pci_bus *bus = dev->subordinate; -	struct pci_dev *child, *tmp; - -	if (bus) { -		list_for_each_entry_safe(child, tmp, &bus->devices, bus_list) -			__pci_remove_bus_device(child); - -		pci_remove_bus(bus); -		dev->subordinate = NULL; -	} - -	pci_destroy_dev(dev); -} -  void pci_stop_and_remove_bus_device(struct pci_dev *dev)  { -	pci_stop_bus_device(dev); -	__pci_remove_bus_device(dev); -} - -/** - * pci_stop_bus_device - stop a PCI device and any children - * @dev: the device to stop - * - * Stop a PCI device (detach the driver, remove from the global list - * and so on). This also stop any subordinate buses and children in a - * depth-first manner. - */ -static void pci_stop_bus_device(struct pci_dev *dev) -{  	struct pci_bus *bus = dev->subordinate;  	struct pci_dev *child, *tmp; @@ -133,12 +101,16 @@ static void pci_stop_bus_device(struct pci_dev *dev)  	 * iterator.  Therefore, iterate in reverse so we remove the VFs  	 * first, then the PF.  	 */ -	if (bus) +	if (bus) {  		list_for_each_entry_safe_reverse(child, tmp,  						 &bus->devices, bus_list) -			pci_stop_bus_device(child); +			pci_stop_and_remove_bus_device(child); + +		pci_remove_bus(bus); +		dev->subordinate = NULL; +	}  	pci_stop_dev(dev); +	pci_destroy_dev(dev);  } -  EXPORT_SYMBOL(pci_stop_and_remove_bus_device);  |