patch-2.4.0-test11 linux/drivers/net/3c515.c

Next file: linux/drivers/net/3c523.c
Previous file: linux/drivers/net/3c509.c
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.4.0-test10/linux/drivers/net/3c515.c linux/drivers/net/3c515.c
@@ -428,6 +428,8 @@
 {
 	int cards_found = 0;
 
+	SET_MODULE_OWNER(dev);
+
 	cards_found = corkscrew_scan(dev);
 
 	if (corkscrew_debug > 0 && cards_found)
@@ -561,6 +563,8 @@
 	    sizeof(struct corkscrew_private) + 15;	/* Pad for alignment */
 
 	dev = (struct net_device *) kmalloc(dev_size, GFP_KERNEL);
+	if (!dev)
+		return NULL;
 	memset(dev, 0, dev_size);
 	/* Align the Rx and Tx ring entries.  */
 	dev->priv =
@@ -586,15 +590,16 @@
 	ether_setup(dev);
 	vp->next_module = root_corkscrew_dev;
 	root_corkscrew_dev = dev;
-	if (register_netdev(dev) != 0)
-		return 0;
-#else				/* not a MODULE */
-	if (dev) {
-		/* Caution: quad-word alignment required for rings! */
-		dev->priv =
-		    kmalloc(sizeof(struct corkscrew_private), GFP_KERNEL);
-		memset(dev->priv, 0, sizeof(struct corkscrew_private));
+	if (register_netdev(dev) != 0) {
+		kfree(dev);
+		return NULL;
 	}
+	SET_MODULE_OWNER(dev);
+#else				/* not a MODULE */
+	/* Caution: quad-word alignment required for rings! */
+	dev->priv =
+	    kmalloc(sizeof(struct corkscrew_private), GFP_KERNEL);
+	memset(dev->priv, 0, sizeof(struct corkscrew_private));
 	dev = init_etherdev(dev, sizeof(struct corkscrew_private));
 	dev->base_addr = ioaddr;
 	dev->irq = irq;
@@ -874,8 +879,6 @@
 	     | (vp->bus_master ? DMADone : 0) | UpComplete | DownComplete,
 	     ioaddr + EL3_CMD);
 
-	MOD_INC_USE_COUNT;
-
 	return 0;
 }
 
@@ -1499,8 +1502,6 @@
 				vp->tx_skbuff[i] = 0;
 			}
 	}
-
-	MOD_DEC_USE_COUNT;
 
 	return 0;
 }

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)