From: Ben Hutchings Date: Sat, 02 Jan 2016 03:03:27 +0000 Subject: Revert "xhci: don't finish a TD if we get a short transfer event mid TD" Bug-Debian: https://bugs.debian.org/808602 Bug-Debian: https://bugs.debian.org/808953 This reverts commit dbd81f75b991c972970764ba75287cbbc8f066be, which was commit e210c422b6fdd2dc123bedc588f399aefd8bf9de upstream. It caused serious regressions as referenced above. --- --- a/drivers/usb/host/xhci-ring.c +++ b/drivers/usb/host/xhci-ring.c @@ -2191,10 +2191,6 @@ static int process_bulk_intr_td(struct x } /* Fast path - was this the last TRB in the TD for this URB? */ } else if (event_trb == td->last_trb) { - if (td->urb_length_set && trb_comp_code == COMP_SHORT_TX) - return finish_td(xhci, td, event_trb, event, ep, - status, false); - if (EVENT_TRB_LEN(le32_to_cpu(event->transfer_len)) != 0) { td->urb->actual_length = td->urb->transfer_buffer_length - @@ -2246,12 +2242,6 @@ static int process_bulk_intr_td(struct x td->urb->actual_length += TRB_LEN(le32_to_cpu(cur_trb->generic.field[2])) - EVENT_TRB_LEN(le32_to_cpu(event->transfer_len)); - - if (trb_comp_code == COMP_SHORT_TX) { - xhci_dbg(xhci, "mid bulk/intr SP, wait for last TRB event\n"); - td->urb_length_set = true; - return 0; - } } return finish_td(xhci, td, event_trb, event, ep, status, false);