Am Donnerstag, 24. Oktober 2002 00:19 schrieb David Brownell:
> > The problem is not NULL but a pointer to freed memory.
> > The correct sequence in the driver is:
> > down(mutex_with_disconnect);
> > if (privat->device_is_still_present)
> >     usb_submit_urb(urb);
> > up(mutex_with_disconnect);
>
> More like:
>
>   submit (even in completion callbacks) by
>     grabbing driver lock
>     if device in driver state is null
>        status = fail
>     else
>        status = submit urb
>        if submit succeeded
>           store urb where disconnect will see it
>     release driver lock
>
>   disconnect by
>     grabbing driver lock
>     device handle in driver state = null
>     release driver lock
>     unlink all the submitted urbs, synchronous is simplest
>     ... further cleanup
>
> So no urb will ever be submitted (or resubmitted) after the
> driver's disconnect() is called, and nobody's waltzing down
> an invalid urb->dev pointer because the initial values stay
> valid until disconnect() returns.
>
> This shouldn't need to involve a semaphore, I don't know why
> you keep going back to blocking primitives guarding submission
> (which is commonly done in_interrupt); that should be a driver
> policy choice.  Sometimes a binary semaphore (mutex) will be
> the right answer, other times it'll need to be a spinlock.

The exact nature of the lock is of little significance.
Sorry if that's the source of confusion. I was thinking of
a semaphore because the initial idea was taking it around synchronous
helpers as well, which cannot use a spinlock.

The important thing is that the locking cannot be shifted into usbcore
as I'd like to do, and that automatic unlinking of urbs by usbcore
must happen after driver->disconnect().
I'd like to gather as much common code as possible. Thus this frustrates
me.

        Regards
                Oliver



-------------------------------------------------------
This sf.net email is sponsored by: Influence the future
of Java(TM) technology. Join the Java Community
Process(SM) (JCP(SM)) program now.
http://ads.sourceforge.net/cgi-bin/redirect.pl?sunm0002en

_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to