> 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

Reply via email to