aboutsummaryrefslogtreecommitdiff
path: root/drivers/pci/remove.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@ppc970.osdl.org>2005-06-28 14:59:07 -0700
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-06-28 14:59:07 -0700
commitadb2705a89e8b41abcf29c0ed86f4ce93ab36734 (patch)
tree01d772570d58cce24b61874e711fd9f51e2729e7 /drivers/pci/remove.c
parentf340c0d1a3f40fdcba69cd291530a4debc58748f (diff)
parent8644d2a42bdba2d513f71c07eaf1b6f9b718b8eb (diff)
Merge master.kernel.org:/pub/scm/linux/kernel/git/gregkh/pci-2.6
Diffstat (limited to 'drivers/pci/remove.c')
-rw-r--r--drivers/pci/remove.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/drivers/pci/remove.c b/drivers/pci/remove.c
index 96f077f9a65..27a294b6965 100644
--- a/drivers/pci/remove.c
+++ b/drivers/pci/remove.c
@@ -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);