Skip to contentSkip to conversation

FAILED: patch "[PATCH] xhci: Set URB actual length for stopped control transfers" failed to apply to 4.4-stable tree

PATCH [email protected] 1 participant 1 message Apr 3, 2017

Subsystems (3)
lore
Share & tools
lore

[email protected]

author maintainer
#0 lore raw

The patch below does not apply to the 4.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.

thanks,

greg k-h

------------------ original commit in Linus's tree ------------------

Quoted 1 line

From 0ab2881a406b9fd46224a3e8253bbc0141b4f844 Mon Sep 17 00:00:00 2001

From: Mathias Nyman <[email protected]>
Date: Tue, 28 Mar 2017 15:55:29 +0300
Subject: [PATCH] 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.

drivers/usb/host/xhci-ring.c +3 -0
index d9936c771fa0..a3309aa02993 100644
@@ -1989,6 +1989,9 @@ static int process_ctrl_td(struct xhci_hcd *xhci, struct xhci_td *td,
 		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);