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-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html