Em Wed, Sep 06, 2000 at 05:37:50PM +0100, Tigran Aivazian escreveu:
> On Mon, 4 Sep 2000, Tigran Aivazian wrote:
> 
> > On Fri, 25 Aug 2000, Arnaldo Carvalho de Melo wrote:
> > >   now the driver init sequence is not
> > >   serialized anymore, so races are possible
> > 
> > since when? In 2.4.0-test8-pre2 mod->init and mod->cleanup are called
> > under global kernel lock. As for static drivers they are initialised from
> > either start_kernel() or init()->do_basic_setup() both of which take
> > global kernel lock.
> > 
> 
> Ok, I understand this now - just cheched the cardbus/pcihotplug code.
> 
> Ok, now if you do this, please leave out ne.c and hp100.c - I have the
> cards for these two so I can do it and test it myself.

humm, In fact I've already sent a patch to Paul Gortmaker only, asking
for feedback about the PCI case (that I think should be removed from it,
as ne2k-pci already has this), here it is, maybe it'll help you in the
process.


--- linux-2.4.0-test8-pre1/drivers/net/ne.c     Sat Jul  8 23:38:16 2000
+++ linux-2.4.0-test8-pre1.acme/drivers/net/ne.c        Fri Sep  1 20:13:37 2000
@@ -18,6 +18,7 @@
 
     Changelog:
 
+    Arnaldo Melo       : get rid of check_region
     Paul Gortmaker     : use ENISR_RDC to monitor Tx PIO uploads, made
                          sanity checks and bad clone support optional.
     Paul Gortmaker     : new reset code, reset card after probe at boot.
@@ -211,8 +212,7 @@
        /* Last resort. The semi-risky ISA auto-probe. */
        for (base_addr = 0; netcard_portlist[base_addr] != 0; base_addr++) {
                int ioaddr = netcard_portlist[base_addr];
-               if (check_region(ioaddr, NE_IO_EXTENT))
-                       continue;
+
                if (ne_probe1(dev, ioaddr) == 0)
                        return 0;
        }
@@ -328,13 +328,6 @@
                }
        }
 
-       /* We should have a "dev" from Space.c or the static module table. */
-       if (dev == NULL) 
-       {
-               printk(KERN_ERR "ne.c: Passed a NULL device.\n");
-               dev = init_etherdev(0, 0);
-       }
-
        if (ei_debug  &&  version_printed++ == 0)
                printk(version);
 
@@ -473,6 +466,9 @@
 #endif
        }
 
+       if (!request_region(ioaddr, NE_IO_EXTENT, name))
+               return -EBUSY;
+
        if (pci_irq_line)
                dev->irq = pci_irq_line;
 
@@ -519,7 +515,6 @@
                }
        }
        dev->base_addr = ioaddr;
-       request_region(ioaddr, NE_IO_EXTENT, name);
 
        for(i = 0; i < ETHER_ADDR_LEN; i++) {
                printk(" %2.2x", SA_prom[i]);
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/

Reply via email to