Patch "xhci: retry Stop Endpoint on buggy NEC controllers" has been added to the 5.15-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    xhci: retry Stop Endpoint on buggy NEC controllers

to the 5.15-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:
     xhci-retry-stop-endpoint-on-buggy-nec-controllers.patch
and it can be found in the queue-5.15 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 6094e5dc8fd4b1a5dfc70d75be3995e55717a3f8
Author: Michal Pecio <michal.pecio@xxxxxxxxx>
Date:   Thu Feb 29 16:14:36 2024 +0200

    xhci: retry Stop Endpoint on buggy NEC controllers
    
    [ Upstream commit fd9d55d190c0e5fefd3a9165ea361809427885a1 ]
    
    Two NEC uPD720200 adapters have been observed to randomly misbehave:
    a Stop Endpoint command fails with Context Error, the Output Context
    indicates Stopped state, and the endpoint keeps running. Very often,
    Set TR Dequeue Pointer is seen to fail next with Context Error too,
    in addition to problems from unexpectedly completed cancelled work.
    
    The pathology is common on fast running isoc endpoints like uvcvideo,
    but has also been reproduced on a full-speed bulk endpoint of pl2303.
    It seems all EPs are affected, with risk proportional to their load.
    
    Reproduction involves receiving any kind of stream and closing it to
    make the device driver cancel URBs already queued in advance.
    
    Deal with it by retrying the command like in the Running state.
    
    Signed-off-by: Michal Pecio <michal.pecio@xxxxxxxxx>
    Signed-off-by: Mathias Nyman <mathias.nyman@xxxxxxxxxxxxxxx>
    Link: https://lore.kernel.org/r/20240229141438.619372-8-mathias.nyman@xxxxxxxxxxxxxxx
    Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
    Stable-dep-of: e21ebe51af68 ("xhci: Turn NEC specific quirk for handling Stop Endpoint errors generic")
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
index 5e880f0bdd8a..29faa2d5c766 100644
--- a/drivers/usb/host/xhci-ring.c
+++ b/drivers/usb/host/xhci-ring.c
@@ -1148,6 +1148,15 @@ static void xhci_handle_cmd_stop_ep(struct xhci_hcd *xhci, int slot_id,
 				break;
 			xhci_stop_watchdog_timer_in_irq(xhci, ep);
 			return;
+		case EP_STATE_STOPPED:
+			/*
+			 * NEC uPD720200 sometimes sets this state and fails with
+			 * Context Error while continuing to process TRBs.
+			 * Be conservative and trust EP_CTX_STATE on other chips.
+			 */
+			if (!(xhci->quirks & XHCI_NEC_HOST))
+				break;
+			fallthrough;
 		case EP_STATE_RUNNING:
 			/* Race, HW handled stop ep cmd before ep was running */
 			xhci_dbg(xhci, "Stop ep completion ctx error, ep is running\n");




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux