| From a45cdd1c2e0fc7ad3a81d25a3603c42f2363460d Mon Sep 17 00:00:00 2001 |
| From: Mathias Nyman <mathias.nyman@linux.intel.com> |
| Date: Tue, 28 Mar 2017 15:55:29 +0300 |
| Subject: [PATCH 215/255] xhci: Set URB actual length for stopped control |
| transfers |
| |
| A control transfer that stopped at the status stage incorrectly |
| warned about a "unexpected TRB Type 4", and did not set the |
| transferred actual_length for the URB. |
| |
| The URB actual_length for control transfers should contain the |
| bytes transferred in the data stage. |
| |
| Bytes of a partially sent setup stage and missing bytes from |
| status stage should be left out. |
| |
| Cc: <stable@vger.kernel.org> |
| Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| (cherry picked from commit 0ab2881a406b9fd46224a3e8253bbc0141b4f844) |
| Signed-off-by: Simon Horman <horms+renesas@verge.net.au> |
| --- |
| drivers/usb/host/xhci-ring.c | 3 +++ |
| 1 file changed, 3 insertions(+) |
| |
| --- a/drivers/usb/host/xhci-ring.c |
| +++ b/drivers/usb/host/xhci-ring.c |
| @@ -1992,6 +1992,9 @@ static int process_ctrl_td(struct xhci_h |
| case TRB_NORMAL: |
| td->urb->actual_length = requested - remaining; |
| goto finish_td; |
| + case TRB_STATUS: |
| + td->urb->actual_length = requested; |
| + goto finish_td; |
| default: |
| xhci_warn(xhci, "WARN: unexpected TRB Type %d\n", |
| trb_type); |