[patch] MOD_INC_USE 1st in dev->open for 8390 drvrs.

From: Paul Gortmaker (p_gortmaker@yahoo.com)
Date: Sun Aug 27 2000 - 15:27:53 EST


The following patch makes sure MOD_INC_USE_COUNT is done 1st up in the
dev->open in the 8390 based network drivers, with MOD_DEC_USE_COUNT put
in any failure paths.

BTW, I like the idea of mkdir drivers/net/8390/ but see no reason why
it can't wait until 2.5.x

Paul.

diff -u drivers/net-old/3c503.c drivers/net/3c503.c
--- drivers/net-old/3c503.c Wed Jun 28 11:38:14 2000
+++ drivers/net/3c503.c Sat Aug 26 16:18:32 2000
@@ -333,6 +333,7 @@
 el2_open(struct net_device *dev)
 {
 
+ MOD_INC_USE_COUNT;
     if (dev->irq < 2) {
         int irqlist[] = {5, 9, 3, 4, 0};
         int *irqp = irqlist;
@@ -351,17 +352,18 @@
         } while (*++irqp);
         if (*irqp == 0) {
             outb(EGACFR_IRQOFF, E33G_GACFR); /* disable interrupts. */
+ MOD_DEC_USE_COUNT;
             return -EAGAIN;
         }
     } else {
         if (request_irq(dev->irq, ei_interrupt, 0, ei_status.name, dev)) {
+ MOD_DEC_USE_COUNT;
             return -EAGAIN;
         }
     }
 
     el2_init_card(dev);
     ei_open(dev);
- MOD_INC_USE_COUNT;
     return 0;
 }
 
diff -u drivers/net-old/ac3200.c drivers/net/ac3200.c
--- drivers/net-old/ac3200.c Wed Jun 28 11:38:16 2000
+++ drivers/net/ac3200.c Sat Aug 26 16:29:53 2000
@@ -256,17 +256,19 @@
 
 static int ac_open(struct net_device *dev)
 {
+ MOD_INC_USE_COUNT;
+
 #ifdef notyet
         /* Someday we may enable the IRQ and shared memory here. */
         int ioaddr = dev->base_addr;
 
- if (request_irq(dev->irq, ei_interrupt, 0, "ac3200", dev))
+ if (request_irq(dev->irq, ei_interrupt, 0, "ac3200", dev)) {
+ MOD_DEC_USE_COUNT;
                 return -EAGAIN;
+ }
 #endif
 
         ei_open(dev);
-
- MOD_INC_USE_COUNT;
 
         return 0;
 }
diff -u drivers/net-old/apne.c drivers/net/apne.c
--- drivers/net-old/apne.c Wed Jun 28 11:38:16 2000
+++ drivers/net/apne.c Sat Aug 26 16:25:56 2000
@@ -337,8 +337,8 @@
 static int
 apne_open(struct net_device *dev)
 {
- ei_open(dev);
     MOD_INC_USE_COUNT;
+ ei_open(dev);
     return 0;
 }
 
diff -u drivers/net-old/ariadne2.c drivers/net/ariadne2.c
--- drivers/net-old/ariadne2.c Wed Jun 28 11:38:17 2000
+++ drivers/net/ariadne2.c Sat Aug 26 16:26:29 2000
@@ -219,8 +219,8 @@
 
 static int ariadne2_open(struct net_device *dev)
 {
- ei_open(dev);
     MOD_INC_USE_COUNT;
+ ei_open(dev);
     return 0;
 }
 
diff -u drivers/net-old/e2100.c drivers/net/e2100.c
--- drivers/net-old/e2100.c Wed Jun 28 11:38:20 2000
+++ drivers/net/e2100.c Sat Aug 26 16:23:53 2000
@@ -255,8 +255,10 @@
 {
         short ioaddr = dev->base_addr;
 
+ MOD_INC_USE_COUNT;
         if (request_irq(dev->irq, ei_interrupt, 0, "e2100", dev)) {
- return -EBUSY;
+ MOD_DEC_USE_COUNT;
+ return -EAGAIN;
         }
 
         /* Set the interrupt line and memory base on the hardware. */
@@ -269,7 +271,6 @@
         outb(0, ioaddr + E21_ASIC + ((dev->mem_start >> 17) & 7));
 
         ei_open(dev);
- MOD_INC_USE_COUNT;
         return 0;
 }
 
