> 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