From: Alan Stern Date: Thu, 17 Jul 2014 20:34:29 +0000 (-0400) Subject: USB: OHCI: don't lose track of EDs when a controller dies X-Git-Tag: omap-for-v3.17/fixes-against-rc2~164^2~31 X-Git-Url: http://git.openpandora.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=977dcfdc60311e7aa571cabf6f39c36dde13339e;p=pandora-kernel.git USB: OHCI: don't lose track of EDs when a controller dies 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 CC: Signed-off-by: Greg Kroah-Hartman --- Reading git-diff-tree failed