diff options
author | Bjorn Helgaas <bhelgaas@google.com> | 2013-12-20 14:41:18 -0500 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2013-12-20 14:41:18 -0500 |
commit | f72e11123ba122c4ed8fcee52ab57cf3fbe81178 (patch) | |
tree | b7fa6517acff9c42faa3f314cc5efa72109c80ae | |
parent | 9dc1d43ff95152e7ffdf45def855ea6931d95a15 (diff) | |
parent | e75f34ce6633549486a044d64b2a79240d4113a8 (diff) |
Merge branch 'pci/deletion' into next
* pci/deletion:
PCI/portdrv: Remove extra get_device()/put_device() for pcie_device
PCI/portdrv: Add put_device() after device_register() failure
PCI/portdrv: Cleanup error paths
-rw-r--r-- | drivers/pci/pcie/portdrv_core.c | 27 |
1 files changed, 13 insertions, 14 deletions
diff --git a/drivers/pci/pcie/portdrv_core.c b/drivers/pci/pcie/portdrv_core.c index ce9d9ae17bfd..16a1ce4f6b18 100644 --- a/drivers/pci/pcie/portdrv_core.c +++ b/drivers/pci/pcie/portdrv_core.c | |||
@@ -344,11 +344,12 @@ static int pcie_device_init(struct pci_dev *pdev, int service, int irq) | |||
344 | device_enable_async_suspend(device); | 344 | device_enable_async_suspend(device); |
345 | 345 | ||
346 | retval = device_register(device); | 346 | retval = device_register(device); |
347 | if (retval) | 347 | if (retval) { |
348 | kfree(pcie); | 348 | put_device(device); |
349 | else | 349 | return retval; |
350 | get_device(device); | 350 | } |
351 | return retval; | 351 | |
352 | return 0; | ||
352 | } | 353 | } |
353 | 354 | ||
354 | /** | 355 | /** |
@@ -454,10 +455,8 @@ int pcie_port_device_resume(struct device *dev) | |||
454 | 455 | ||
455 | static int remove_iter(struct device *dev, void *data) | 456 | static int remove_iter(struct device *dev, void *data) |
456 | { | 457 | { |
457 | if (dev->bus == &pcie_port_bus_type) { | 458 | if (dev->bus == &pcie_port_bus_type) |
458 | put_device(dev); | ||
459 | device_unregister(dev); | 459 | device_unregister(dev); |
460 | } | ||
461 | return 0; | 460 | return 0; |
462 | } | 461 | } |
463 | 462 | ||
@@ -498,12 +497,12 @@ static int pcie_port_probe_service(struct device *dev) | |||
498 | 497 | ||
499 | pciedev = to_pcie_device(dev); | 498 | pciedev = to_pcie_device(dev); |
500 | status = driver->probe(pciedev); | 499 | status = driver->probe(pciedev); |
501 | if (!status) { | 500 | if (status) |
502 | dev_printk(KERN_DEBUG, dev, "service driver %s loaded\n", | 501 | return status; |
503 | driver->name); | 502 | |
504 | get_device(dev); | 503 | dev_printk(KERN_DEBUG, dev, "service driver %s loaded\n", driver->name); |
505 | } | 504 | get_device(dev); |
506 | return status; | 505 | return 0; |
507 | } | 506 | } |
508 | 507 | ||
509 | /** | 508 | /** |