Subject: Re: More braindead code
To: Jason Thorpe <thorpej@nas.nasa.gov>
From: Lennart Augustsson <lennart@augustsson.net>
List: tech-kern
Date: 01/15/2000 03:01:32
Jason Thorpe wrote:

> On Fri, 14 Jan 2000 13:20:18 +0100
>  Lennart Augustsson <lennart@augustsson.net> wrote:
>
>  > Again, I can't believe my eyes!  There is code in there that may loop for up to 500ms
>  > using delay().  I.e. the kernel will busy wait for 0.5s.  And looking a little further the I
>  > see that it can loop for 0.1s during reset.  I've not checked, but the only reason for
>  > using delay() rather than tsleep() is that these routines are called from an interrupt
>  > context, which in my opinion makes using delay() even more unforgivable since it may
>  > block important interrupts.
>  > Clearly, the MII code needs a little restructuring to get rid of these atrocities.
>  >
>
> Look a little more carefully... when it's called from ANY context other than
> via ioctl, it's all asynchronous; no busy-wait.

OK, so if it only busy waits from ioctl, which I assume occur from process context,
why not use tsleep() instead of delay?  It's not like a few extra ms of waiting matters
here.


> I'm doing some work on the MII code currently, to make it even MORE asynch,
> but between moving to a new house and vacation, I haven't gotten it finished
> yet.

As I indicated in an earlier mail, I'd like all method calls (downcalls, or whatever
you want to call them) to occur from a process context.  Otherwise I cannot make
the USB adapters work.  Unless we accept long delay()s.

Bill Paul has written three Ethernet-USB drivers.  They cover all know USB-Ethernet
adapters, and I'm working on getting them into NetBSD.  But I refuse to commit the
hacks he used to make it work; they involve using delay().


--

        -- Lennart