Hi Michael, Thanks for the patch. On Saturday 09 February 2013 00:54:54 Michael Grzeschik wrote: > Those optional operations are used to release and reacquire the queue > lock when videobuf2 needs to perform operations that sleep for a long > time, such as waiting for a buffer to be complete. Implement them to > avoid blocking qbuf or streamoff calls when a dqbuf is in progress. > > Signed-off-by: Michael Grzeschik <m.grzeschik@xxxxxxxxxxxxxx> Acked-by: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx> I've taken the patch in my tree and will wait for v4 of [1] before pushing it upstream. > --- > This patch is based on the host side patch [1] and makes > sense on the device side of the uvc framework as well. > > [1] http://patchwork.linuxtv.org/patch/16379/ > > drivers/usb/gadget/uvc_queue.c | 16 ++++++++++++++++ > 1 file changed, 16 insertions(+) > > diff --git a/drivers/usb/gadget/uvc_queue.c b/drivers/usb/gadget/uvc_queue.c > index bd20fab..a9ddf24 100644 > --- a/drivers/usb/gadget/uvc_queue.c > +++ b/drivers/usb/gadget/uvc_queue.c > @@ -103,10 +103,26 @@ static void uvc_buffer_queue(struct vb2_buffer *vb) > spin_unlock_irqrestore(&queue->irqlock, flags); > } > > +static void uvc_wait_prepare(struct vb2_queue *vq) > +{ > + struct uvc_video_queue *queue = vb2_get_drv_priv(vq); > + > + mutex_unlock(&queue->mutex); > +} > + > +static void uvc_wait_finish(struct vb2_queue *vq) > +{ > + struct uvc_video_queue *queue = vb2_get_drv_priv(vq); > + > + mutex_lock(&queue->mutex); > +} > + > static struct vb2_ops uvc_queue_qops = { > .queue_setup = uvc_queue_setup, > .buf_prepare = uvc_buffer_prepare, > .buf_queue = uvc_buffer_queue, > + .wait_prepare = uvc_wait_prepare, > + .wait_finish = uvc_wait_finish, > }; > > static int uvc_queue_init(struct uvc_video_queue *queue, -- 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