* Re: The recent free_netdev() conversion...
2003-09-01 14:59 The recent free_netdev() conversion Jeff Garzik
@ 2003-09-01 14:53 ` David S. Miller
2003-09-01 15:58 ` Jeff Garzik
0 siblings, 1 reply; 7+ messages in thread
From: David S. Miller @ 2003-09-01 14:53 UTC (permalink / raw)
To: Jeff Garzik; +Cc: netdev
On Mon, 01 Sep 2003 10:59:09 -0400
Jeff Garzik <jgarzik@pobox.com> wrote:
> err_out:
> kfree(dev);
...
> The "kfree" needs to be a free_netdev() too.
If the 'dev' hasn't been given to register_netdev() it
really doesn't need to be free_netdev(). It's just memory
until it has been given to the device layer.
^ permalink raw reply [flat|nested] 7+ messages in thread
* The recent free_netdev() conversion...
@ 2003-09-01 14:59 Jeff Garzik
2003-09-01 14:53 ` David S. Miller
0 siblings, 1 reply; 7+ messages in thread
From: Jeff Garzik @ 2003-09-01 14:59 UTC (permalink / raw)
To: Maillist netdev
Note that a lot of error paths were not caught. In the typical driver
you have:
->probe()
dev = alloc_etherdev()
blah_probe()
if blah_probe() fails
goto err_out
register_netdev()
return 0;
err_out:
kfree(dev);
->remove()
free_netdev(dev);
The "kfree" needs to be a free_netdev() too.
Jeff
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: The recent free_netdev() conversion...
2003-09-01 15:58 ` Jeff Garzik
@ 2003-09-01 15:58 ` David S. Miller
2003-09-03 22:33 ` [PATCH] 2.6.0-test4-bk5 - Was: " Francois Romieu
0 siblings, 1 reply; 7+ messages in thread
From: David S. Miller @ 2003-09-01 15:58 UTC (permalink / raw)
To: Jeff Garzik; +Cc: netdev
On Mon, 01 Sep 2003 11:58:47 -0400
Jeff Garzik <jgarzik@pobox.com> wrote:
> True, but for long term, it's best to use free_netdev(). Besides
> naturally pairing with alloc_foodev(), if we ever decide to have
> alloc_netdev() perform more than one allocation, free_netdev() will
> already be in place to handle the multiple de-allocations.
Okie dokie, I'll take patches that fix any of these
cases.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: The recent free_netdev() conversion...
2003-09-01 14:53 ` David S. Miller
@ 2003-09-01 15:58 ` Jeff Garzik
2003-09-01 15:58 ` David S. Miller
0 siblings, 1 reply; 7+ messages in thread
From: Jeff Garzik @ 2003-09-01 15:58 UTC (permalink / raw)
To: David S. Miller; +Cc: netdev
David S. Miller wrote:
> On Mon, 01 Sep 2003 10:59:09 -0400
> Jeff Garzik <jgarzik@pobox.com> wrote:
>
>
>> err_out:
>> kfree(dev);
>
> ...
>
>>The "kfree" needs to be a free_netdev() too.
>
>
> If the 'dev' hasn't been given to register_netdev() it
> really doesn't need to be free_netdev(). It's just memory
> until it has been given to the device layer.
True, but for long term, it's best to use free_netdev(). Besides
naturally pairing with alloc_foodev(), if we ever decide to have
alloc_netdev() perform more than one allocation, free_netdev() will
already be in place to handle the multiple de-allocations.
Jeff
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH] 2.6.0-test4-bk5 - Was: Re: The recent free_netdev() conversion...
2003-09-01 15:58 ` David S. Miller
@ 2003-09-03 22:33 ` Francois Romieu
2003-09-04 0:56 ` Jeff Garzik
2003-09-04 3:35 ` David S. Miller
0 siblings, 2 replies; 7+ messages in thread
From: Francois Romieu @ 2003-09-03 22:33 UTC (permalink / raw)
To: David S. Miller; +Cc: Jeff Garzik, netdev
David S. Miller <davem@redhat.com> :
> Jeff Garzik <jgarzik@pobox.com> wrote:
>
> > True, but for long term, it's best to use free_netdev(). Besides
> > naturally pairing with alloc_foodev(), if we ever decide to have
> > alloc_netdev() perform more than one allocation, free_netdev() will
> > already be in place to handle the multiple de-allocations.
>
> Okie dokie, I'll take patches that fix any of these
> cases.
Please review.
The following drivers haven't been submitted to compilation
- ioc3-eth
- lasi_82596
- lp486e
- smc-mca
- sunXYZ drivers
All others compile fine.
Balance alloc_etherdev() with free_netdev() instead of kfree().
Extra bugs/remarks:
- drivers/net/pcnet32.c
dev wasn't freed at all in error paths following a failure after
pci_alloc_consistent() in pcnet32_probe1() -> goto, goto, yummmm...
- drivers/net/sb1000.c
dev wasn't freed after failure of register_netdev().
- drivers/net/sis190.c
Calling pci_disable_device() if pci_enable_device() doesn't look nice.
example for the incoming generations.
It is probably better to remove the hunks related to drivers/net/sis190.c
until Jeff feeds its own stuff as my local version contains some extra
changes.
- drivers/net/smc-mca.c
dev wasn't freed after failure of register_netdev().
- drivers/net/sungem.c
let's keep pci_{enable/disable}_device balanced in gem_init_one().
drivers/net/3c509.c | 2 +-
drivers/net/3c59x.c | 2 +-
drivers/net/8139cp.c | 2 +-
drivers/net/acenic.c | 10 +++++-----
drivers/net/amd8111e.c | 2 +-
drivers/net/b44.c | 2 +-
drivers/net/bmac.c | 2 +-
drivers/net/dgrs.c | 4 ++--
drivers/net/dl2k.c | 2 +-
drivers/net/eepro100.c | 2 +-
drivers/net/epic100.c | 2 +-
drivers/net/fealnx.c | 2 +-
drivers/net/hamachi.c | 2 +-
drivers/net/ioc3-eth.c | 2 +-
drivers/net/lasi_82596.c | 2 +-
drivers/net/lp486e.c | 2 +-
drivers/net/natsemi.c | 6 +++---
drivers/net/pcnet32.c | 47 ++++++++++++++++++++++++-----------------------
drivers/net/r8169.c | 4 ++--
drivers/net/rcpci45.c | 2 +-
drivers/net/sb1000.c | 4 +++-
drivers/net/sis190.c | 15 ++++++++-------
drivers/net/sis900.c | 2 +-
drivers/net/smc-mca.c | 33 +++++++++++++++++++++++----------
drivers/net/starfire.c | 2 +-
drivers/net/sundance.c | 2 +-
drivers/net/sungem.c | 25 +++++++++++++++++--------
drivers/net/sunhme.c | 4 ++--
drivers/net/sunqe.c | 2 +-
drivers/net/tg3.c | 2 +-
drivers/net/tlan.c | 4 ++--
drivers/net/typhoon.c | 2 +-
drivers/net/via-rhine.c | 2 +-
drivers/net/yellowfin.c | 2 +-
34 files changed, 114 insertions(+), 88 deletions(-)
diff -puN drivers/net/epic100.c~alloc_netdev-balance drivers/net/epic100.c
--- linux-2.6.0-test4-bk5/drivers/net/epic100.c~alloc_netdev-balance Wed Sep 3 22:59:31 2003
+++ linux-2.6.0-test4-bk5-fr/drivers/net/epic100.c Wed Sep 3 23:00:02 2003
@@ -565,7 +565,7 @@ err_out_free_res:
#endif
pci_release_regions(pdev);
err_out_free_netdev:
- kfree(dev);
+ free_netdev(dev);
return -ENODEV;
}
\f
diff -puN drivers/net/3c509.c~alloc_netdev-balance drivers/net/3c509.c
--- linux-2.6.0-test4-bk5/drivers/net/3c509.c~alloc_netdev-balance Wed Sep 3 23:02:08 2003
+++ linux-2.6.0-test4-bk5-fr/drivers/net/3c509.c Wed Sep 3 23:03:03 2003
@@ -604,7 +604,7 @@ out1:
pnp_device_detach(idev);
#endif
out:
- kfree(dev);
+ free_netdev(dev);
return err;
}
diff -puN drivers/net/3c59x.c~alloc_netdev-balance drivers/net/3c59x.c
--- linux-2.6.0-test4-bk5/drivers/net/3c59x.c~alloc_netdev-balance Wed Sep 3 23:03:27 2003
+++ linux-2.6.0-test4-bk5-fr/drivers/net/3c59x.c Wed Sep 3 23:04:49 2003
@@ -1468,7 +1468,7 @@ free_ring:
free_region:
if (vp->must_free_region)
release_region(ioaddr, vci->io_size);
- kfree (dev);
+ free_netdev(dev);
printk(KERN_ERR PFX "vortex_probe1 fails. Returns %d\n", retval);
out:
return retval;
diff -puN drivers/net/8139cp.c~alloc_netdev-balance drivers/net/8139cp.c
--- linux-2.6.0-test4-bk5/drivers/net/8139cp.c~alloc_netdev-balance Wed Sep 3 23:05:27 2003
+++ linux-2.6.0-test4-bk5-fr/drivers/net/8139cp.c Wed Sep 3 23:06:04 2003
@@ -1768,7 +1768,7 @@ err_out_mwi:
err_out_disable:
pci_disable_device(pdev);
err_out_free:
- kfree(dev);
+ free_netdev(dev);
return rc;
}
diff -puN drivers/net/acenic.c~alloc_netdev-balance drivers/net/acenic.c
--- linux-2.6.0-test4-bk5/drivers/net/acenic.c~alloc_netdev-balance Wed Sep 3 23:07:40 2003
+++ linux-2.6.0-test4-bk5-fr/drivers/net/acenic.c Wed Sep 3 23:08:53 2003
@@ -685,7 +685,7 @@ int __devinit acenic_probe (ACE_PROBE_AR
}
if (pci_enable_device(pdev)) {
- kfree(dev);
+ free_netdev(dev);
continue;
}
@@ -733,7 +733,7 @@ int __devinit acenic_probe (ACE_PROBE_AR
if (register_netdev(dev)) {
printk(KERN_ERR "acenic: device registration failed\n");
- kfree(dev);
+ free_netdev(dev);
continue;
}
@@ -793,7 +793,7 @@ int __devinit acenic_probe (ACE_PROBE_AR
printk(KERN_ERR "%s: Driver compiled without Tigon I"
" support - NIC disabled\n", dev->name);
ace_init_cleanup(dev);
- kfree(dev);
+ free_netdev(dev);
continue;
}
#endif
@@ -803,7 +803,7 @@ int __devinit acenic_probe (ACE_PROBE_AR
* ace_allocate_descriptors() calls
* ace_init_cleanup() on error.
*/
- kfree(dev);
+ free_netdev(dev);
continue;
}
@@ -820,7 +820,7 @@ int __devinit acenic_probe (ACE_PROBE_AR
/*
* ace_init() calls ace_init_cleanup() on error.
*/
- kfree(dev);
+ free_netdev(dev);
continue;
}
diff -puN drivers/net/amd8111e.c~alloc_netdev-balance drivers/net/amd8111e.c
--- linux-2.6.0-test4-bk5/drivers/net/amd8111e.c~alloc_netdev-balance Wed Sep 3 23:09:49 2003
+++ linux-2.6.0-test4-bk5-fr/drivers/net/amd8111e.c Wed Sep 3 23:10:03 2003
@@ -1927,7 +1927,7 @@ err_iounmap:
iounmap((void *) lp->mmio);
err_free_dev:
- kfree(dev);
+ free_netdev(dev);
err_free_reg:
pci_release_regions(pdev);
diff -puN drivers/net/b44.c~alloc_netdev-balance drivers/net/b44.c
--- linux-2.6.0-test4-bk5/drivers/net/b44.c~alloc_netdev-balance Wed Sep 3 23:10:29 2003
+++ linux-2.6.0-test4-bk5-fr/drivers/net/b44.c Wed Sep 3 23:11:01 2003
@@ -1834,7 +1834,7 @@ err_out_iounmap:
iounmap((void *) bp->regs);
err_out_free_dev:
- kfree(dev);
+ free_netdev(dev);
err_out_free_res:
pci_release_regions(pdev);
diff -puN drivers/net/bmac.c~alloc_netdev-balance drivers/net/bmac.c
--- linux-2.6.0-test4-bk5/drivers/net/bmac.c~alloc_netdev-balance Wed Sep 3 23:11:23 2003
+++ linux-2.6.0-test4-bk5-fr/drivers/net/bmac.c Wed Sep 3 23:11:40 2003
@@ -1462,7 +1462,7 @@ out2:
release_OF_resource(bp->node, 0);
out1:
pmac_call_feature(PMAC_FTR_BMAC_ENABLE, bp->node, 0, 0);
- kfree(dev);
+ free_netdev(dev);
}
static int bmac_open(struct net_device *dev)
diff -puN drivers/net/dgrs.c~alloc_netdev-balance drivers/net/dgrs.c
--- linux-2.6.0-test4-bk5/drivers/net/dgrs.c~alloc_netdev-balance Wed Sep 3 23:12:00 2003
+++ linux-2.6.0-test4-bk5-fr/drivers/net/dgrs.c Wed Sep 3 23:13:10 2003
@@ -1275,7 +1275,7 @@ dgrs_found_device(
SET_MODULE_OWNER(dev);
if (register_netdev(dev) != 0) {
- kfree(dev);
+ free_netdev(dev);
return -EIO;
}
@@ -1322,7 +1322,7 @@ dgrs_found_device(
ret = -EIO;
if (register_netdev(devN)) {
- kfree(devN);
+ free_netdev(devN);
goto fail;
}
privN->chan = i+1;
diff -puN drivers/net/dl2k.c~alloc_netdev-balance drivers/net/dl2k.c
--- linux-2.6.0-test4-bk5/drivers/net/dl2k.c~alloc_netdev-balance Wed Sep 3 23:13:35 2003
+++ linux-2.6.0-test4-bk5-fr/drivers/net/dl2k.c Wed Sep 3 23:14:07 2003
@@ -319,7 +319,7 @@ rio_probe1 (struct pci_dev *pdev, const
err_out_dev:
#endif
- kfree (dev);
+ free_netdev (dev);
err_out_res:
pci_release_regions (pdev);
diff -puN drivers/net/eepro100.c~alloc_netdev-balance drivers/net/eepro100.c
--- linux-2.6.0-test4-bk5/drivers/net/eepro100.c~alloc_netdev-balance Wed Sep 3 23:14:33 2003
+++ linux-2.6.0-test4-bk5-fr/drivers/net/eepro100.c Wed Sep 3 23:14:59 2003
@@ -894,7 +894,7 @@ static int __devinit speedo_found1(struc
err_free_unlock:
rtnl_unlock();
- kfree(dev);
+ free_netdev(dev);
return -1;
}
diff -puN drivers/net/fealnx.c~alloc_netdev-balance drivers/net/fealnx.c
--- linux-2.6.0-test4-bk5/drivers/net/fealnx.c~alloc_netdev-balance Wed Sep 3 23:15:20 2003
+++ linux-2.6.0-test4-bk5-fr/drivers/net/fealnx.c Wed Sep 3 23:15:59 2003
@@ -689,7 +689,7 @@ err_out_free_tx:
err_out_free_rx:
pci_free_consistent(pdev, RX_TOTAL_SIZE, np->rx_ring, np->rx_ring_dma);
err_out_free_dev:
- kfree(dev);
+ free_netdev(dev);
err_out_unmap:
#ifndef USE_IO_OPS
iounmap((void *)ioaddr);
diff -puN drivers/net/hamachi.c~alloc_netdev-balance drivers/net/hamachi.c
--- linux-2.6.0-test4-bk5/drivers/net/hamachi.c~alloc_netdev-balance Wed Sep 3 23:16:14 2003
+++ linux-2.6.0-test4-bk5-fr/drivers/net/hamachi.c Wed Sep 3 23:16:39 2003
@@ -785,7 +785,7 @@ err_out_unmap_tx:
pci_free_consistent(pdev, TX_TOTAL_SIZE, hmp->tx_ring,
hmp->tx_ring_dma);
err_out_cleardev:
- kfree (dev);
+ free_netdev (dev);
err_out_iounmap:
iounmap((char *)ioaddr);
err_out_release:
diff -puN drivers/net/ioc3-eth.c~alloc_netdev-balance drivers/net/ioc3-eth.c
--- linux-2.6.0-test4-bk5/drivers/net/ioc3-eth.c~alloc_netdev-balance Wed Sep 3 23:16:58 2003
+++ linux-2.6.0-test4-bk5-fr/drivers/net/ioc3-eth.c Wed Sep 3 23:17:19 2003
@@ -1512,7 +1512,7 @@ out_stop:
out_res:
pci_release_regions(pdev);
out_free:
- kfree(dev);
+ free_netdev(dev);
return err;
}
diff -puN drivers/net/lasi_82596.c~alloc_netdev-balance drivers/net/lasi_82596.c
--- linux-2.6.0-test4-bk5/drivers/net/lasi_82596.c~alloc_netdev-balance Wed Sep 3 23:17:35 2003
+++ linux-2.6.0-test4-bk5-fr/drivers/net/lasi_82596.c Wed Sep 3 23:18:19 2003
@@ -1543,7 +1543,7 @@ lan_init_chip(struct parisc_device *dev)
retval = register_netdev(netdevice);
if (retval) {
printk(KERN_WARNING __FILE__ ": register_netdevice ret'd %d\n", retval);
- kfree(netdevice);
+ free_netdev(netdevice);
return -ENODEV;
};
if (dev->id.sversion == 0x72) {
diff -puN drivers/net/lp486e.c~alloc_netdev-balance drivers/net/lp486e.c
--- linux-2.6.0-test4-bk5/drivers/net/lp486e.c~alloc_netdev-balance Wed Sep 3 23:18:27 2003
+++ linux-2.6.0-test4-bk5-fr/drivers/net/lp486e.c Wed Sep 3 23:19:22 2003
@@ -1324,7 +1324,7 @@ static int __init lp486e_init_module(voi
dev->base_addr = io;
dev->init = lp486e_probe;
if (register_netdev(dev) != 0) {
- kfree(dev);
+ free_netdev(dev);
return -EIO;
}
dev_lp486e = dev;
diff -puN drivers/net/natsemi.c~alloc_netdev-balance drivers/net/natsemi.c
--- linux-2.6.0-test4-bk5/drivers/net/natsemi.c~alloc_netdev-balance Wed Sep 3 23:19:32 2003
+++ linux-2.6.0-test4-bk5-fr/drivers/net/natsemi.c Wed Sep 3 23:20:20 2003
@@ -766,7 +766,7 @@ static int __devinit natsemi_probe1 (str
i = pci_request_regions(pdev, dev->name);
if (i) {
- kfree(dev);
+ free_netdev(dev);
return i;
}
@@ -774,7 +774,7 @@ static int __devinit natsemi_probe1 (str
void *mmio = ioremap (ioaddr, iosize);
if (!mmio) {
pci_release_regions(pdev);
- kfree(dev);
+ free_netdev(dev);
return -ENOMEM;
}
ioaddr = (unsigned long) mmio;
@@ -838,7 +838,7 @@ static int __devinit natsemi_probe1 (str
if (i) {
pci_release_regions(pdev);
unregister_netdev(dev);
- kfree(dev);
+ free_netdev(dev);
pci_set_drvdata(pdev, NULL);
return i;
}
diff -puN drivers/net/pcnet32.c~alloc_netdev-balance drivers/net/pcnet32.c
--- linux-2.6.0-test4-bk5/drivers/net/pcnet32.c~alloc_netdev-balance Wed Sep 3 23:20:44 2003
+++ linux-2.6.0-test4-bk5-fr/drivers/net/pcnet32.c Thu Sep 4 00:04:56 2003
@@ -529,6 +529,7 @@ pcnet32_probe1(unsigned long ioaddr, uns
struct net_device *dev;
struct pcnet32_access *a = NULL;
u8 promaddr[6];
+ int ret = -ENODEV;
/* reset the chip */
pcnet32_wio_reset(ioaddr);
@@ -540,19 +541,15 @@ pcnet32_probe1(unsigned long ioaddr, uns
pcnet32_dwio_reset(ioaddr);
if (pcnet32_dwio_read_csr(ioaddr, 0) == 4 && pcnet32_dwio_check(ioaddr)) {
a = &pcnet32_dwio;
- } else {
- release_region(ioaddr, PCNET32_TOTAL_SIZE);
- return -ENODEV;
- }
+ } else
+ goto err_release_region;
}
chip_version = a->read_csr(ioaddr, 88) | (a->read_csr(ioaddr,89) << 16);
if (pcnet32_debug > 2)
printk(KERN_INFO " PCnet chip version is %#x.\n", chip_version);
- if ((chip_version & 0xfff) != 0x003) {
- release_region(ioaddr, PCNET32_TOTAL_SIZE);
- return -ENODEV;
- }
+ if ((chip_version & 0xfff) != 0x003)
+ goto err_release_region;
/* initialize variables */
fdx = mii = fset = dxsuflo = ltint = 0;
@@ -614,8 +611,7 @@ pcnet32_probe1(unsigned long ioaddr, uns
default:
printk(KERN_INFO PFX "PCnet version %#x, no PCnet32 chip.\n",
chip_version);
- release_region(ioaddr, PCNET32_TOTAL_SIZE);
- return -ENODEV;
+ goto err_release_region;
}
/*
@@ -635,8 +631,8 @@ pcnet32_probe1(unsigned long ioaddr, uns
dev = alloc_etherdev(0);
if(!dev) {
- release_region(ioaddr, PCNET32_TOTAL_SIZE);
- return -ENOMEM;
+ ret = -ENOMEM;
+ goto err_release_region;
}
SET_NETDEV_DEV(dev, &pdev->dev);
@@ -708,8 +704,8 @@ pcnet32_probe1(unsigned long ioaddr, uns
dev->base_addr = ioaddr;
/* pci_alloc_consistent returns page-aligned memory, so we do not have to check the alignment */
if ((lp = pci_alloc_consistent(pdev, sizeof(*lp), &lp_dma_addr)) == NULL) {
- release_region(ioaddr, PCNET32_TOTAL_SIZE);
- return -ENOMEM;
+ ret = -ENOMEM;
+ goto err_free_netdev;
}
memset(lp, 0, sizeof(*lp));
@@ -741,9 +737,8 @@ pcnet32_probe1(unsigned long ioaddr, uns
if (!a) {
printk(KERN_ERR PFX "No access methods\n");
- pci_free_consistent(lp->pci_dev, sizeof(*lp), lp, lp->dma_addr);
- release_region(ioaddr, PCNET32_TOTAL_SIZE);
- return -ENODEV;
+ ret = -ENODEV;
+ goto err_free_consistent;
}
lp->a = *a;
@@ -785,14 +780,12 @@ pcnet32_probe1(unsigned long ioaddr, uns
mdelay (1);
dev->irq = probe_irq_off (irq_mask);
- if (dev->irq)
- printk(", probed IRQ %d.\n", dev->irq);
- else {
+ if (!dev->irq) {
printk(", failed to detect IRQ line.\n");
- pci_free_consistent(lp->pci_dev, sizeof(*lp), lp, lp->dma_addr);
- release_region(ioaddr, PCNET32_TOTAL_SIZE);
- return -ENODEV;
+ ret = -ENODEV;
+ goto err_free_consistent;
}
+ printk(", probed IRQ %d.\n", dev->irq);
}
/* Set the mii phy_id so that we can query the link state */
@@ -821,6 +814,14 @@ pcnet32_probe1(unsigned long ioaddr, uns
printk(KERN_INFO "%s: registered as %s\n",dev->name, lp->name);
cards_found++;
return 0;
+
+err_free_consistent:
+ pci_free_consistent(lp->pci_dev, sizeof(*lp), lp, lp->dma_addr);
+err_free_netdev:
+ free_netdev(dev);
+err_release_region:
+ release_region(ioaddr, PCNET32_TOTAL_SIZE);
+ return ret;
}
diff -puN drivers/net/r8169.c~alloc_netdev-balance drivers/net/r8169.c
--- linux-2.6.0-test4-bk5/drivers/net/r8169.c~alloc_netdev-balance Wed Sep 3 23:29:22 2003
+++ linux-2.6.0-test4-bk5-fr/drivers/net/r8169.c Wed Sep 3 23:30:35 2003
@@ -454,7 +454,7 @@ err_out_disable:
pci_disable_device(pdev);
err_out:
- kfree(dev);
+ free_netdev(dev);
return rc;
}
@@ -514,7 +514,7 @@ rtl8169_init_one(struct pci_dev *pdev, c
iounmap(ioaddr);
pci_release_regions(pdev);
pci_disable_device(pdev);
- kfree(dev);
+ free_netdev(dev);
return rc;
}
diff -puN drivers/net/rcpci45.c~alloc_netdev-balance drivers/net/rcpci45.c
--- linux-2.6.0-test4-bk5/drivers/net/rcpci45.c~alloc_netdev-balance Wed Sep 3 23:30:45 2003
+++ linux-2.6.0-test4-bk5-fr/drivers/net/rcpci45.c Wed Sep 3 23:32:07 2003
@@ -269,7 +269,7 @@ err_out_free_msgbuf:
pci_free_consistent (pdev, MSG_BUF_SIZE, pDpa->msgbuf,
pDpa->msgbuf_dma);
err_out_free_dev:
- kfree (dev);
+ free_netdev (dev);
err_out:
card_idx--;
return error;
diff -puN drivers/net/sb1000.c~alloc_netdev-balance drivers/net/sb1000.c
--- linux-2.6.0-test4-bk5/drivers/net/sb1000.c~alloc_netdev-balance Wed Sep 3 23:32:16 2003
+++ linux-2.6.0-test4-bk5-fr/drivers/net/sb1000.c Wed Sep 3 23:34:12 2003
@@ -213,9 +213,11 @@ sb1000_probe_one(struct pnp_dev *pdev, c
error = register_netdev(dev);
if (error)
- goto out_release_regions;
+ goto out_free_netdev;
return 0;
+ out_free_netdev:
+ free_netdev(dev);
out_release_regions:
release_region(ioaddr[1], 16);
out_release_region0:
diff -puN drivers/net/sis190.c~alloc_netdev-balance drivers/net/sis190.c
--- linux-2.6.0-test4-bk5/drivers/net/sis190.c~alloc_netdev-balance Wed Sep 3 23:35:01 2003
+++ linux-2.6.0-test4-bk5-fr/drivers/net/sis190.c Wed Sep 3 23:37:23 2003
@@ -473,7 +473,7 @@ SiS190_init_board(struct pci_dev *pdev,
rc = pci_set_dma_mask(pdev, 0xffffffffULL);
if (rc)
- goto err_out;
+ goto err_out_disable;
mmio_start = pci_resource_start(pdev, 0);
mmio_end = pci_resource_end(pdev, 0);
@@ -485,18 +485,18 @@ SiS190_init_board(struct pci_dev *pdev,
printk(KERN_ERR PFX
"region #0 not an MMIO resource, aborting\n");
rc = -ENODEV;
- goto err_out;
+ goto err_out_disable;
}
// check for weird/broken PCI region reporting
if (mmio_len < SiS190_MIN_IO_SIZE) {
printk(KERN_ERR PFX "Invalid PCI region size(s), aborting\n");
rc = -ENODEV;
- goto err_out;
+ goto err_out_disable;
}
rc = pci_request_regions(pdev, dev->name);
if (rc)
- goto err_out;
+ goto err_out_disable;
// enable PCI bus-mastering
pci_set_master(pdev);
@@ -524,9 +524,10 @@ SiS190_init_board(struct pci_dev *pdev,
err_out_free_res:
pci_release_regions(pdev);
-err_out:
+err_out_disable:
pci_disable_device(pdev);
- kfree(dev);
+err_out:
+ free_netdev(dev);
return rc;
}
@@ -606,7 +607,7 @@ SiS190_init_one(struct pci_dev *pdev, co
iounmap(ioaddr);
pci_release_regions(pdev);
pci_disable_device(pdev);
- kfree(dev);
+ free_netdev(dev);
return rc;
}
diff -puN drivers/net/sis900.c~alloc_netdev-balance drivers/net/sis900.c
--- linux-2.6.0-test4-bk5/drivers/net/sis900.c~alloc_netdev-balance Wed Sep 3 23:39:12 2003
+++ linux-2.6.0-test4-bk5-fr/drivers/net/sis900.c Wed Sep 3 23:40:08 2003
@@ -503,7 +503,7 @@ static int __devinit sis900_probe (struc
pci_set_drvdata(pci_dev, NULL);
pci_release_regions(pci_dev);
err_out:
- kfree(net_dev);
+ free_netdev(net_dev);
return ret;
}
diff -puN drivers/net/smc-mca.c~alloc_netdev-balance drivers/net/smc-mca.c
--- linux-2.6.0-test4-bk5/drivers/net/smc-mca.c~alloc_netdev-balance Wed Sep 3 23:40:19 2003
+++ linux-2.6.0-test4-bk5-fr/drivers/net/smc-mca.c Wed Sep 3 23:46:25 2003
@@ -132,7 +132,7 @@ int __init ultramca_probe(struct device
struct mca_device *mca_dev = to_mca_device(gen_dev);
char slot = mca_dev->slot;
unsigned char pos2 = 0xff, pos3 = 0xff, pos4 = 0xff, pos5 = 0xff;
- int i;
+ int i, rc;
int adapter = mca_dev->index;
int tbase = 0;
int tirq = 0;
@@ -209,8 +209,9 @@ int __init ultramca_probe(struct device
SET_MODULE_OWNER(dev);
SET_NETDEV_DEV(dev, gen_dev);
- if((i = register_netdev(dev)) != 0)
- return i;
+ rc = register_netdev(dev);
+ if (rc)
+ goto err_free_netdev;
printk(KERN_INFO "%s: %s found in slot %d\n",
dev->name, smc_mca_adapter_names[adapter], slot + 1);
@@ -262,11 +263,15 @@ int __init ultramca_probe(struct device
}
}
- if (dev->mem_start == 0) /* sanity check, shouldn't happen */
- return -ENODEV;
+ /* sanity check, shouldn't happen */
+ if (dev->mem_start == 0) {
+ rc = -ENODEV;
+ goto err_unregister_netdev;
+ }
- if (!request_region(ioaddr, ULTRA_IO_EXTENT, dev->name))
- return -EBUSY;
+ rc = request_region(ioaddr, ULTRA_IO_EXTENT, dev->name);
+ if (rc)
+ goto err_unregister_netdev;
reg4 = inb(ioaddr + 4) & 0x7f;
outb(reg4, ioaddr + 4);
@@ -296,10 +301,10 @@ int __init ultramca_probe(struct device
/* Allocate dev->priv and fill in 8390 specific dev fields.
*/
- if (ethdev_init(dev)) {
+ rc = ethdev_init(dev);
+ if (rc) {
printk (", no memory for dev->priv.\n");
- release_region(ioaddr, ULTRA_IO_EXTENT);
- return -ENOMEM;
+ goto err_release_region;
}
gen_dev->driver_data = dev;
@@ -334,6 +339,14 @@ int __init ultramca_probe(struct device
NS8390_init(dev, 0);
return 0;
+
+err_release_region:
+ release_region(ioaddr, ULTRA_IO_EXTENT);
+err_unregister_netdev:
+ unregister_netdev(dev);
+err_free_netdev:
+ free_netdev(dev);
+ return rc;
}
static int ultramca_open(struct net_device *dev)
diff -puN drivers/net/starfire.c~alloc_netdev-balance drivers/net/starfire.c
--- linux-2.6.0-test4-bk5/drivers/net/starfire.c~alloc_netdev-balance Wed Sep 3 23:46:46 2003
+++ linux-2.6.0-test4-bk5-fr/drivers/net/starfire.c Wed Sep 3 23:47:41 2003
@@ -1070,7 +1070,7 @@ err_out_cleardev:
err_out_free_res:
pci_release_regions (pdev);
err_out_free_netdev:
- kfree(dev);
+ free_netdev(dev);
return -ENODEV;
}
diff -puN drivers/net/sundance.c~alloc_netdev-balance drivers/net/sundance.c
--- linux-2.6.0-test4-bk5/drivers/net/sundance.c~alloc_netdev-balance Wed Sep 3 23:47:55 2003
+++ linux-2.6.0-test4-bk5-fr/drivers/net/sundance.c Wed Sep 3 23:48:39 2003
@@ -734,7 +734,7 @@ err_out_res:
#endif
pci_release_regions(pdev);
err_out_netdev:
- kfree (dev);
+ free_netdev (dev);
return -ENODEV;
}
diff -puN drivers/net/sungem.c~alloc_netdev-balance drivers/net/sungem.c
--- linux-2.6.0-test4-bk5/drivers/net/sungem.c~alloc_netdev-balance Wed Sep 3 23:48:47 2003
+++ linux-2.6.0-test4-bk5-fr/drivers/net/sungem.c Wed Sep 3 23:54:32 2003
@@ -2630,7 +2630,7 @@ static int __devinit gem_init_one(struct
if (err) {
printk(KERN_ERR PFX "No usable DMA configuration, "
"aborting.\n");
- return err;
+ goto err_disable_device;
}
pci_using_dac = 0;
}
@@ -2641,20 +2641,23 @@ static int __devinit gem_init_one(struct
if ((pci_resource_flags(pdev, 0) & IORESOURCE_IO) != 0) {
printk(KERN_ERR PFX "Cannot find proper PCI device "
"base address, aborting.\n");
- return -ENODEV;
+ err = -ENODEV;
+ goto err_disable_device;
}
dev = alloc_etherdev(sizeof(*gp));
if (!dev) {
printk(KERN_ERR PFX "Etherdev alloc failed, aborting.\n");
- return -ENOMEM;
+ err = -ENOMEM;
+ goto err_disable_device;
}
SET_MODULE_OWNER(dev);
SET_NETDEV_DEV(dev, &pdev->dev);
gp = dev->priv;
- if (pci_request_regions(pdev, dev->name)) {
+ err = pci_request_regions(pdev, dev->name);
+ if (err) {
printk(KERN_ERR PFX "Cannot obtain PCI resources, "
"aborting.\n");
goto err_out_free_netdev;
@@ -2688,6 +2691,7 @@ static int __devinit gem_init_one(struct
if (gp->regs == 0UL) {
printk(KERN_ERR PFX "Cannot map device registers, "
"aborting.\n");
+ err = -EIO;
goto err_out_free_res;
}
@@ -2711,8 +2715,10 @@ static int __devinit gem_init_one(struct
/* By default, we start with autoneg */
gp->want_autoneg = 1;
- if (gem_check_invariants(gp))
+ if (gem_check_invariants(gp)) {
+ err = -ENODEV;
goto err_out_iounmap;
+ }
/* It is guaranteed that the returned buffer will be at least
* PAGE_SIZE aligned.
@@ -2723,6 +2729,7 @@ static int __devinit gem_init_one(struct
if (!gp->init_block) {
printk(KERN_ERR PFX "Cannot allocate init block, "
"aborting.\n");
+ err = -ENOMEM;
goto err_out_iounmap;
}
@@ -2735,6 +2742,7 @@ static int __devinit gem_init_one(struct
if (register_netdev(dev)) {
printk(KERN_ERR PFX "Cannot register net device, "
"aborting.\n");
+ err = -ENOMEM;
goto err_out_free_consistent;
}
@@ -2804,9 +2812,10 @@ err_out_free_res:
pci_release_regions(pdev);
err_out_free_netdev:
- kfree(dev);
-
- return -ENODEV;
+ free_netdev(dev);
+err_disable_device:
+ pci_disable_device(pdev);
+ return err;
}
diff -puN drivers/net/sunhme.c~alloc_netdev-balance drivers/net/sunhme.c
--- linux-2.6.0-test4-bk5/drivers/net/sunhme.c~alloc_netdev-balance Wed Sep 3 23:54:40 2003
+++ linux-2.6.0-test4-bk5-fr/drivers/net/sunhme.c Wed Sep 3 23:56:19 2003
@@ -2895,7 +2895,7 @@ err_out_iounmap:
sbus_iounmap(hp->tcvregs, TCVR_REG_SIZE);
err_out_free_netdev:
- kfree(dev);
+ free_netdev(dev);
err_out:
return err;
@@ -3247,7 +3247,7 @@ err_out_clear_quattro:
if (qp != NULL)
qp->happy_meals[qfe_slot] = NULL;
- kfree(dev);
+ free_netdev(dev);
err_out:
return err;
diff -puN drivers/net/sunqe.c~alloc_netdev-balance drivers/net/sunqe.c
--- linux-2.6.0-test4-bk5/drivers/net/sunqe.c~alloc_netdev-balance Wed Sep 3 23:56:30 2003
+++ linux-2.6.0-test4-bk5-fr/drivers/net/sunqe.c Wed Sep 3 23:58:42 2003
@@ -949,7 +949,7 @@ out1:
i = 4;
out:
while (i--)
- kfree(qe_devs[i]);
+ free_netdev(qe_devs[i]);
return res;
}
diff -puN drivers/net/tg3.c~alloc_netdev-balance drivers/net/tg3.c
--- linux-2.6.0-test4-bk5/drivers/net/tg3.c~alloc_netdev-balance Wed Sep 3 23:58:51 2003
+++ linux-2.6.0-test4-bk5-fr/drivers/net/tg3.c Thu Sep 4 00:00:31 2003
@@ -7740,7 +7740,7 @@ err_out_iounmap:
iounmap((void *) tp->regs);
err_out_free_dev:
- kfree(dev);
+ free_netdev(dev);
err_out_free_res:
pci_release_regions(pdev);
diff -puN drivers/net/tlan.c~alloc_netdev-balance drivers/net/tlan.c
--- linux-2.6.0-test4-bk5/drivers/net/tlan.c~alloc_netdev-balance Thu Sep 4 00:00:40 2003
+++ linux-2.6.0-test4-bk5-fr/drivers/net/tlan.c Thu Sep 4 00:01:29 2003
@@ -670,7 +670,7 @@ err_out_uninit:
pci_free_consistent(priv->pciDev, priv->dmaSize, priv->dmaStorage,
priv->dmaStorageDMA );
err_out_free_dev:
- kfree(dev);
+ free_netdev(dev);
err_out_regions:
if (pdev)
pci_release_regions(pdev);
@@ -695,7 +695,7 @@ static void TLan_Eisa_Cleanup(void)
release_region( dev->base_addr, 0x10);
unregister_netdev( dev );
TLan_Eisa_Devices = priv->nextDevice;
- kfree( dev );
+ free_netdev( dev );
tlan_have_eisa--;
}
}
diff -puN drivers/net/typhoon.c~alloc_netdev-balance drivers/net/typhoon.c
--- linux-2.6.0-test4-bk5/drivers/net/typhoon.c~alloc_netdev-balance Thu Sep 4 00:01:35 2003
+++ linux-2.6.0-test4-bk5-fr/drivers/net/typhoon.c Thu Sep 4 00:02:11 2003
@@ -2455,7 +2455,7 @@ error_out_remap:
error_out_regions:
pci_release_regions(pdev);
error_out_dev:
- kfree(dev);
+ free_netdev(dev);
error_out:
return err;
}
diff -puN drivers/net/via-rhine.c~alloc_netdev-balance drivers/net/via-rhine.c
--- linux-2.6.0-test4-bk5/drivers/net/via-rhine.c~alloc_netdev-balance Thu Sep 4 00:02:18 2003
+++ linux-2.6.0-test4-bk5-fr/drivers/net/via-rhine.c Thu Sep 4 00:03:08 2003
@@ -868,7 +868,7 @@ err_out_free_res:
#endif
pci_release_regions(pdev);
err_out_free_netdev:
- kfree (dev);
+ free_netdev (dev);
err_out:
return -ENODEV;
}
diff -puN drivers/net/yellowfin.c~alloc_netdev-balance drivers/net/yellowfin.c
--- linux-2.6.0-test4-bk5/drivers/net/yellowfin.c~alloc_netdev-balance Thu Sep 4 00:03:15 2003
+++ linux-2.6.0-test4-bk5-fr/drivers/net/yellowfin.c Thu Sep 4 00:03:34 2003
@@ -577,7 +577,7 @@ err_out_free_res:
#endif
pci_release_regions(pdev);
err_out_free_netdev:
- kfree (dev);
+ free_netdev (dev);
return -ENODEV;
}
_
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] 2.6.0-test4-bk5 - Was: Re: The recent free_netdev() conversion...
2003-09-03 22:33 ` [PATCH] 2.6.0-test4-bk5 - Was: " Francois Romieu
@ 2003-09-04 0:56 ` Jeff Garzik
2003-09-04 3:35 ` David S. Miller
1 sibling, 0 replies; 7+ messages in thread
From: Jeff Garzik @ 2003-09-04 0:56 UTC (permalink / raw)
To: Francois Romieu; +Cc: David S. Miller, netdev
patch looks OK to me.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] 2.6.0-test4-bk5 - Was: Re: The recent free_netdev() conversion...
2003-09-03 22:33 ` [PATCH] 2.6.0-test4-bk5 - Was: " Francois Romieu
2003-09-04 0:56 ` Jeff Garzik
@ 2003-09-04 3:35 ` David S. Miller
1 sibling, 0 replies; 7+ messages in thread
From: David S. Miller @ 2003-09-04 3:35 UTC (permalink / raw)
To: Francois Romieu; +Cc: jgarzik, netdev
On Thu, 4 Sep 2003 00:33:06 +0200
Francois Romieu <romieu@fr.zoreil.com> wrote:
> Please review.
Looks good, applied thanks.
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2003-09-04 3:35 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-09-01 14:59 The recent free_netdev() conversion Jeff Garzik
2003-09-01 14:53 ` David S. Miller
2003-09-01 15:58 ` Jeff Garzik
2003-09-01 15:58 ` David S. Miller
2003-09-03 22:33 ` [PATCH] 2.6.0-test4-bk5 - Was: " Francois Romieu
2003-09-04 0:56 ` Jeff Garzik
2003-09-04 3:35 ` David S. Miller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).