diff options
author | Alan Stern <stern@rowland.harvard.edu> | 2014-07-17 16:34:29 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2014-07-17 17:05:07 -0700 |
commit | 977dcfdc60311e7aa571cabf6f39c36dde13339e (patch) | |
tree | bb095c9bce743969f99fc368aaeeac4c498042e4 /security | |
parent | 256dbcd80f1ccf8abf421c1d72ba79a4e29941dd (diff) | |
download | blackbird-obmc-linux-977dcfdc60311e7aa571cabf6f39c36dde13339e.tar.gz blackbird-obmc-linux-977dcfdc60311e7aa571cabf6f39c36dde13339e.zip |
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 <stern@rowland.harvard.edu>
CC: <stable@vger.kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'security')
0 files changed, 0 insertions, 0 deletions