aboutsummaryrefslogtreecommitdiff
path: root/drivers/pci/remove.c
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2014-02-20 11:55:12 +0100
committerJohannes Berg <johannes.berg@intel.com>2014-02-20 11:55:12 +0100
commitbf5f48339a019c9b4b42284c3f45d58942cbda27 (patch)
tree79976135166ffbdaf4ccb91bcadb17ddb551f060 /drivers/pci/remove.c
parentd85dad75566674ca8012715ac00a84ced3697972 (diff)
parent35582ad9d342025653aaf28ed321bf5352488d7f (diff)
Merge remote-tracking branch 'wireless-next/master' into mac80211-next
Diffstat (limited to 'drivers/pci/remove.c')
-rw-r--r--drivers/pci/remove.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/drivers/pci/remove.c b/drivers/pci/remove.c
index 4ff36bfa785..8bd76c9ba21 100644
--- a/drivers/pci/remove.c
+++ b/drivers/pci/remove.c
@@ -3,6 +3,18 @@
#include <linux/pci-aspm.h>
#include "pci.h"
+static void pci_free_resources(struct pci_dev *dev)
+{
+ int i;
+
+ pci_cleanup_rom(dev);
+ for (i = 0; i < PCI_NUM_RESOURCES; i++) {
+ struct resource *res = dev->resource + i;
+ if (res->parent)
+ release_resource(res);
+ }
+}
+
static void pci_stop_dev(struct pci_dev *dev)
{
pci_pme_active(dev, false);
@@ -25,6 +37,11 @@ static void pci_destroy_dev(struct pci_dev *dev)
device_del(&dev->dev);
+ down_write(&pci_bus_sem);
+ list_del(&dev->bus_list);
+ up_write(&pci_bus_sem);
+
+ pci_free_resources(dev);
put_device(&dev->dev);
}