Re: [RFC] my current kernel todo list

From: Arnaldo Carvalho de Melo (acme@conectiva.com.br)
Date: Wed Sep 06 2000 - 11:36:37 EST


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 majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Thu Sep 07 2000 - 21:00:26 EST