diff options
Diffstat (limited to 'drivers/pci/pci-driver.c')
-rw-r--r-- | drivers/pci/pci-driver.c | 12 |
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 | ||
274 | static int pci_call_probe(struct pci_driver *drv, struct pci_dev *dev, | 282 | static int pci_call_probe(struct pci_driver *drv, struct pci_dev *dev, |