> > Or in other words, if the guard is against unloading the completion
> > handler, which is a part of the driver, the code to do it cannot be in
> > the completion handler.
> > It has to be in another module or must be under the big kernel lock.
>
> I'd been more thinking about having the disconnect() not race against
> the completion handler, but I do see this other point.
>
> BKL is not a realistic option here.  Which would leave this as some usbcore
> role, except that it doesn't explicitly know which module makes each
> request.

It could be included into usb_unlink_urb() which is called under BKL
from disconnect().

> One possible solution:  submit urbs to a "struct usb_interface *" (and
> endpoint), and update that structure so that it's bound to current device
> configurations.  We already believe that it needs mem_flags ... the old API
> could be a wrapper around this new/preferred API.  Then the "hcd.c" layer
> could do something like call __MOD_INC_USE_COUNT(intf->driver->owner) when
> an URB is
> submitted (a handful of instructions), __MOD_DEC_USE_COUNT(owner)
> when the completion function returns.

Sorry, no.
This would break horribly for drivers which use the method of providing
a function pointer to the module subsystem to check for unloadability.
I am afraid there has to be an explicit method of waiting.

        Regards
                Oliver

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

Reply via email to