diff options
author | Javier Martinez Canillas <javier@osg.samsung.com> | 2016-07-20 13:18:25 -0300 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@s-opensource.com> | 2016-08-24 10:09:33 -0300 |
commit | 82019205e3a8fc687c4ee6538b57039884be4ccc (patch) | |
tree | 16615f54210aa02443d3726e431d393ea2aa401c /drivers/media/v4l2-core | |
parent | 14150723659af133e4b205ccf6ff8d93c1384014 (diff) | |
download | blackbird-op-linux-82019205e3a8fc687c4ee6538b57039884be4ccc.tar.gz blackbird-op-linux-82019205e3a8fc687c4ee6538b57039884be4ccc.zip |
[media] vb2: remove TODO comment for dma-buf in QBUF
There is a TODO comment about the dma-buf being mapped in VIDIOC_QBUF
instead of doing it closer to when the actual DMA is going to happen
when the buffers are queued in the driver (i.e: __enqueue_in_driver).
But there is a reason to do it earlier in QBUF, and is that userspace
has no way to know if a exported dma-buf can be imported successfully
and so relies on QBUF succeeding as indication that the dma-buf mapped.
If QBUF fails, the application can fallback to another streaming I/O
method. But moving the dma-buf mapping later when queueing the buffers
can be too late for userspace to recover, since it may had dropped the
buffer(s) already when it knows that the dma-buf mapping failed.
So remove the TODO instead and change the comment to explain this.
Suggested-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Javier Martinez Canillas <javier@osg.samsung.com>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Diffstat (limited to 'drivers/media/v4l2-core')
-rw-r--r-- | drivers/media/v4l2-core/videobuf2-core.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/drivers/media/v4l2-core/videobuf2-core.c b/drivers/media/v4l2-core/videobuf2-core.c index 3d595186309a..f50ff6f33c6f 100644 --- a/drivers/media/v4l2-core/videobuf2-core.c +++ b/drivers/media/v4l2-core/videobuf2-core.c @@ -1273,9 +1273,10 @@ static int __qbuf_dmabuf(struct vb2_buffer *vb, const void *pb) vb->planes[plane].mem_priv = mem_priv; } - /* TODO: This pins the buffer(s) with dma_buf_map_attachment()).. but - * really we want to do this just before the DMA, not while queueing - * the buffer(s).. + /* + * This pins the buffer(s) with dma_buf_map_attachment()). It's done + * here instead just before the DMA, while queueing the buffer(s) so + * userspace knows sooner rather than later if the dma-buf map fails. */ for (plane = 0; plane < vb->num_planes; ++plane) { ret = call_memop(vb, map_dmabuf, vb->planes[plane].mem_priv); |