[media] v4l2-mem2mem: set the queue owner field just as vb2_ioctl_reqbufs does
authorPhilipp Zabel <p.zabel@pengutronix.de>
Fri, 10 Jul 2015 13:49:25 +0000 (10:49 -0300)
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>
Fri, 17 Jul 2015 15:00:02 +0000 (12:00 -0300)
The queue owner will be used by videobuf2 trace events to determine and
record the device minor number. It is set in v4l2_m2m_reqbufs instead of
v4l2_m2m_ioctl_reqbufs because several drivers implement their own
vidioc_reqbufs handlers that still call v4l2_m2m_reqbufs directly.

Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
drivers/media/v4l2-core/v4l2-mem2mem.c

index dc853e5..af8d6b4 100644 (file)
@@ -357,9 +357,16 @@ int v4l2_m2m_reqbufs(struct file *file, struct v4l2_m2m_ctx *m2m_ctx,
                     struct v4l2_requestbuffers *reqbufs)
 {
        struct vb2_queue *vq;
+       int ret;
 
        vq = v4l2_m2m_get_vq(m2m_ctx, reqbufs->type);
-       return vb2_reqbufs(vq, reqbufs);
+       ret = vb2_reqbufs(vq, reqbufs);
+       /* If count == 0, then the owner has released all buffers and he
+          is no longer owner of the queue. Otherwise we have an owner. */
+       if (ret == 0)
+               vq->owner = reqbufs->count ? file->private_data : NULL;
+
+       return ret;
 }
 EXPORT_SYMBOL_GPL(v4l2_m2m_reqbufs);