cvs commit: src/sys/dev/usb ugen.c

Brian Fundakowski Feldman green at freebsd.org
Wed Sep 8 10:45:10 PDT 2004


On Wed, Sep 08, 2004 at 11:21:00AM -0600, M. Warner Losh wrote:
> In message: <20040908152956.GD928 at green.homeunix.org>
>             Brian Fundakowski Feldman <green at freebsd.org> writes:
> : On Wed, Sep 08, 2004 at 08:32:15AM -0600, M. Warner Losh wrote:
> : > In message: <20040908130741.GC928 at green.homeunix.org>
> : >             Brian Fundakowski Feldman <green at FreeBSD.ORG> writes:
> : > : On Wed, Sep 08, 2004 at 01:20:31AM -0600, M. Warner Losh wrote:
> : > : > In message: <200409080713.i887Dd54058789 at repoman.freebsd.org>
> : > : >             Warner Losh <imp at FreeBSD.org> writes:
> : > : > : imp         2004-09-08 07:13:39 UTC
> : > : > : 
> : > : > :   FreeBSD src repository
> : > : > : 
> : > : > :   Modified files:
> : > : > :     sys/dev/usb          ugen.c 
> : > : > :   Log:
> : > : > :   Back out 1.88.
> : > : >              1.87 I mean.
> : > : > :   The reference counts are there to block detach until the sleepers in
> : > : > :   read/write/ioctl have gotten out, not to prevent the open device from
> : > : > :   going away.  Restore the old behavior so that we have a chance to wake
> : > : > :   up sleepers when the usb device goes away, so they can properly return
> : > : > :   EIO back to the caller when this happens.
> : > : > :   
> : > : > :   Otherwise, we have a guarnateed panic waiting to happen when a device
> : > : > :   detaches with an active read channel.
> : > : > :   
> : > : > :   This should be merged to 5 asap.
> : > : 
> : > : Now I'll get guaranteed panics using both my Palm and any CardBus hardware.
> : > 
> : > Can you send me a traceback for that problem then?  The 'reference
> : > count' here is very much supposed to be a 'how many sleepers do you
> : > have' sort of thing and is present in nearly all of the usb drivers.
> : 
> : No, I'd prefer not to have to crash my machine more.  It already does that
> : (or hangs, or whatever) in -CURRENT often enough.
> : 
> : (Holding breath for open sourced Solaris.)
> 
> Brian,
> 
> 	Since I backed out your fix, that puts me on the hook to fix
> the problem that you made the change for.  If you provide me with some
> information about how to reproduce it, I'll be happy to look into the
> problem.  The above is only enough to let me guess at what might be
> going on.
> 
> I'm sorry I committed without talking to you first, but the above
> change cost myself and my boss a couple of days of debugging time on
> one of our products that keeps ugen open to monitor it until it goes
> away.  I was understandably grumpy at having my time wasted like this
> when I discovered why things broke :-(.

Why would you get a panic at detach if the refcount is held for every
open channel?  Whether or not a read is in progress, the reference
held for the entirety of the channel being open should help.  I don't
see how you would _not_ get the EIO in any place you would have gotten
it before.  If you destroy the device before the device is closed
then subsequent d_close() calls are going to crash when the freed
softc is referenced.

If I had to name every bug or misfeature I had to spend countless hours
trying to find and fix, I would be sitting here unhappy for a very long
time, too.

-- 
Brian Fundakowski Feldman                           \'[ FreeBSD ]''''''''''\
  <> green at FreeBSD.org                               \  The Power to Serve! \
 Opinions expressed are my own.                       \,,,,,,,,,,,,,,,,,,,,,,\


More information about the cvs-src mailing list