Patch "usb: dwc3: gadget: Don't delay End Transfer on delayed_status" has been added to the 6.0-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

    usb: dwc3: gadget: Don't delay End Transfer on delayed_status

to the 6.0-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-dwc3-gadget-don-t-delay-end-transfer-on-delayed_.patch
and it can be found in the queue-6.0 subdirectory.

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



commit e95380a1117c49f11285c85c1e387ead62ff9f30
Author: Thinh Nguyen <Thinh.Nguyen@xxxxxxxxxxxx>
Date:   Tue Oct 18 19:39:01 2022 -0700

    usb: dwc3: gadget: Don't delay End Transfer on delayed_status
    
    commit 4db0fbb601361767144e712beb96704b966339f5 upstream.
    
    The gadget driver may wait on the request completion when it sets the
    USB_GADGET_DELAYED_STATUS. Make sure that the End Transfer command can
    go through if the dwc->delayed_status is set so that the request can
    complete. When the delayed_status is set, the Setup packet is already
    processed, and the next phase should be either Data or Status. It's
    unlikely that the host would cancel the control transfer and send a new
    Setup packet during End Transfer command. But if that's the case, we can
    try again when ep0state returns to EP0_SETUP_PHASE.
    
    Fixes: e1ee843488d5 ("usb: dwc3: gadget: Force sending delayed status during soft disconnect")
    Cc: stable@xxxxxxxxxxxxxxx
    Signed-off-by: Thinh Nguyen <Thinh.Nguyen@xxxxxxxxxxxx>
    Link: https://lore.kernel.org/r/3f9f59e5d74efcbaee444cf4b30ef639cc7b124e.1666146954.git.Thinh.Nguyen@xxxxxxxxxxxx
    Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index 530ef3232418..0ed9826a4c47 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -3712,7 +3712,7 @@ void dwc3_stop_active_transfer(struct dwc3_ep *dep, bool force,
 	 * timeout. Delay issuing the End Transfer command until the Setup TRB is
 	 * prepared.
 	 */
-	if (dwc->ep0state != EP0_SETUP_PHASE) {
+	if (dwc->ep0state != EP0_SETUP_PHASE && !dwc->delayed_status) {
 		dep->flags |= DWC3_EP_DELAY_STOP;
 		return;
 	}



[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