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

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

diff -u --recursive --new-file v2.4.0-test10/linux/drivers/net/3c509.c linux/drivers/net/3c509.c
@@ -200,6 +200,8 @@
 	static int pnp_cards = 0;
 #endif /* __ISAPNP__ */
 
+	if (dev) SET_MODULE_OWNER(dev);
+
 	/* First check all slots of the EISA bus.  The next slot address to
 	   probe is kept in 'eisa_addr' to support multiple probe() calls. */
 	if (EISA_bus) {
@@ -434,6 +436,14 @@
 	/* Free the interrupt so that some other card can use it. */
 	outw(0x0f00, ioaddr + WN0_IRQ);
  found:
+	if (dev == NULL) {
+		dev = init_etherdev(dev, sizeof(struct el3_private));
+		if (dev == NULL) {
+			release_region(ioaddr, EL3_IO_EXTENT);
+			return -ENOMEM;
+		}
+		SET_MODULE_OWNER(dev);
+	}
 	memcpy(dev->dev_addr, phys_addr, sizeof(phys_addr));
 	dev->base_addr = ioaddr;
 	dev->irq = irq;
@@ -523,9 +533,8 @@
 	outw(RxReset, ioaddr + EL3_CMD);
 	outw(SetStatusEnb | 0x00, ioaddr + EL3_CMD);
 
-	if (request_irq(dev->irq, &el3_interrupt, 0, dev->name, dev)) {
-		return -EAGAIN;
-	}
+	i = request_irq(dev->irq, &el3_interrupt, 0, dev->name, dev);
+	if (i) return i;
 
 	EL3WINDOW(0);
 	if (el3_debug > 3)
@@ -584,8 +593,7 @@
 		printk("%s: Opened 3c509  IRQ %d  status %4.4x.\n",
 			   dev->name, dev->irq, inw(ioaddr + EL3_STATUS));
 
-	MOD_INC_USE_COUNT;
-	return 0;					/* Always succeed */
+	return 0;
 }
 
 static void
@@ -962,7 +970,6 @@
 	outw(0x0f00, ioaddr + WN0_IRQ);
 
 	update_stats(dev);
-	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)