USB: EHCI: update toggle state for linked QHs
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. Signed-off-by:Alan Stern <stern@rowland.harvard.edu> CC: David Brownell <david-b@pacbell.net> Tested-by:
David <david@unsolicited.net> Signed-off-by:
Greg Kroah-Hartman <gregkh@suse.de>
Showing
- drivers/usb/host/ehci-au1xxx.c 1 addition, 0 deletionsdrivers/usb/host/ehci-au1xxx.c
- drivers/usb/host/ehci-fsl.c 1 addition, 0 deletionsdrivers/usb/host/ehci-fsl.c
- drivers/usb/host/ehci-hcd.c 45 additions, 0 deletionsdrivers/usb/host/ehci-hcd.c
- drivers/usb/host/ehci-ixp4xx.c 1 addition, 0 deletionsdrivers/usb/host/ehci-ixp4xx.c
- drivers/usb/host/ehci-orion.c 1 addition, 0 deletionsdrivers/usb/host/ehci-orion.c
- drivers/usb/host/ehci-pci.c 1 addition, 0 deletionsdrivers/usb/host/ehci-pci.c
- drivers/usb/host/ehci-ppc-of.c 1 addition, 0 deletionsdrivers/usb/host/ehci-ppc-of.c
- drivers/usb/host/ehci-ps3.c 1 addition, 0 deletionsdrivers/usb/host/ehci-ps3.c
- drivers/usb/host/ehci-q.c 1 addition, 18 deletionsdrivers/usb/host/ehci-q.c
Loading
Please register or sign in to comment