diff options
Diffstat (limited to 'drivers/net/ethernet/rdc/r6040.c')
| -rw-r--r-- | drivers/net/ethernet/rdc/r6040.c | 29 | 
1 files changed, 11 insertions, 18 deletions
diff --git a/drivers/net/ethernet/rdc/r6040.c b/drivers/net/ethernet/rdc/r6040.c index 4de73643fec..557a26545d7 100644 --- a/drivers/net/ethernet/rdc/r6040.c +++ b/drivers/net/ethernet/rdc/r6040.c @@ -1096,20 +1096,20 @@ static int __devinit r6040_init_one(struct pci_dev *pdev,  	if (err) {  		dev_err(&pdev->dev, "32-bit PCI DMA addresses"  				"not supported by the card\n"); -		goto err_out; +		goto err_out_disable_dev;  	}  	err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));  	if (err) {  		dev_err(&pdev->dev, "32-bit PCI DMA addresses"  				"not supported by the card\n"); -		goto err_out; +		goto err_out_disable_dev;  	}  	/* IO Size check */  	if (pci_resource_len(pdev, bar) < io_size) {  		dev_err(&pdev->dev, "Insufficient PCI resources, aborting\n");  		err = -EIO; -		goto err_out; +		goto err_out_disable_dev;  	}  	pci_set_master(pdev); @@ -1117,7 +1117,7 @@ static int __devinit r6040_init_one(struct pci_dev *pdev,  	dev = alloc_etherdev(sizeof(struct r6040_private));  	if (!dev) {  		err = -ENOMEM; -		goto err_out; +		goto err_out_disable_dev;  	}  	SET_NETDEV_DEV(dev, &pdev->dev);  	lp = netdev_priv(dev); @@ -1233,11 +1233,15 @@ err_out_mdio_irq:  err_out_mdio:  	mdiobus_free(lp->mii_bus);  err_out_unmap: +	netif_napi_del(&lp->napi); +	pci_set_drvdata(pdev, NULL);  	pci_iounmap(pdev, ioaddr);  err_out_free_res:  	pci_release_regions(pdev);  err_out_free_dev:  	free_netdev(dev); +err_out_disable_dev: +	pci_disable_device(pdev);  err_out:  	return err;  } @@ -1251,6 +1255,8 @@ static void __devexit r6040_remove_one(struct pci_dev *pdev)  	mdiobus_unregister(lp->mii_bus);  	kfree(lp->mii_bus->irq);  	mdiobus_free(lp->mii_bus); +	netif_napi_del(&lp->napi); +	pci_iounmap(pdev, lp->base);  	pci_release_regions(pdev);  	free_netdev(dev);  	pci_disable_device(pdev); @@ -1271,17 +1277,4 @@ static struct pci_driver r6040_driver = {  	.remove		= __devexit_p(r6040_remove_one),  }; - -static int __init r6040_init(void) -{ -	return pci_register_driver(&r6040_driver); -} - - -static void __exit r6040_cleanup(void) -{ -	pci_unregister_driver(&r6040_driver); -} - -module_init(r6040_init); -module_exit(r6040_cleanup); +module_pci_driver(r6040_driver);  |