Hi Greg and Felipe,
Thinh Nguyen wrote:
We can only check for IN direction if the request had completed. For OUT direction, it's perfectly fine that the host can send less than the setup length. Let's return true fall all cases of OUT direction.
Fixes: e0c42ce590fe ("usb: dwc3: gadget: simplify IOC handling")
Cc: stable@vger.kernel.org Signed-off-by: Thinh Nguyen thinhn@synopsys.com
drivers/usb/dwc3/gadget.c | 7 +++++++ 1 file changed, 7 insertions(+)
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index b3f8514d1f27..edc478c20846 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -2470,6 +2470,13 @@ static int dwc3_gadget_ep_reclaim_trb_linear(struct dwc3_ep *dep, static bool dwc3_gadget_ep_request_completed(struct dwc3_request *req) {
- /*
* For OUT direction, host may send less than the setup
* length. Return true for all OUT requests.
*/
- if (!req->direction)
return true;
- return req->request.actual == req->request.length; }
Not sure if it's too late, but after Tejas's patch* that fixes the SG check in dwc3, it exposes another issue. Without this patch, quite a few function drivers will not work with dwc3.
If we can pick it up before the next merge, it'd be great.
Thanks, Thinh
*Patch on Greg's branch usb-linus: 8c7d4b7b3d43 ("usb: dwc3: gadget: Fix logical condition")