]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/pci/remove.c
[PATCH] acpi bridge hotadd: Make the PCI remove routines safe for failed hot-plug
[linux-2.6-omap-h63xx.git] / drivers / pci / remove.c
index 96f077f9a6594057105f1901f9aea4620f6a1e15..27a294b6965d41e964a8630ad15a3571a0f6430e 100644 (file)
@@ -18,17 +18,21 @@ static void pci_free_resources(struct pci_dev *dev)
 
 static void pci_destroy_dev(struct pci_dev *dev)
 {
-       pci_proc_detach_device(dev);
-       pci_remove_sysfs_dev_files(dev);
-       device_unregister(&dev->dev);
+       if (!list_empty(&dev->global_list)) {
+               pci_proc_detach_device(dev);
+               pci_remove_sysfs_dev_files(dev);
+               device_unregister(&dev->dev);
+               spin_lock(&pci_bus_lock);
+               list_del(&dev->global_list);
+               dev->global_list.next = dev->global_list.prev = NULL;
+               spin_unlock(&pci_bus_lock);
+       }
 
        /* Remove the device from the device lists, and prevent any further
         * list accesses from this device */
        spin_lock(&pci_bus_lock);
        list_del(&dev->bus_list);
-       list_del(&dev->global_list);
        dev->bus_list.next = dev->bus_list.prev = NULL;
-       dev->global_list.next = dev->global_list.prev = NULL;
        spin_unlock(&pci_bus_lock);
 
        pci_free_resources(dev);