aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/usb/host/xhci-ring.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
index 800f417c7309..0c008497edfd 100644
--- a/drivers/usb/host/xhci-ring.c
+++ b/drivers/usb/host/xhci-ring.c
@@ -2063,6 +2063,20 @@ static int handle_tx_event(struct xhci_hcd *xhci,
2063 /* Is this a TRB in the currently executing TD? */ 2063 /* Is this a TRB in the currently executing TD? */
2064 event_seg = trb_in_td(ep_ring->deq_seg, ep_ring->dequeue, 2064 event_seg = trb_in_td(ep_ring->deq_seg, ep_ring->dequeue,
2065 td->last_trb, event_dma); 2065 td->last_trb, event_dma);
2066
2067 /*
2068 * Skip the Force Stopped Event. The event_trb(event_dma) of FSE
2069 * is not in the current TD pointed by ep_ring->dequeue because
2070 * that the hardware dequeue pointer still at the previous TRB
2071 * of the current TD. The previous TRB maybe a Link TD or the
2072 * last TRB of the previous TD. The command completion handle
2073 * will take care the rest.
2074 */
2075 if (!event_seg && trb_comp_code == COMP_STOP_INVAL) {
2076 ret = 0;
2077 goto cleanup;
2078 }
2079
2066 if (!event_seg) { 2080 if (!event_seg) {
2067 if (!ep->skip || 2081 if (!ep->skip ||
2068 !usb_endpoint_xfer_isoc(&td->urb->ep->desc)) { 2082 !usb_endpoint_xfer_isoc(&td->urb->ep->desc)) {