diff options
author | Lior Dotan <liodot@gmail.com> | 2009-02-11 12:18:21 +0200 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2009-04-03 14:53:05 -0700 |
commit | 1025744a6c30d58e232bac43396db18cc805ab98 (patch) | |
tree | d9d3aef3dab0c4123af58444310e867e85b15960 /drivers/staging/slicoss/slicoss.c | |
parent | a390c47939b0d418fc2c4cf1f360795949228de5 (diff) |
Staging: SLICOSS: free resources on entry_probe error path
Call pci_disable_device() and free_netdev() if slic_entry_probe fails.
Signed_off-by: Lior Dotan <liodot@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/staging/slicoss/slicoss.c')
-rw-r--r-- | drivers/staging/slicoss/slicoss.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/drivers/staging/slicoss/slicoss.c b/drivers/staging/slicoss/slicoss.c index 7e0647c404ac..ab3f98902a39 100644 --- a/drivers/staging/slicoss/slicoss.c +++ b/drivers/staging/slicoss/slicoss.c @@ -335,7 +335,7 @@ static int __devinit slic_entry_probe(struct pci_dev *pcidev, { static int cards_found; static int did_version; - int err; + int err = -ENODEV; struct net_device *netdev; struct adapter *adapter; void __iomem *memmapped_ioaddr = NULL; @@ -369,7 +369,7 @@ static int __devinit slic_entry_probe(struct pci_dev *pcidev, DBG_MSG ("No usable DMA configuration, aborting err[%x]\n", err); - return err; + goto err_out_disable_pci; } DBG_MSG("pci_set_dma_mask(DMA_32BIT_MASK) successful\n"); } @@ -379,7 +379,7 @@ static int __devinit slic_entry_probe(struct pci_dev *pcidev, err = pci_request_regions(pcidev, DRV_NAME); if (err) { DBG_MSG("pci_request_regions FAILED err[%x]\n", err); - return err; + goto err_out_disable_pci; } DBG_MSG("call pci_set_master\n"); @@ -413,7 +413,7 @@ static int __devinit slic_entry_probe(struct pci_dev *pcidev, if (!memmapped_ioaddr) { DBG_ERROR("%s cannot remap MMIO region %lx @ %lx\n", __func__, mmio_len, mmio_start); - goto err_out_free_mmio_region; + goto err_out_free_netdev; } DBG_MSG @@ -497,16 +497,17 @@ static int __devinit slic_entry_probe(struct pci_dev *pcidev, err_out_unmap: iounmap(memmapped_ioaddr); - err_out_free_mmio_region: release_mem_region(mmio_start, mmio_len); - +err_out_free_netdev: + free_netdev(netdev); err_out_exit_slic_probe: pci_release_regions(pcidev); DBG_ERROR("%s EXIT jiffies[%lx] cpu %d\n", __func__, jiffies, smp_processor_id()); - - return -ENODEV; +err_out_disable_pci: + pci_disable_device(pcidev); + return err; } static int slic_entry_open(struct net_device *dev) |