aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjorn Helgaas <bhelgaas@google.com>2013-12-20 14:41:18 -0500
committerBjorn Helgaas <bhelgaas@google.com>2013-12-20 14:41:18 -0500
commitf72e11123ba122c4ed8fcee52ab57cf3fbe81178 (patch)
treeb7fa6517acff9c42faa3f314cc5efa72109c80ae
parent9dc1d43ff95152e7ffdf45def855ea6931d95a15 (diff)
parente75f34ce6633549486a044d64b2a79240d4113a8 (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.c27
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
455static int remove_iter(struct device *dev, void *data) 456static 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/**