]> git.hungrycats.org Git - linux/commitdiff
[NET]: Use free_netdev() even in error paths.
authorFrançois Romieu <romieu@fr.zoreil.com>
Wed, 3 Sep 2003 17:36:39 +0000 (10:36 -0700)
committerStephen Hemminger <shemminger@osdl.org>
Wed, 3 Sep 2003 17:36:39 +0000 (10:36 -0700)
34 files changed:
drivers/net/3c509.c
drivers/net/3c59x.c
drivers/net/8139cp.c
drivers/net/acenic.c
drivers/net/amd8111e.c
drivers/net/b44.c
drivers/net/bmac.c
drivers/net/dgrs.c
drivers/net/dl2k.c
drivers/net/eepro100.c
drivers/net/epic100.c
drivers/net/fealnx.c
drivers/net/hamachi.c
drivers/net/ioc3-eth.c
drivers/net/lasi_82596.c
drivers/net/lp486e.c
drivers/net/natsemi.c
drivers/net/pcnet32.c
drivers/net/r8169.c
drivers/net/rcpci45.c
drivers/net/sb1000.c
drivers/net/sis190.c
drivers/net/sis900.c
drivers/net/smc-mca.c
drivers/net/starfire.c
drivers/net/sundance.c
drivers/net/sungem.c
drivers/net/sunhme.c
drivers/net/sunqe.c
drivers/net/tg3.c
drivers/net/tlan.c
drivers/net/typhoon.c
drivers/net/via-rhine.c
drivers/net/yellowfin.c

index df5f96439afa6cd2290b3d379269ff16c3df1e0d..74fd4100332bfd1375596d61d56116bea58022ea 100644 (file)
@@ -604,7 +604,7 @@ out1:
                pnp_device_detach(idev);
 #endif
 out:
-       kfree(dev);
+       free_netdev(dev);
        return err;
 }
 
index 4e3eabe1e5eae64de3bd713bc358cb82046b9955..572de917454d2612175a72ce73bfd211a5336aaa 100644 (file)
@@ -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;
index a49241c1ae2312e23f32dc28816142319d984491..fc3c04c6c7bc524ab56571238a5dc8ba3748e621 100644 (file)
@@ -1768,7 +1768,7 @@ err_out_mwi:
 err_out_disable:
        pci_disable_device(pdev);
 err_out_free:
-       kfree(dev);
+       free_netdev(dev);
        return rc;
 }
 
index d6a4fdcec957d8ebc9cf9f343a37dd843cdd1891..3350a70c210347f1e9c1cb9725c22715e559a44f 100644 (file)
@@ -685,7 +685,7 @@ int __devinit acenic_probe (ACE_PROBE_ARG)
                }
 
                if (pci_enable_device(pdev)) {
-                       kfree(dev);
+                       free_netdev(dev);
                        continue;
                }
 
@@ -733,7 +733,7 @@ int __devinit acenic_probe (ACE_PROBE_ARG)
 
                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_ARG)
                        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_ARG)
                         * 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_ARG)
                        /*
                         * ace_init() calls ace_init_cleanup() on error.
                         */
-                       kfree(dev);
+                       free_netdev(dev);
                        continue;
                }
 
index 19464a83fdfba9724db59e163e70b82d220d3701..bc9e1bfc72209791061dffebe197350fcbffb2a0 100755 (executable)
@@ -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);
index b759af47913de60d1b593df33d65d042e27964cb..ef10d16fd679ed24e95adfd90ff131745653a86c 100644 (file)
@@ -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);
index ed7874f4fe4e2eedc6267ed3637a2a9e57c6c8c8..27bc8ed937cfa384dd7427e3c33635ce5c9ba3df 100644 (file)
@@ -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)
index 00ddd19e0fd2ebd20f25f56b5cff03fc69ad2f17..d28d864cbaa510aaf1ab8b31233975719c975df4 100644 (file)
@@ -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;
index d0fba4cb4df441e9cb331c84578d7ba843f71911..76f1d66eb6c1d5c962e8f87278792f7f5b7de3f2 100644 (file)
@@ -319,7 +319,7 @@ rio_probe1 (struct pci_dev *pdev, const struct pci_device_id *ent)
 
       err_out_dev:
 #endif
-       kfree (dev);
+       free_netdev (dev);
 
       err_out_res:
        pci_release_regions (pdev);
index 2a14f46f6014e0340c496b26d7752fc3fcfbc76f..02c2db84f6039eaf262dc28a836c260607ba4251 100644 (file)
@@ -894,7 +894,7 @@ static int __devinit speedo_found1(struct pci_dev *pdev,
 
  err_free_unlock:
        rtnl_unlock();
-       kfree(dev);
+       free_netdev(dev);
        return -1;
 }
 
