If hcd_endpoint_disable() is called at the same time that an URB is submitted for that endpoint, there is a nasty race. hcd_endpoint_disable() sets the endpoint maxpacket size to 0, in order to prevent further submissions. But meanwhile, the HC driver is trying to packetize the original request into maxpacket-sized packets. If maxpacket is 0, the driver will hang.
This patch fixes the problem for UHCI. Something equivalent is needed for the other HC drivers. Alan Stern ===== uhci-hcd.c 1.59 vs edited ===== --- 1.59/drivers/usb/host/uhci-hcd.c Wed Aug 6 14:49:27 2003 +++ edited/drivers/usb/host/uhci-hcd.c Fri Aug 8 10:29:57 2003 @@ -806,6 +806,9 @@ int len = urb->transfer_buffer_length; dma_addr_t data = urb->transfer_dma; + if (maxsze <= 0) + return -EMSGSIZE; + /* The "pipe" thing contains the destination in bits 8--18 */ destination = (urb->pipe & PIPE_DEVEP_MASK) | USB_PID_SETUP; @@ -1080,6 +1083,8 @@ if (len < 0) return -EINVAL; + if (maxsze <= 0) + return -EMSGSIZE; /* The "pipe" thing contains the destination in bits 8--18 */ destination = (urb->pipe & PIPE_DEVEP_MASK) | usb_packetid(urb->pipe); ------------------------------------------------------- This SF.Net email sponsored by: Free pre-built ASP.NET sites including Data Reports, E-commerce, Portals, and Forums are available now. Download today and enter to win an XBOX or Visual Studio .NET. http://aspnet.click-url.com/go/psa00100003ave/direct;at.aspnet_072303_01/01 _______________________________________________ [EMAIL PROTECTED] To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel