summaryrefslogtreecommitdiff
path: root/drivers/usb/core
diff options
context:
space:
mode:
authorAlan Stern <stern@rowland.harvard.edu>2014-07-17 16:34:29 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2014-09-05 16:34:12 -0700
commit774710c90e906c0984b45f9591835a577f8e80f9 (patch)
treeb672129712835df6afffe234518e98cd8f1d6325 /drivers/usb/core
parentf9fd934da7adc03cb8d341a4ae4ffac038b5adff (diff)
downloadlwn-774710c90e906c0984b45f9591835a577f8e80f9.tar.gz
lwn-774710c90e906c0984b45f9591835a577f8e80f9.zip
USB: OHCI: don't lose track of EDs when a controller dies
commit 977dcfdc60311e7aa571cabf6f39c36dde13339e upstream. This patch fixes a bug in ohci-hcd. When an URB is unlinked, the corresponding Endpoint Descriptor is added to the ed_rm_list and taken off the hardware schedule. Once the ED is no longer visible to the hardware, finish_unlinks() handles the URBs that were unlinked or have completed. If any URBs remain attached to the ED, the ED is added back to the hardware schedule -- but only if the controller is running. This fails when a controller dies. A non-empty ED does not get added back to the hardware schedule and does not remain on the ed_rm_list; ohci-hcd loses track of it. The remaining URBs cannot be unlinked, which causes the USB stack to hang. The patch changes finish_unlinks() so that non-empty EDs remain on the ed_rm_list if the controller isn't running. This requires moving some of the existing code around, to avoid modifying the ED's hardware fields more than once. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/usb/core')
0 files changed, 0 insertions, 0 deletions