aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/host/xhci.c
diff options
context:
space:
mode:
authorMathias Nyman <mathias.nyman@linux.intel.com>2014-11-27 11:19:16 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2014-12-02 19:14:29 -0500
commitd97b4f8d690b9fc0e7dd4f4ff5aaea838254e350 (patch)
tree31e5cb937bee36a831880baabd0c48ed61971b46 /drivers/usb/host/xhci.c
parent4801d4ea559440b7d63babdac1b1b43a13ac7562 (diff)
xhci: don't use the same variable for stopped and halted rings current TD
Endpoints halted on errors, and endpoints stopped manually both used the same ep->stopped_td to store the halted or stopped td. this causes confusion and possible races. There is no longer a need to use the ep->stopped_td variable to store the halted TD. A halted endpoint is handled immediately and we can pass it to the handling function directly. Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/usb/host/xhci.c')
-rw-r--r--drivers/usb/host/xhci.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
index 0ea7e12d4765..5be1bff9b4eb 100644
--- a/drivers/usb/host/xhci.c
+++ b/drivers/usb/host/xhci.c
@@ -2912,10 +2912,11 @@ static void xhci_setup_input_ctx_for_quirk(struct xhci_hcd *xhci,
2912} 2912}
2913 2913
2914void xhci_cleanup_stalled_ring(struct xhci_hcd *xhci, 2914void xhci_cleanup_stalled_ring(struct xhci_hcd *xhci,
2915 struct usb_device *udev, unsigned int ep_index) 2915 unsigned int ep_index, struct xhci_td *td)
2916{ 2916{
2917 struct xhci_dequeue_state deq_state; 2917 struct xhci_dequeue_state deq_state;
2918 struct xhci_virt_ep *ep; 2918 struct xhci_virt_ep *ep;
2919 struct usb_device *udev = td->urb->dev;
2919 2920
2920 xhci_dbg_trace(xhci, trace_xhci_dbg_reset_ep, 2921 xhci_dbg_trace(xhci, trace_xhci_dbg_reset_ep,
2921 "Cleaning up stalled endpoint ring"); 2922 "Cleaning up stalled endpoint ring");
@@ -2924,8 +2925,7 @@ void xhci_cleanup_stalled_ring(struct xhci_hcd *xhci,
2924 * or it will attempt to resend it on the next doorbell ring. 2925 * or it will attempt to resend it on the next doorbell ring.
2925 */ 2926 */
2926 xhci_find_new_dequeue_state(xhci, udev->slot_id, 2927 xhci_find_new_dequeue_state(xhci, udev->slot_id,
2927 ep_index, ep->stopped_stream, ep->stopped_td, 2928 ep_index, ep->stopped_stream, td, &deq_state);
2928 &deq_state);
2929 2929
2930 if (!deq_state.new_deq_ptr || !deq_state.new_deq_seg) 2930 if (!deq_state.new_deq_ptr || !deq_state.new_deq_seg)
2931 return; 2931 return;