Messages in this thread | | | Date | Sun, 29 Mar 2020 21:02:44 +0200 | From | Michael Grzeschik <> | Subject | Re: [PATCH] usb: dwc3: gadget: don't dequeue requests on already disabled endpoints |
| |
On Sat, Mar 28, 2020 at 10:27:49AM +0200, Felipe Balbi wrote: > > Hi, > > Michael Grzeschik <m.grzeschik@pengutronix.de> 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 <m.grzeschik@pengutronix.de> > > --- > > @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 | [unhandled content-type:application/pgp-signature] | |