From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from mailout3.samsung.com ([203.254.224.33]:61426 "EHLO mailout3.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754956Ab2IXMq4 (ORCPT ); Mon, 24 Sep 2012 08:46:56 -0400 From: Marek Szyprowski To: 'Federico Vaga' , 'Mauro Carvalho Chehab' , 'Pawel Osciak' , 'Hans Verkuil' Cc: 'Giancarlo Asnaghi' , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, 'Jonathan Corbet' References: <1348484332-8106-1-git-send-email-federico.vaga@gmail.com> In-reply-to: <1348484332-8106-1-git-send-email-federico.vaga@gmail.com> Subject: RE: [PATCH v3 1/4] v4l: vb2: add prepare/finish callbacks to allocators Date: Mon, 24 Sep 2012 14:46:42 +0200 Message-id: <055a01cd9a52$a87ad370$f9707a50$%szyprowski@samsung.com> MIME-version: 1.0 Content-type: text/plain; charset=us-ascii Content-transfer-encoding: 7bit Content-language: pl Sender: linux-media-owner@vger.kernel.org List-ID: 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 -->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 > Acked-by: Laurent Pinchart > Acked-by: Federico Vaga > --- > 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