On Sat, Mar 28, 2020 at 10:27:49AM +0200, Felipe Balbi wrote: > > Hi, > > Michael Grzeschik writes: > > dwc3_gadget_ep_disable gets called before the last request gets > > dequeued. > > > > In __dwc3_gadget_ep_disable all started, pending and cancelled > > lists for this endpoint will call dwc3_gadget_giveback in > > dwc3_remove_requests. > > > > After that no list containing the afterwards dequed request, > > therefor it is not necessary to run the dequeue routine. > > > > Signed-off-by: Michael Grzeschik > > --- > > @Lars-Peter Clausen: > > > > This patch addresses the case that not queued requests get dequeued. > > The only case that this happens seems on disabling the gadget. > > > > drivers/usb/dwc3/gadget.c | 3 +++ > > 1 file changed, 3 insertions(+) > > > > diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c > > index 9a6f741d1db0dc..5d4fa8d6c93e49 100644 > > --- a/drivers/usb/dwc3/gadget.c > > +++ b/drivers/usb/dwc3/gadget.c > > @@ -1609,6 +1609,9 @@ static int dwc3_gadget_ep_dequeue(struct usb_ep *ep, > > > > trace_dwc3_ep_dequeue(req); > > > > + if (!(dep->flags & DWC3_EP_ENABLED)) > > + return 0; > > which driver is trying to call dequeue after the endpoint is disabled? > Got some tracepoints of the problem happening? I see the case when using uvc-gadget. Look into uvc_v4l2_release in uvc_v4l2.c: uvc_function_disconnect composite_disconnect reset_config uvc_function_disable->usb_ep_disable uvcg_video_enable usb_ep_dequeue dwc3_gadget_ep_dequeue Regards, Michael -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |