> My question is basically, where is the true problem?
>
> a) usb subsystem for allowing usb-storage to claim an already claimed interface
> b) usb subsystem for allowing usbdevfs to claim an interface while probing is
> going on
> c) usb-storage for not claiming interface once its committed to driving the
> device
> d) usbdevfs for not detecting that it no longer has the interface
> e) vmware for not following the correct procedure for claiming a device (if so
> what is the correct procedure)
> f) no problem at all. this is as designed
The simplest answer is (b):
(b) usb_find_interface_driver() uses the dev->serialize semaphore
for exclusion, but usbdevfs uses the BKL instead.
I think the quick fix would be make usbdevfs use dev->serialize
like find_interface_driver(), and document that as a requrement in
the calling convention for that routine.
But that doesn't seem like it can be complete. Any access to an
interface's bound driver -- read, claim, or release -- needs some
kind of mutual exclusion. But:
- usb_drivers_purge() uses driver->serialize while calling
disconnect()
- usb_disconnect() does the same (driver->serialize)
I don't see how it can be correct to have one set of driver
entries use one lock and the other use a different one, when
they're both affecting the interface bindings. I think it'd be
more correct to use only dev->serialize.
- Dave
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel