[lkml]   [2019]   [Dec]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
Patch in this message
Subject[PATCH] usb: dwc3: gadget: Fix failure to detect end of transfer
A recent bugfix 8c7d4b7b3d43 ("usb: dwc3: gadget: Fix logical condition")
correctly fixes a logical error in the gadget driver but, exposes a further
bug in determining when a transfer has completed.

Prior to 8c7d4b7b3d43 we were calling dwc3_gadget_giveback() when we
shouldn't have been. Afer this change the below test fails to complete on
my hardware.

echo "host" > /dev/ttyACM0

cat < /dev/ttyGS0

This is caused by the driver incorrectly detecting end of transfer, a
problem that had previous been masked by the continuous calling of
dwc3_gadget_giveback() prior to 8c7d4b7b3d43.

Remediate by making the test <= instead of ==

Fixes: e0c42ce590fe ("usb: dwc3: gadget: simplify IOC handling")

Signed-off-by: Bryan O'Donoghue <>
drivers/usb/dwc3/gadget.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index 0c960a97ea02..464c4d9961c7 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -2467,7 +2467,7 @@ static int dwc3_gadget_ep_reclaim_trb_linear(struct dwc3_ep *dep,

static bool dwc3_gadget_ep_request_completed(struct dwc3_request *req)
- return req->request.actual == req->request.length;
+ return req->request.actual <= req->request.length;

static int dwc3_gadget_ep_cleanup_completed_request(struct dwc3_ep *dep,
 \ /
  Last update: 2019-12-30 17:14    [W:0.029 / U:14.372 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site