Patch "usb: xhci: Reset halted endpoint if trb is noop" has been added to the 4.13-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
usb: xhci: Reset halted endpoint if trb is noop
to the 4.13-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
usb-xhci-reset-halted-endpoint-if-trb-is-noop.patch
and it can be found in the queue-4.13 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
810a624bd1b64b13ddcc2eb5c1880526a750a870Mon Sep 17 00:00:00 2001
From: Lu Baolu <[email protected]>
Date: Fri, 6 Oct 2017 17:45:29 +0300
Subject: usb: xhci: Reset halted endpoint if trb is noop
From: Lu Baolu <[email protected]>
commit 810a624bd1b64b13ddcc2eb5c1880526a750a870 upstream.
When a URB is cancled, xhci driver turns the untransferred trbs into no-ops. If an endpoint stalls on a no-op trb that belongs to the cancelled URB, the event handler won't reset the endpoint. Hence, it will stay halted.
--- drivers/usb/host/xhci-ring.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-)
drivers/usb/host/xhci-ring.c +13 -7
@@ -2578,15 +2578,21 @@ static int handle_tx_event(struct xhci_h (struct xhci_generic_trb *) ep_trb);/* -* No-op TRB should not trigger interrupts. -* If ep_trb is a no-op TRB, it means the -* corresponding TD has been cancelled. Just ignore -* the TD. +* No-op TRB could trigger interrupts in a case where +* a URB was killed and a STALL_ERROR happens right +* after the endpoint ring stopped. Reset the halted +* endpoint. Otherwise, the endpoint remains stalled +* indefinitely. */ if (trb_is_noop (ep_trb)) { -xhci_dbg (xhci, -"ep_trb is a no-op TRB. Skip it for slot %u ep %u\n" , - slot_id, ep_index); +if (trb_comp_code ==COMP_STALL_ERROR || +xhci_requires_manual_halt_cleanup (xhci, ep_ctx, + trb_comp_code)) +xhci_cleanup_halted_endpoint (xhci, slot_id, + ep_index, + ep_ring->stream_id, + td, ep_trb, +EP_HARD_RESET ); goto cleanup; }
Patches currently in stable-queue which might be from [email protected] are
queue-4.13/usb-xhci-reset-halted-endpoint-if-trb-is-noop.patch