diff -u drivers/net-old/es3210.c drivers/net/es3210.c
--- drivers/net-old/es3210.c Wed Jun 28 11:38:21 2000
+++ drivers/net/es3210.c Sat Aug 26 16:20:58 2000
@@ -356,9 +356,9 @@
 
 static int es_open(struct net_device *dev)
 {
- ei_open(dev);
-
         MOD_INC_USE_COUNT;
+
+ ei_open(dev);
 
         return 0;
 }
diff -u drivers/net-old/hp-plus.c drivers/net/hp-plus.c
--- drivers/net-old/hp-plus.c Wed Jun 28 11:38:23 2000
+++ drivers/net/hp-plus.c Sat Aug 26 16:24:35 2000
@@ -260,7 +260,9 @@
         int ioaddr = dev->base_addr - NIC_OFFSET;
         int option_reg;
 
+ MOD_INC_USE_COUNT;
         if (request_irq(dev->irq, ei_interrupt, 0, "hp-plus", dev)) {
+ MOD_DEC_USE_COUNT;
             return -EAGAIN;
         }
 
@@ -279,7 +281,6 @@
         outw(Perf_Page, ioaddr + HP_PAGING);
 
         ei_open(dev);
- MOD_INC_USE_COUNT;
         return 0;
 }
 
diff -u drivers/net-old/hp.c drivers/net/hp.c
--- drivers/net-old/hp.c Wed Jun 28 11:38:23 2000
+++ drivers/net/hp.c Sat Aug 26 16:24:05 2000
@@ -214,8 +214,8 @@
 static int
 hp_open(struct net_device *dev)
 {
- ei_open(dev);
         MOD_INC_USE_COUNT;
+ ei_open(dev);
         return 0;
 }
 
diff -u drivers/net-old/lne390.c drivers/net/lne390.c
--- drivers/net-old/lne390.c Wed Jun 28 11:38:23 2000
+++ drivers/net/lne390.c Sat Aug 26 16:20:32 2000
@@ -351,8 +351,8 @@
 
 static int lne390_open(struct net_device *dev)
 {
- ei_open(dev);
         MOD_INC_USE_COUNT;
+ ei_open(dev);
         return 0;
 }
 
diff -u drivers/net-old/ne.c drivers/net/ne.c
--- drivers/net-old/ne.c Tue Jul 11 02:29:10 2000
+++ drivers/net/ne.c Sat Aug 26 16:21:47 2000
@@ -553,8 +553,8 @@
 
 static int ne_open(struct net_device *dev)
 {
- ei_open(dev);
         MOD_INC_USE_COUNT;
+ ei_open(dev);
         return 0;
 }
 
diff -u drivers/net-old/ne2.c drivers/net/ne2.c
--- drivers/net-old/ne2.c Wed Jun 28 11:38:25 2000
+++ drivers/net/ne2.c Sat Aug 26 16:21:38 2000
@@ -372,8 +372,8 @@
 
 static int ne_open(struct net_device *dev)
 {
- ei_open(dev);
         MOD_INC_USE_COUNT;
+ ei_open(dev);
         return 0;
 }
 
diff -u drivers/net-old/ne3210.c drivers/net/ne3210.c
--- drivers/net-old/ne3210.c Wed Jun 28 11:38:25 2000
+++ drivers/net/ne3210.c Sat Aug 26 16:21:12 2000
@@ -342,8 +342,8 @@
 
 static int ne3210_open(struct net_device *dev)
 {
- ei_open(dev);
         MOD_INC_USE_COUNT;
+ ei_open(dev);
         return 0;
 }
 
diff -u drivers/net-old/oaknet.c drivers/net/oaknet.c
--- drivers/net-old/oaknet.c Wed Jun 28 11:38:25 2000
+++ drivers/net/oaknet.c Sat Aug 26 16:27:41 2000
@@ -237,8 +237,9 @@
 static int
 oaknet_open(struct net_device *dev)
 {
- int status = ei_open(dev);
+ int status;
         MOD_INC_USE_COUNT;
+ status = ei_open(dev);
         return (status);
 }
 
diff -u drivers/net-old/smc-mca.c drivers/net/smc-mca.c
--- drivers/net-old/smc-mca.c Wed Jun 28 11:38:27 2000
+++ drivers/net/smc-mca.c Sat Aug 26 16:22:51 2000
@@ -323,8 +323,11 @@
 {
         int ioaddr = dev->base_addr - ULTRA_NIC_OFFSET; /* ASIC addr */
 
- if (request_irq(dev->irq, ei_interrupt, 0, ei_status.name, dev))
+ MOD_INC_USE_COUNT;
+ if (request_irq(dev->irq, ei_interrupt, 0, ei_status.name, dev)) {
+ MOD_DEC_USE_COUNT;
                 return -EAGAIN;
+ }
 
         outb(ULTRA_MEMENB, ioaddr); /* Enable memory */
         outb(0x80, ioaddr + 5); /* ??? */
@@ -340,7 +343,6 @@
          */
 
         ei_open(dev);
- MOD_INC_USE_COUNT;
         return 0;
 }
 
