[SRU][Precise] Revert "xhci: don't finish a TD if we get a short transfer event mid TD"
Luis Henriques
luis.henriques at canonical.com
Fri Jan 8 11:12:05 UTC 2016
BugLink: https://bugs.launchpad.net/bugs/1529077
This reverts commit cd775cea7767dc609c449072eb4c16fd1ce0048c, which was
commit e210c422b6fdd2dc123bedc588f399aefd8bf9de upstream.
This commit is causing a regression in mainline kernel and in several
stable kernels that included it. Here's some links for more bug reports:
https://bugs.debian.org/808602
https://bugs.debian.org/808953
Signed-off-by: Luis Henriques <luis.henriques at canonical.com>
---
drivers/usb/host/xhci-ring.c | 10 ----------
1 file changed, 10 deletions(-)
diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
index 9f57111a3e43..5fdb85fba447 100644
--- a/drivers/usb/host/xhci-ring.c
+++ b/drivers/usb/host/xhci-ring.c
@@ -2187,10 +2187,6 @@ static int process_bulk_intr_td(struct xhci_hcd *xhci, struct xhci_td *td,
EVENT_TRB_LEN(le32_to_cpu(event->transfer_len)));
/* Fast path - was this the last TRB in the TD for this URB? */
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 -
@@ -2242,12 +2238,6 @@ static int process_bulk_intr_td(struct xhci_hcd *xhci, struct xhci_td *td,
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);
More information about the kernel-team
mailing list