[PATCH] PCI: Error handling on PCI device resume

From: Jean Delvare
Date: Tue Apr 18 2006 - 08:50:05 EST


We currently don't handle errors properly when resuming a PCI device:
* In pci_default_resume() we capture the error code returned by
pci_enable_device() but don't pass it up to the caller.
Introduced by commit 95a629657dbe28e44a312c47815b3dc3f1ce0970
* In pci_resume_device(), the errors possibly returned by the driver's
.resume method or by the generic pci_default_resume() function are
ignored.

This patch fixes both issues.

Signed-off-by: Jean Delvare <khali@xxxxxxxxxxxx>
---
drivers/pci/pci-driver.c | 13 ++++++++-----
1 file changed, 8 insertions(+), 5 deletions(-)

--- linux-2.6.17-rc1.orig/drivers/pci/pci-driver.c 2006-04-16 09:29:58.000000000 +0200
+++ linux-2.6.17-rc1/drivers/pci/pci-driver.c 2006-04-18 08:45:32.000000000 +0200
@@ -285,9 +285,9 @@
* 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)
+static int pci_default_resume(struct pci_dev *pci_dev)
{
- int retval;
+ int retval = 0;

/* restore the PCI config space */
pci_restore_state(pci_dev);
@@ -297,18 +297,21 @@
/* if the device was busmaster before the suspend, make it busmaster again */
if (pci_dev->is_busmaster)
pci_set_master(pci_dev);
+
+ return retval;
}

static int pci_device_resume(struct device * dev)
{
+ int error;
struct pci_dev * pci_dev = to_pci_dev(dev);
struct pci_driver * drv = pci_dev->driver;

if (drv && drv->resume)
- drv->resume(pci_dev);
+ error = drv->resume(pci_dev);
else
- pci_default_resume(pci_dev);
- return 0;
+ error = pci_default_resume(pci_dev);
+ return error;
}

static void pci_device_shutdown(struct device *dev)


--
Jean Delvare
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/