Johannes: A bug has turned up in the UHCI driver. Briefly, when an URB completes, uhci_transfer_result() doesn't store the status in urb->status but only in urbp->status. urb->status is set just before calling hcd_giveback_urb().
However, the hcd glue layer uses urb->status == -EINPROGRESS as a test for whether or not to allow the URB to be unlinked. As a result, it's possible to unlink an URB after it has completed and is already on the urb_complete_list. This causes severe problems. My suggestion is to set urb->status along with urbp->status in uhci_transfer_result(). In fact, looking through the code it appears that urbp->status is completely unnecessary, since it should pretty much always be equal to urb->status. Is there any reason for keeping urbp->status? Alan Stern P.S.: In addition, when URBs are dequeued, they should be added to the _tail_ of remove_list. That way the completion handlers will be called in the order the URBs were unlinked. ------------------------------------------------------- This SF.net email is sponsored by: VM Ware With VMware you can run multiple operating systems on a single machine. WITHOUT REBOOTING! Mix Linux / Windows / Novell virtual machines at the same time. Free trial click here: http://www.vmware.com/wl/offer/345/0 _______________________________________________ [EMAIL PROTECTED] To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel