From foo@baz Thu Jul 28 11:32:30 2005 Date: Thu, 28 Jul 2005 11:37:33 -0700 From: Greg Kroah-Hartman Subject: PCI: start paying attention to a lot of pci function return values Signed-off-by: Greg Kroah-Hartman --- drivers/pci/bus.c | 3 ++- drivers/pci/pci-driver.c | 6 ++++-- drivers/pci/pci.c | 7 +++++-- drivers/pci/pcie/portdrv_pci.c | 8 ++++++-- drivers/usb/core/hcd-pci.c | 24 +++++++++++++++++++----- drivers/usb/host/ehci-hcd.c | 4 +++- 6 files changed, 39 insertions(+), 13 deletions(-) --- gregkh-2.6.orig/drivers/pci/bus.c 2005-08-31 00:07:37.000000000 -0700 +++ gregkh-2.6/drivers/pci/bus.c 2005-09-08 09:20:02.000000000 -0700 @@ -140,10 +140,11 @@ void __devinit pci_bus_add_devices(struc 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); } --- gregkh-2.6.orig/drivers/pci/pci-driver.c 2005-09-08 09:19:42.000000000 -0700 +++ gregkh-2.6/drivers/pci/pci-driver.c 2005-09-08 09:20:02.000000000 -0700 @@ -272,17 +272,19 @@ static int pci_device_suspend(struct dev } -/* +/* * 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); --- gregkh-2.6.orig/drivers/pci/pci.c 2005-09-08 09:19:58.000000000 -0700 +++ gregkh-2.6/drivers/pci/pci.c 2005-09-08 09:20:02.000000000 -0700 @@ -444,8 +444,11 @@ pci_enable_device_bars(struct pci_dev *d { 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; } --- gregkh-2.6.orig/drivers/pci/pcie/portdrv_pci.c 2005-08-31 00:07:37.000000000 -0700 +++ gregkh-2.6/drivers/pci/pcie/portdrv_pci.c 2005-09-08 09:20:02.000000000 -0700 @@ -90,15 +90,19 @@ static void pcie_portdrv_save_config(str 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; } /* --- gregkh-2.6.orig/drivers/usb/core/hcd-pci.c 2005-09-08 09:19:46.000000000 -0700 +++ gregkh-2.6/drivers/usb/core/hcd-pci.c 2005-09-08 09:20:02.000000000 -0700 @@ -260,8 +260,10 @@ int usb_hcd_pci_suspend (struct pci_dev retval = pci_set_power_state (dev, PCI_D3hot); if (retval == 0) { dev_dbg (hcd->self.controller, "--> PCI D3\n"); - pci_enable_wake (dev, PCI_D3hot, hcd->remote_wakeup); - pci_enable_wake (dev, PCI_D3cold, hcd->remote_wakeup); + retval = pci_enable_wake (dev, PCI_D3hot, hcd->remote_wakeup); + if (retval) + break; + retval = pci_enable_wake (dev, PCI_D3cold, hcd->remote_wakeup); } else if (retval < 0) { dev_dbg (&dev->dev, "PCI D3 suspend fail, %d\n", retval); @@ -335,8 +337,20 @@ int usb_hcd_pci_resume (struct pci_dev * dev->current_state); } #endif - pci_enable_wake (dev, dev->current_state, 0); - pci_enable_wake (dev, PCI_D3cold, 0); + retval = pci_enable_wake (dev, dev->current_state, 0); + if (retval) { + dev_err(hcd->self.controller, + "can't enable_wake to %d, %d!\n", + dev->current_state, retval); + return retval; + } + retval = pci_enable_wake (dev, PCI_D3cold, 0); + if (retval) { + dev_err(hcd->self.controller, + "can't enable_wake to %d, %d!\n", + PCI_D3cold, retval); + return retval; + } } else { /* Same basic cases: clean (powered/not), dirty */ dev_dbg(hcd->self.controller, "PCI legacy resume\n"); @@ -376,7 +390,7 @@ int usb_hcd_pci_resume (struct pci_dev * usb_hc_died (hcd); } - pci_enable_device(dev); + retval = pci_enable_device(dev); return retval; } EXPORT_SYMBOL (usb_hcd_pci_resume); --- gregkh-2.6.orig/drivers/usb/host/ehci-hcd.c 2005-08-31 00:07:37.000000000 -0700 +++ gregkh-2.6/drivers/usb/host/ehci-hcd.c 2005-09-08 09:20:02.000000000 -0700 @@ -549,7 +549,9 @@ static int ehci_start (struct usb_hcd *h hcd->can_wakeup = (port_wake & 1) != 0; /* help hc dma work well with cachelines */ - pci_set_mwi (pdev); + retval = pci_set_mwi(pdev); + if (retval) + ehci_dbg(ehci, "unable to enable MWI - not fatal.\n"); } #endif