From: Greg Kroah-Hartman Date: Mon, 9 Jan 2023 12:54:02 +0000 (+0100) Subject: 6.0-stable patches X-Git-Tag: v5.15.87~48 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=870220741ae139417ec4a053eb1453e8bd37cda1;p=thirdparty%2Fkernel%2Fstable-queue.git 6.0-stable patches added patches: usb-dwc3-gadget-ignore-end-transfer-delay-on-teardown.patch --- diff --git a/queue-6.0/series b/queue-6.0/series index 67ce78e43b3..c673aa408d8 100644 --- a/queue-6.0/series +++ b/queue-6.0/series @@ -2,3 +2,4 @@ arm-renumber-bits-related-to-_tif_work_mask.patch btrfs-replace-strncpy-with-strscpy.patch cifs-fix-interface-count-calculation-during-refresh.patch cifs-refcount-only-the-selected-iface-during-interface-update.patch +usb-dwc3-gadget-ignore-end-transfer-delay-on-teardown.patch diff --git a/queue-6.0/usb-dwc3-gadget-ignore-end-transfer-delay-on-teardown.patch b/queue-6.0/usb-dwc3-gadget-ignore-end-transfer-delay-on-teardown.patch new file mode 100644 index 00000000000..c7f613a30cd --- /dev/null +++ b/queue-6.0/usb-dwc3-gadget-ignore-end-transfer-delay-on-teardown.patch @@ -0,0 +1,56 @@ +From c4e3ef5685393c5051b52cf1e94b8891d49793ab Mon Sep 17 00:00:00 2001 +From: Thinh Nguyen +Date: Thu, 8 Dec 2022 16:50:35 -0800 +Subject: usb: dwc3: gadget: Ignore End Transfer delay on teardown + +From: Thinh Nguyen + +commit c4e3ef5685393c5051b52cf1e94b8891d49793ab upstream. + +If we delay sending End Transfer for Setup TRB to be prepared, we need +to check if the End Transfer was in preparation for a driver +teardown/soft-disconnect. In those cases, just send the End Transfer +command without delay. + +In the case of soft-disconnect, there's a very small chance the command +may not go through immediately. But should it happen, the Setup TRB will +be prepared during the polling of the controller halted state, allowing +the command to go through then. + +In the case of disabling endpoint due to reconfiguration (e.g. +set_interface(alt-setting) or usb reset), then it's driven by the host. +Typically the host wouldn't immediately cancel the control request and +send another control transfer to trigger the End Transfer command +timeout. + +Fixes: 4db0fbb60136 ("usb: dwc3: gadget: Don't delay End Transfer on delayed_status") +Cc: stable@vger.kernel.org +Signed-off-by: Thinh Nguyen +Link: https://lore.kernel.org/r/f1617a323e190b9cc408fb8b65456e32b5814113.1670546756.git.Thinh.Nguyen@synopsys.com +Signed-off-by: Greg Kroah-Hartman +--- + drivers/usb/dwc3/gadget.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +--- a/drivers/usb/dwc3/gadget.c ++++ b/drivers/usb/dwc3/gadget.c +@@ -1702,6 +1702,7 @@ static int __dwc3_stop_active_transfer(s + else if (!ret) + dep->flags |= DWC3_EP_END_TRANSFER_PENDING; + ++ dep->flags &= ~DWC3_EP_DELAY_STOP; + return ret; + } + +@@ -3701,8 +3702,10 @@ void dwc3_stop_active_transfer(struct dw + if (dep->number <= 1 && dwc->ep0state != EP0_DATA_PHASE) + return; + ++ if (interrupt && (dep->flags & DWC3_EP_DELAY_STOP)) ++ return; ++ + if (!(dep->flags & DWC3_EP_TRANSFER_STARTED) || +- (dep->flags & DWC3_EP_DELAY_STOP) || + (dep->flags & DWC3_EP_END_TRANSFER_PENDING)) + return; +