diff -u drivers/net-old/smc-ultra.c drivers/net/smc-ultra.c
--- drivers/net-old/smc-ultra.c Wed Jun 28 11:38:27 2000
+++ drivers/net/smc-ultra.c Sat Aug 26 16:15:36 2000
@@ -253,8 +253,11 @@
         unsigned char irq2reg[] = {0, 0, 0x04, 0x08, 0, 0x0C, 0, 0x40,
                                                            0, 0x04, 0x44, 0x48, 0, 0, 0, 0x4C, };
 
- if (request_irq(dev->irq, ei_interrupt, 0, ei_status.name, dev))
+ MOD_INC_USE_COUNT;
+ if (request_irq(dev->irq, ei_interrupt, 0, ei_status.name, dev)) {
+ MOD_DEC_USE_COUNT;
                 return -EAGAIN;
+ }
 
         outb(0x00, ioaddr); /* Disable shared memory for safety. */
         outb(0x80, ioaddr + 5);
@@ -273,7 +276,6 @@
         outb_p(E8390_NODMA+E8390_PAGE0, dev->base_addr);
         outb(0xff, dev->base_addr + EN0_ERWCNT);
         ei_open(dev);
- MOD_INC_USE_COUNT;
         return 0;
 }
 
diff -u drivers/net-old/smc-ultra32.c drivers/net/smc-ultra32.c
--- drivers/net-old/smc-ultra32.c Wed Jun 28 11:38:27 2000
+++ drivers/net/smc-ultra32.c Sat Aug 26 16:16:43 2000
@@ -242,8 +242,11 @@
         int ioaddr = dev->base_addr - ULTRA32_NIC_OFFSET; /* ASIC addr */
         int irq_flags = (inb(ioaddr + ULTRA32_CFG5) & 0x08) ? 0 : SA_SHIRQ;
 
- if (request_irq(dev->irq, ei_interrupt, irq_flags, ei_status.name, dev))
+ MOD_INC_USE_COUNT;
+ if (request_irq(dev->irq, ei_interrupt, irq_flags, ei_status.name, dev)){
+ MOD_DEC_USE_COUNT;
                 return -EAGAIN;
+ }
 
         outb(ULTRA32_MEMENB, ioaddr); /* Enable Shared Memory. */
         outb(0x80, ioaddr + ULTRA32_CFG6); /* Enable Interrupts. */
@@ -254,7 +257,6 @@
         outb_p(E8390_NODMA+E8390_PAGE0, dev->base_addr);
         outb(0xff, dev->base_addr + EN0_ERWCNT);
         ei_open(dev);
- MOD_INC_USE_COUNT;
         return 0;
 }
 
diff -u drivers/net-old/stnic.c drivers/net/stnic.c
--- drivers/net-old/stnic.c Thu Jul 20 03:45:44 2000
+++ drivers/net/stnic.c Sat Aug 26 16:28:04 2000
@@ -153,11 +153,11 @@
 static int
 stnic_open (struct net_device *dev)
 {
+ MOD_INC_USE_COUNT;
 #if 0
   printk ("stnic open\n");
 #endif
   ei_open (dev);
- MOD_INC_USE_COUNT;
   return 0;
 }
 
diff -u drivers/net-old/wd.c drivers/net/wd.c
--- drivers/net-old/wd.c Wed Jun 28 11:38:32 2000
+++ drivers/net/wd.c Sat Aug 26 16:17:00 2000
@@ -313,6 +313,7 @@
 {
   int ioaddr = dev->base_addr - WD_NIC_OFFSET; /* WD_CMDREG */
 
+ MOD_INC_USE_COUNT;
   /* Map in the shared memory. Always set register 0 last to remain
          compatible with very old boards. */
   ei_status.reg0 = ((dev->mem_start>>13) & 0x3f) | WD_MEMENB;
@@ -323,7 +324,6 @@
   outb(ei_status.reg0, ioaddr); /* WD_CMDREG */
 
   ei_open(dev);
- MOD_INC_USE_COUNT;
   return 0;
 }
 

_________________________________________________________
Do You Yahoo!?
Get your free @yahoo.com address at http://mail.yahoo.com

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Thu Aug 31 2000 - 21:00:19 EST