diff options
Diffstat (limited to 'drivers/pci')
-rw-r--r-- | drivers/pci/bus.c | 3 | ||||
-rw-r--r-- | drivers/pci/pci-driver.c | 6 | ||||
-rw-r--r-- | drivers/pci/pci.c | 7 | ||||
-rw-r--r-- | drivers/pci/pcie/portdrv_pci.c | 8 |
4 files changed, 17 insertions, 7 deletions
diff --git a/drivers/pci/bus.c b/drivers/pci/bus.c index fb9a11243d2a..a83ee0b85394 100644 --- a/drivers/pci/bus.c +++ b/drivers/pci/bus.c @@ -140,10 +140,11 @@ void __devinit pci_bus_add_devices(struct pci_bus *bus) void pci_enable_bridges(struct pci_bus *bus) { struct pci_dev *dev; + int retval; list_for_each_entry(dev, &bus->devices, bus_list) { if (dev->subordinate) { - pci_enable_device(dev); + retval = pci_enable_device(dev); pci_set_master(dev); pci_enable_bridges(dev->subordinate); } diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c index 414c77299c7d..0d0d533894e0 100644 --- a/drivers/pci/pci-driver.c +++ b/drivers/pci/pci-driver.c @@ -272,17 +272,19 @@ static int pci_device_suspend(struct device * dev, pm_message_t state) } -/* +/* * Default resume method for devices that have no driver provided resume, * or not even a driver at all. */ static void pci_default_resume(struct pci_dev *pci_dev) { + int retval; + /* restore the PCI config space */ pci_restore_state(pci_dev); /* if the device was enabled before suspend, reenable */ if (pci_dev->is_enabled) - pci_enable_device(pci_dev); + retval = pci_enable_device(pci_dev); /* if the device was busmaster before the suspend, make it busmaster again */ if (pci_dev->is_busmaster) pci_set_master(pci_dev); diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 93ec158d06c1..afee2de3f323 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -444,8 +444,11 @@ pci_enable_device_bars(struct pci_dev *dev, int bars) { int err; - pci_set_power_state(dev, PCI_D0); - if ((err = pcibios_enable_device(dev, bars)) < 0) + err = pci_set_power_state(dev, PCI_D0); + if (err) + return err; + err = pcibios_enable_device(dev, bars); + if (err < 0) return err; return 0; } diff --git a/drivers/pci/pcie/portdrv_pci.c b/drivers/pci/pcie/portdrv_pci.c index 30bac7ed7c16..3c565ce7f77b 100644 --- a/drivers/pci/pcie/portdrv_pci.c +++ b/drivers/pci/pcie/portdrv_pci.c @@ -90,15 +90,19 @@ static void pcie_portdrv_save_config(struct pci_dev *dev) pci_save_msi_state(dev); } -static void pcie_portdrv_restore_config(struct pci_dev *dev) +static int pcie_portdrv_restore_config(struct pci_dev *dev) { struct pcie_port_device_ext *p_ext = pci_get_drvdata(dev); + int retval; pci_restore_state(dev); if (p_ext->interrupt_mode == PCIE_PORT_MSI_MODE) pci_restore_msi_state(dev); - pci_enable_device(dev); + retval = pci_enable_device(dev); + if (retval) + return retval; pci_set_master(dev); + return 0; } /* |