patch "usb: xhci: Reset halted endpoint if trb is noop" added to usb-linus
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 my usb git tree which can be found at
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git
in the usb-linus branch.
The patch will show up in the next release of the linux-next tree (usually sometime within the next 24 hours during the week.)
The patch will hopefully also be merged in Linus's tree for the next -rc kernel release.
If you have any questions about this process, please let me know.
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
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
@@ -2580,15 +2580,21 @@ static int handle_tx_event(struct xhci_hcd *xhci, (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; }
Signature · 1 line
2.14.2