index 93fdb1469a0cdfdee7fe38a34b09dc53e666ad52..00bbf4b7baea1ded7d00d898c506735b9c726e19 100644 (file)
@@ -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
index de914dfc56f87451ed5b974589274f9832165097..ee1e45180f8622f3f8102a909dd6a7e04133fe18 100644 (file)
@@ -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);
index 36e7074c2bd894bd3dced2eb43483f464f521ef3..ab87588a7ff356f90340dd4c0b2f64b57d152cb4 100644 (file)
@@ -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:
index c3b4e5f1353d175928dbc50da8b820f9e92a6ae8..d93767489ff02d1514d65d98c79ba0a58dd88bcf 100644 (file)
@@ -1512,7 +1512,7 @@ out_stop:
 out_res:
        pci_release_regions(pdev);
 out_free:
-       kfree(dev);
+       free_netdev(dev);
        return err;
 }
 
index b3045c467da8a0c5c611bf010c8a84dba37f9a59..6f8c223bf68e8d3a399726a445ec4be26ee86daa 100644 (file)
@@ -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) {
index fe1e255a576c94db581e871d2bc60f3129e45448..3e687d9cbd419f393705830e6ce10ef0a179cc3f 100644 (file)
@@ -1324,7 +1324,7 @@ static int __init lp486e_init_module(void) {
        dev->base_addr = io;
        dev->init = lp486e_probe;
        if (register_netdev(dev) != 0) {
-               kfree(dev);
+               free_netdev(dev);
                return -EIO;
        }
        dev_lp486e = dev;
index b95d3030e46527ce3ef00674d6ef53c20ef994ef..14fbbef63fb6403e04fb0701d58caa63b060c07e 100644 (file)
@@ -766,7 +766,7 @@ static int __devinit natsemi_probe1 (struct pci_dev *pdev,
 
        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 (struct pci_dev *pdev,
                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 (struct pci_dev *pdev,
        if (i) {
                pci_release_regions(pdev);
                unregister_netdev(dev);
-               kfree(dev);
+               free_netdev(dev);
                pci_set_drvdata(pdev, NULL);
                return i;
        }
index ad6281ef7a8320dce0d28750c001b4558d4664f7..2d519b6965333ba68fc482d1becf951d0480015e 100644 (file)
@@ -529,6 +529,7 @@ pcnet32_probe1(unsigned long ioaddr, unsigned int irq_line, int shared,
     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, unsigned int irq_line, int shared,
        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, unsigned int irq_line, int shared,
     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, unsigned int irq_line, int shared,
     
     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, unsigned int irq_line, int shared,
     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, unsigned int irq_line, int shared,
     
     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, unsigned int irq_line, int shared,
        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, unsigned int irq_line, int shared,
     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;
 }
 
 
index a0b4b659aa0e3f5f22a5dd443643aa85f51c9068..c11b83e6adeb910e4edfbfc1cd27a3e24812e65f 100644 (file)
@@ -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, const struct pci_device_id *ent)
                iounmap(ioaddr);
                pci_release_regions(pdev);
                pci_disable_device(pdev);
-               kfree(dev);
+               free_netdev(dev);
                return rc;
        }
 
index f5cdead40f14028a82762333e0c786d57bb58183..e7e1a9f2d71a703239d25db29cf6ebac64fbaaa3 100644 (file)
@@ -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;
index d0153f60a0368ce35f6d895bdca6770951f21db0..5326dee62c74ee06da0793d3f526d35c45336aaa 100644 (file)
@@ -213,9 +213,11 @@ sb1000_probe_one(struct pnp_dev *pdev, const struct pnp_device_id *id)
 
        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:
index 1c79e7b9c34e5fed55df7fd1572d0ac328a2dc4d..9f421480b233c64210711484b91c0913312b17ac 100644 (file)
@@ -470,7 +470,7 @@ SiS190_init_board(struct pci_dev *pdev, struct net_device **dev_out,
 
        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);
@@ -482,18 +482,18 @@ SiS190_init_board(struct pci_dev *pdev, struct net_device **dev_out,
                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);
@@ -521,9 +521,10 @@ SiS190_init_board(struct pci_dev *pdev, struct net_device **dev_out,
 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;
 }
 
@@ -603,7 +604,7 @@ SiS190_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
                iounmap(ioaddr);
                pci_release_regions(pdev);
                pci_disable_device(pdev);
-               kfree(dev);
+               free_netdev(dev);
                return rc;
        }
 
index b5853f1a9fbdef14c362987f9ee7262c0779f8a6..6422eb2a4208083b670723e06f73337d5ddc1889 100644 (file)
@@ -503,7 +503,7 @@ static int __devinit sis900_probe (struct pci_dev *pci_dev, const struct pci_dev
        pci_set_drvdata(pci_dev, NULL);
        pci_release_regions(pci_dev);
  err_out:
-       kfree(net_dev);
+       free_netdev(net_dev);
        return ret;
 }
 
index e33c7a2a2f7fede5cd1ee422a4476c44d46512d6..c5a0857073024d7da9df3e02ee286a03cca76a77 100644 (file)
@@ -132,7 +132,7 @@ int __init ultramca_probe(struct device *gen_dev)
        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 *gen_dev)
        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 *gen_dev)
                }
        }
 
