On Mon, 15 Jun 2009, Greg Kroah-Hartman wrote: > From: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> > > This patch (as1245) fixes a bug in ehci-hcd. When an URB is queued > for an endpoint whose QH is already in the LINKED state, the QH > doesn't get refreshed. As a result, if usb_clear_halt() was called > during the time that the QH was linked but idle, the data toggle value > in the QH doesn't get reset. > > The symptom is that after a clear_halt, data gets lost and transfers > time out. This problem is starting to show up now because the > "ehci-hcd unlink speedups" patch causes QHs with no queued URBs to > remain linked for a suitable time. > > The patch utilizes the new endpoint_reset mechanism to fix the > problem. When an endpoint is reset, the new method forcibly unlinks > the QH (if necessary) and safely updates the toggle value. This > allows qh_update() to be simplified and avoids using usb_device's > toggle bits in a rather unintuitive way. This patch is not correct as it stands. It can call schedule_timeout_uninterruptible() while in interrupt context. It needs to be fixed by the followup patch: http://marc.info/?l=linux-usb&m=124474662006206&w=2 I hope this will be sent to Linus before the merge window ends. Alan Stern -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html