RE: [PATCH v3 1/4] v4l: vb2: add prepare/finish callbacks to allocators

From: Marek Szyprowski
Date: Mon Sep 24 2012 - 08:46:47 EST


Hello,

It would be great if you could keep the correct authorship of the patch by adding the following
line on top of the patch (git will handle it automatically after applying):

-->8--
From: Marek Szyprowski <m.szyprowski@xxxxxxxxxxx>
-->8--

On Monday, September 24, 2012 12:59 PM Federico Vaga wrote:

> This patch adds support for prepare/finish callbacks in VB2 allocators.
> These callback are used for buffer flushing.
>
> Signed-off-by: Marek Szyprowski <m.szyprowski@xxxxxxxxxxx>
> Acked-by: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx>
> Acked-by: Federico Vaga <federico.vaga@xxxxxxxxx>
> ---
> drivers/media/v4l2-core/videobuf2-core.c | 11 +++++++++++
> include/media/videobuf2-core.h | 7 +++++++
> 2 file modificati, 18 inserzioni(+)
>
> diff --git a/drivers/media/v4l2-core/videobuf2-core.c b/drivers/media/v4l2-core/videobuf2-
> core.c
> index 4da3df6..079fa79 100644
> --- a/drivers/media/v4l2-core/videobuf2-core.c
> +++ b/drivers/media/v4l2-core/videobuf2-core.c
> @@ -790,6 +790,7 @@ void vb2_buffer_done(struct vb2_buffer *vb, enum vb2_buffer_state state)
> {
> struct vb2_queue *q = vb->vb2_queue;
> unsigned long flags;
> + unsigned int plane;
>
> if (vb->state != VB2_BUF_STATE_ACTIVE)
> return;
> @@ -800,6 +801,10 @@ void vb2_buffer_done(struct vb2_buffer *vb, enum vb2_buffer_state state)
> dprintk(4, "Done processing on buffer %d, state: %d\n",
> vb->v4l2_buf.index, vb->state);
>
> + /* sync buffers */
> + for (plane = 0; plane < vb->num_planes; ++plane)
> + call_memop(q, finish, vb->planes[plane].mem_priv);
> +
> /* Add the buffer to the done buffers list */
> spin_lock_irqsave(&q->done_lock, flags);
> vb->state = state;
> @@ -975,9 +980,15 @@ static int __qbuf_mmap(struct vb2_buffer *vb, const struct v4l2_buffer
> *b)
> static void __enqueue_in_driver(struct vb2_buffer *vb)
> {
> struct vb2_queue *q = vb->vb2_queue;
> + unsigned int plane;
>
> vb->state = VB2_BUF_STATE_ACTIVE;
> atomic_inc(&q->queued_count);
> +
> + /* sync buffers */
> + for (plane = 0; plane < vb->num_planes; ++plane)
> + call_memop(q, prepare, vb->planes[plane].mem_priv);
> +
> q->ops->buf_queue(vb);
> }
>
> diff --git a/include/media/videobuf2-core.h b/include/media/videobuf2-core.h
> index 8dd9b6c..2508609 100644
> --- a/include/media/videobuf2-core.h
> +++ b/include/media/videobuf2-core.h
> @@ -41,6 +41,10 @@ struct vb2_fileio_data;
> * argument to other ops in this structure
> * @put_userptr: inform the allocator that a USERPTR buffer will no longer
> * be used
> + * @prepare: called every time the buffer is passed from userspace to the
> + * driver, usefull for cache synchronisation, optional
> + * @finish: called every time the buffer is passed back from the driver
> + * to the userspace, also optional
> * @vaddr: return a kernel virtual address to a given memory buffer
> * associated with the passed private structure or NULL if no
> * such mapping exists
> @@ -65,6 +69,9 @@ struct vb2_mem_ops {
> unsigned long size, int write);
> void (*put_userptr)(void *buf_priv);
>
> + void (*prepare)(void *buf_priv);
> + void (*finish)(void *buf_priv);
> +
> void *(*vaddr)(void *buf_priv);
> void *(*cookie)(void *buf_priv);
>
> --
> 1.7.11.4

Best regards
--
Marek Szyprowski
Samsung Poland R&D Center


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/