diff options
author | Mathias Nyman <mathias.nyman@linux.intel.com> | 2014-11-27 11:19:16 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2014-12-02 19:14:29 -0500 |
commit | d97b4f8d690b9fc0e7dd4f4ff5aaea838254e350 (patch) | |
tree | 31e5cb937bee36a831880baabd0c48ed61971b46 /drivers/usb/host/xhci.c | |
parent | 4801d4ea559440b7d63babdac1b1b43a13ac7562 (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.c | 6 |
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 | ||
2914 | void xhci_cleanup_stalled_ring(struct xhci_hcd *xhci, | 2914 | void 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; |