aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pci/pci-driver.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/pci/pci-driver.c')
-rw-r--r--drivers/pci/pci-driver.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
index b60fe6737f78..0929ae3e7830 100644
--- a/drivers/pci/pci-driver.c
+++ b/drivers/pci/pci-driver.c
@@ -264,11 +264,19 @@ static long local_pci_probe(void *_ddi)
264 pm_runtime_get_sync(dev); 264 pm_runtime_get_sync(dev);
265 pci_dev->driver = pci_drv; 265 pci_dev->driver = pci_drv;
266 rc = pci_drv->probe(pci_dev, ddi->id); 266 rc = pci_drv->probe(pci_dev, ddi->id);
267 if (rc) { 267 if (!rc)
268 return rc;
269 if (rc < 0) {
268 pci_dev->driver = NULL; 270 pci_dev->driver = NULL;
269 pm_runtime_put_sync(dev); 271 pm_runtime_put_sync(dev);
272 return rc;
270 } 273 }
271 return rc; 274 /*
275 * Probe function should return < 0 for failure, 0 for success
276 * Treat values > 0 as success, but warn.
277 */
278 dev_warn(dev, "Driver probe function unexpectedly returned %d\n", rc);
279 return 0;
272} 280}
273 281
274static int pci_call_probe(struct pci_driver *drv, struct pci_dev *dev, 282static int pci_call_probe(struct pci_driver *drv, struct pci_dev *dev,