Hi Paul, Thank you for the patch. On Tuesday, 24 April 2018 23:59:36 EEST Paul Elder wrote: > Down the call stack from the ioctl handler for VIDIOC_STREAMON, > uvc_video_alloc_requests contains a BUG_ON, which in the high level, > triggers when VIDIOC_STREAMON ioctl is issued without VIDIOC_STREAMOFF > being issued previously. > > This can also be triggered by starting the stream and then physically > disconnecting usb. To fix this, do the streamoff procedures on usb > disconnect. > > Signed-off-by: Paul Elder <paul.elder@xxxxxxxxxxxxxxxx> > --- > Changes in v2: Nothing > > drivers/usb/gadget/function/f_uvc.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/drivers/usb/gadget/function/f_uvc.c > b/drivers/usb/gadget/function/f_uvc.c index fa34dcbe1197..5bb79888e3f7 > 100644 > --- a/drivers/usb/gadget/function/f_uvc.c > +++ b/drivers/usb/gadget/function/f_uvc.c > @@ -374,9 +374,12 @@ uvc_function_disable(struct usb_function *f) > { > struct uvc_device *uvc = to_uvc(f); > struct v4l2_event v4l2_event; > + struct uvc_video *video = &uvc->video; > > INFO(f->config->cdev, "uvc_function_disable\n"); > > + uvcg_video_enable(video, 0); > + As commented in my reply to patch 2/3, you will need to protect this with proper locking. You now have at least four events dealing with states and buffers allocation (VIDIOC_STREAMON, VIDIOC_STREAMOFF, uvc_function_set_alt and uvc_function_disable). > memset(&v4l2_event, 0, sizeof(v4l2_event)); > v4l2_event.type = UVC_EVENT_DISCONNECT; > v4l2_event_queue(&uvc->vdev, &v4l2_event); -- Regards, Laurent Pinchart -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html