-       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 *gen_dev)
        /* 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 *gen_dev)
        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)
index dcf1db7ea6efeb9edd197389f367d0db88c84081..c2bddf1f1700a62d41be8e8c18516c94237708ec 100644 (file)
@@ -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;
 }
 
index 5bd8be3165472ff63ed484e2f6c4be86493c0b8b..aad877c5400b94b3f150fdd4e63c4cabf7aec763 100644 (file)
@@ -734,7 +734,7 @@ err_out_res:
 #endif
        pci_release_regions(pdev);
 err_out_netdev:
-       kfree (dev);
+       free_netdev (dev);
        return -ENODEV;
 }
 
index de27ee588a7743ae34f50e7aa252b60b08f277ee..a346fd1d4dba28d70e43698000052d2d5eac7617 100644 (file)
@@ -2622,7 +2622,7 @@ static int __devinit gem_init_one(struct pci_dev *pdev,
                if (err) {
                        printk(KERN_ERR PFX "No usable DMA configuration, "
                               "aborting.\n");
-                       return err;
+                       goto err_disable_device;
                }
                pci_using_dac = 0;
        }
@@ -2633,20 +2633,23 @@ static int __devinit gem_init_one(struct pci_dev *pdev,
        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;
@@ -2680,6 +2683,7 @@ static int __devinit gem_init_one(struct pci_dev *pdev,
        if (gp->regs == 0UL) {
                printk(KERN_ERR PFX "Cannot map device registers, "
                       "aborting.\n");
+               err = -EIO;
                goto err_out_free_res;
        }
 
@@ -2703,8 +2707,10 @@ static int __devinit gem_init_one(struct pci_dev *pdev,
        /* 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.
@@ -2715,6 +2721,7 @@ static int __devinit gem_init_one(struct pci_dev *pdev,
        if (!gp->init_block) {
                printk(KERN_ERR PFX "Cannot allocate init block, "
                       "aborting.\n");
+               err = -ENOMEM;
                goto err_out_iounmap;
        }
 
@@ -2727,6 +2734,7 @@ static int __devinit gem_init_one(struct pci_dev *pdev,
        if (register_netdev(dev)) {
                printk(KERN_ERR PFX "Cannot register net device, "
                       "aborting.\n");
+               err = -ENOMEM;
                goto err_out_free_consistent;
        }
 
@@ -2796,9 +2804,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;
 
 }
 
index 8c786ab7b3c5fee4e0e14a52717ed6dc45db7b64..b91f7d0199bf6a0de4dfef89011ea86c6c27ba9e 100644 (file)
@@ -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;
index b5d8879c20351e10e06ef49a08236f29c0d54ad8..5116b5152e8a118110dea286644757d80527d2fb 100644 (file)
@@ -949,7 +949,7 @@ out1:
        i = 4;
 out:
        while (i--)
-               kfree(qe_devs[i]);
+               free_netdev(qe_devs[i]);
        return res;
 }
 
index c31dc44a6fd24ad7af7804adab4b71b007dd1c3d..3ebedccf00b33e23e2c9a76da5ac860c0b015c76 100644 (file)
@@ -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);
index 5a45900a816e466d2d84e4b5f628b1e3e2a3466a..c5b6999712fbec8f487df042a37a73e7b131b421 100644 (file)
@@ -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--;
        }
 }
index e83372b7adbb4efd0fd07fcd7c9effbb7c74cc57..f30b72218b3027ead02465b2231c693e2f2fd192 100644 (file)
@@ -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;
 }
index c247af6bf6ad00e819d501c654942cf1ea887b23..3059d04aaf0df69c9ad6cb741728c29dbbec8e9b 100644 (file)
@@ -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;
 }
index 8a3328687d1f70e918bf4fd67537a630149f084a..c22ca46b0d811eb5525b515daea4df65b60d1d49 100644 (file)
@@ -577,7 +577,7 @@ err_out_free_res:
 #endif
        pci_release_regions(pdev);
 err_out_free_netdev:
-       kfree (dev);
+       free_netdev (dev);
        return -ENODEV;
 }