diff options
author | Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> | 2013-06-10 00:16:52 +0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-06-12 01:53:52 -0700 |
commit | afd6eae13cc4229e25d59334cdc46d042b24a4a5 (patch) | |
tree | 6f373c9d15d81022085d156a80aab775300c163a /drivers/net/ethernet/3com | |
parent | 3f8b96379a820318db37f7b6e81e6e459ad56efe (diff) | |
download | blackbird-obmc-linux-afd6eae13cc4229e25d59334cdc46d042b24a4a5.tar.gz blackbird-obmc-linux-afd6eae13cc4229e25d59334cdc46d042b24a4a5.zip |
3c59x: consolidate error cleanup in vortex_init_one()
The PCI driver's probe() method duplicates the error cleanup code each time it
has to do error exit. Consolidate the error cleanup code in one place and use
*goto* to jump to the right places.
Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
Acked-by: Steffen Klassert <klassert@mathematik.tu-chemnitz.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/3com')
-rw-r--r-- | drivers/net/ethernet/3com/3c59x.c | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/drivers/net/ethernet/3com/3c59x.c b/drivers/net/ethernet/3com/3c59x.c index 30e74211a755..ad5272b348f0 100644 --- a/drivers/net/ethernet/3com/3c59x.c +++ b/drivers/net/ethernet/3com/3c59x.c @@ -1012,10 +1012,8 @@ static int vortex_init_one(struct pci_dev *pdev, goto out; rc = pci_request_regions(pdev, DRV_NAME); - if (rc < 0) { - pci_disable_device(pdev); - goto out; - } + if (rc < 0) + goto out_disable; unit = vortex_cards_found; @@ -1032,23 +1030,24 @@ static int vortex_init_one(struct pci_dev *pdev, if (!ioaddr) /* If mapping fails, fall-back to BAR 0... */ ioaddr = pci_iomap(pdev, 0, 0); if (!ioaddr) { - pci_release_regions(pdev); - pci_disable_device(pdev); rc = -ENOMEM; - goto out; + goto out_release; } rc = vortex_probe1(&pdev->dev, ioaddr, pdev->irq, ent->driver_data, unit); - if (rc < 0) { - pci_iounmap(pdev, ioaddr); - pci_release_regions(pdev); - pci_disable_device(pdev); - goto out; - } + if (rc < 0) + goto out_iounmap; vortex_cards_found++; + goto out; +out_iounmap: + pci_iounmap(pdev, ioaddr); +out_release: + pci_release_regions(pdev); +out_disable: + pci_disable_device(pdev); out: return rc; } |