[PATCH 2.5 19/25] 8390-cleanup for smc-mca

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



smc-mca.c:
- use ei_alloc_dev()
- register device when up, not before
- fix some mem leaks
- kill ethdev_init()


--- 1.9/drivers/net/smc-mca.c	Wed May 21 05:02:20 2003
+++ edited/smc-mca.c	Sun Jun 29 23:37:54 2003
@@ -51,6 +51,8 @@
 #include "8390.h"
 #include "smc-mca.h"
 
+#define DRVNAME "smc-mca"
+
 static int ultramca_open(struct net_device *dev);
 static void ultramca_reset_8390(struct net_device *dev);
 static void ultramca_get_8390_hdr(struct net_device *dev,
@@ -132,7 +134,7 @@
 	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, err;
 	int adapter = mca_dev->index;
 	int tbase = 0;
 	int tirq = 0;
@@ -202,18 +204,16 @@
 		return -ENXIO;
 
         /* Adapter found. */
-	dev  = alloc_etherdev(0);
-	if(!dev)
+	dev = ei_alloc_dev();
+	if (!dev)
 		return -ENODEV;
 
 	SET_MODULE_OWNER(dev);
 	SET_NETDEV_DEV(dev, gen_dev);
 
-	if((i = register_netdev(dev)) != 0)
-		return i;
 
 	printk(KERN_INFO "%s: %s found in slot %d\n",
-	       dev->name, smc_mca_adapter_names[adapter], slot + 1);
+	       DRVNAME, smc_mca_adapter_names[adapter], slot + 1);
 
 	strncpy(gen_dev->name, smc_mca_adapter_names[adapter], sizeof(gen_dev->name));
 	mca_device_set_claim(mca_dev, 1);
@@ -262,16 +262,20 @@
 		}
 	}
 
-	if (dev->mem_start == 0) /* sanity check, shouldn't happen */
-		return -ENODEV;
+	if (dev->mem_start == 0) { /* sanity check, shouldn't happen */
+		err = -ENODEV;
+		goto out_err;
+	}
 
-	if (!request_region(ioaddr, ULTRA_IO_EXTENT, dev->name))
-		return -EBUSY;
+	if (!request_region(ioaddr, ULTRA_IO_EXTENT, dev->name)) {
+		err = -EBUSY;
+		goto out_err;
+	}
 
 	reg4 = inb(ioaddr + 4) & 0x7f;
 	outb(reg4, ioaddr + 4);
 
-	printk(KERN_INFO "%s: Parameters: %#3x,", dev->name, ioaddr);
+	printk(KERN_INFO "%s: Parameters: %#3x,", DRVNAME, ioaddr);
 
 	for (i = 0; i < 6; i++)
 		printk(" %2.2X", dev->dev_addr[i] = inb(ioaddr + 8 + i));
@@ -293,14 +297,6 @@
 
 	outb(reg4, ioaddr + 4);
 
-	/* Allocate dev->priv and fill in 8390 specific dev fields.
-	 */
-
-	if (ethdev_init(dev)) {
-		printk (", no memory for dev->priv.\n");
-		release_region(ioaddr, ULTRA_IO_EXTENT);
-		return -ENOMEM;
-	}
 	gen_dev->driver_data = dev;
 
 	/* The 8390 isn't at the base address, so fake the offset
@@ -333,7 +329,15 @@
 
 	NS8390_init(dev, 0);
 
+	err = register_netdev(dev);
+	if (err)
+		goto out_err;
+	
 	return 0;
+
+out_err:
+	kfree(dev);
+	return err;
 }
 
 static int ultramca_open(struct net_device *dev)
@@ -357,8 +361,7 @@
 	 * outb(0xff, dev->base_addr + EN0_ERWCNT);
 	 */
 
-	ei_open(dev);
-	return 0;
+	return ei_open(dev);
 }
 
 static void ultramca_reset_8390(struct net_device *dev)
@@ -449,14 +452,14 @@
 	struct mca_device *mca_dev = to_mca_device(gen_dev);
 	struct net_device *dev = (struct net_device *)gen_dev->driver_data;
 
-	if(dev && dev->priv) {
+	if (dev) {
 		/* NB: ultra_close_card() does free_irq */
 		int ioaddr = dev->base_addr - ULTRA_NIC_OFFSET;
 
 		mca_device_set_claim(mca_dev, 0);
 		release_region(ioaddr, ULTRA_IO_EXTENT);
 		unregister_netdev(dev);
-		kfree(dev->priv);
+		kfree(dev);
 	}
 	return 0;
 }

-
: send the line "unsubscribe linux-net" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Netdev]     [Ethernet Bridging]     [Linux 802.1Q VLAN]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Git]     [Bugtraq]     [Yosemite News and Information]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux PCI]     [Linux Admin]     [Samba]

  Powered by Linux