Message ID | 20200701093137.19485-4-m.grzeschik@pengutronix.de (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | usb: dwc3: gadget: improve isoc handling | expand |
On 01.07.2020 12:31, Michael Grzeschik wrote: > When we have nothing left to be queued after handling the last trb > we have to stop the current transfer. This way we can ensure that > the next request will be queued with an new and valid timestamp s/an/a/. > and will not directly run into an missed xfer. > > Reviewed-by: Thinh Nguyen <thinhn@synopsys.com> > Signed-off-by: Michael Grzeschik <m.grzeschik@pengutronix.de> [...] MBR, Sergei
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index a2145f905d67067..24aafacc2b5b344 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -2738,7 +2738,9 @@ static bool dwc3_gadget_endpoint_trbs_complete(struct dwc3_ep *dep, if (dep->flags & DWC3_EP_END_TRANSFER_PENDING) goto out; - if (status == -EXDEV && list_empty(&dep->started_list)) + if (usb_endpoint_xfer_isoc(dep->endpoint.desc) && + list_empty(&dep->started_list) && + (list_empty(&dep->pending_list) || status == -EXDEV)) dwc3_stop_active_transfer(dep, true, true); else if (dwc3_gadget_ep_should_continue(dep)) if (__dwc3_gadget_kick_transfer(dep) == 0)