All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hans Verkuil <hverkuil@xs4all.nl>
To: Tomasz Stanislawski <t.stanislaws@samsung.com>
Cc: linux-media@vger.kernel.org, dri-devel@lists.freedesktop.org,
	airlied@redhat.com, m.szyprowski@samsung.com,
	kyungmin.park@samsung.com, laurent.pinchart@ideasonboard.com,
	sumit.semwal@ti.com, daeinki@gmail.com, daniel.vetter@ffwll.ch,
	robdclark@gmail.com, pawel@osciak.com,
	linaro-mm-sig@lists.linaro.org, remi@remlab.net,
	subashrp@gmail.com, mchehab@redhat.com, zhangfei.gao@gmail.com,
	s.nawrocki@samsung.com, k.debski@samsung.com,
	Sumit Semwal <sumit.semwal@linaro.org>
Subject: Re: [PATCHv9 03/25] v4l: vb2: add support for shared buffer (dma_buf)
Date: Fri, 5 Oct 2012 10:17:35 +0200	[thread overview]
Message-ID: <201210051017.35297.hverkuil@xs4all.nl> (raw)
In-Reply-To: <1349188056-4886-4-git-send-email-t.stanislaws@samsung.com>

Just a small heads-up for an upcoming change...

On Tue October 2 2012 16:27:14 Tomasz Stanislawski wrote:
> From: Sumit Semwal <sumit.semwal@ti.com>
> 
> This patch adds support for DMABUF memory type in videobuf2. It calls relevant
> APIs of dma_buf for v4l reqbuf / qbuf / dqbuf operations.
> 
> For this version, the support is for videobuf2 as a user of the shared buffer;
> so the allocation of the buffer is done outside of V4L2. [A sample allocator of
> dma-buf shared buffer is given at [1]]
> 
> [1]: Rob Clark's DRM:
>    https://github.com/robclark/kernel-omap4/commits/drmplane-dmabuf
> 
> Signed-off-by: Tomasz Stanislawski <t.stanislaws@samsung.com>
>    [original work in the PoC for buffer sharing]
> Signed-off-by: Sumit Semwal <sumit.semwal@ti.com>
> Signed-off-by: Sumit Semwal <sumit.semwal@linaro.org>
> Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> ---
>  drivers/media/video/Kconfig          |    1 +
>  drivers/media/video/videobuf2-core.c |  207 +++++++++++++++++++++++++++++++++-
>  include/media/videobuf2-core.h       |   27 +++++
>  3 files changed, 232 insertions(+), 3 deletions(-)
> 

<snip>

> @@ -970,6 +1040,109 @@ static int __qbuf_mmap(struct vb2_buffer *vb, const struct v4l2_buffer *b)
>  }
>  
>  /**
> + * __qbuf_dmabuf() - handle qbuf of a DMABUF buffer
> + */
> +static int __qbuf_dmabuf(struct vb2_buffer *vb, const struct v4l2_buffer *b)
> +{
> +	struct v4l2_plane planes[VIDEO_MAX_PLANES];
> +	struct vb2_queue *q = vb->vb2_queue;
> +	void *mem_priv;
> +	unsigned int plane;
> +	int ret;
> +	int write = !V4L2_TYPE_IS_OUTPUT(q->type);
> +
> +	/* Verify and copy relevant information provided by the userspace */
> +	ret = __fill_vb2_buffer(vb, b, planes);

Note that this code will have to change a bit when my multiplanar fixes go in:

http://www.spinics.net/lists/linux-media/msg54601.html

__fill_vb2_buffer is now a void function, so there won't be any need to check
the error.

> +	if (ret)
> +		return ret;
> +
> +	for (plane = 0; plane < vb->num_planes; ++plane) {
> +		struct dma_buf *dbuf = dma_buf_get(planes[plane].m.fd);
> +
> +		if (IS_ERR_OR_NULL(dbuf)) {
> +			dprintk(1, "qbuf: invalid dmabuf fd for plane %d\n",
> +				plane);
> +			ret = -EINVAL;
> +			goto err;
> +		}
> +
> +		/* use DMABUF size if length is not provided */
> +		if (planes[plane].length == 0)
> +			planes[plane].length = dbuf->size;
> +
> +		if (planes[plane].length < planes[plane].data_offset +
> +		    q->plane_sizes[plane]) {
> +			ret = -EINVAL;
> +			goto err;
> +		}
> +
> +		/* Skip the plane if already verified */
> +		if (dbuf == vb->planes[plane].dbuf &&
> +		    vb->v4l2_planes[plane].length == planes[plane].length) {
> +			dma_buf_put(dbuf);
> +			continue;
> +		}
> +
> +		dprintk(1, "qbuf: buffer for plane %d changed\n", plane);
> +
> +		/* Release previously acquired memory if present */
> +		__vb2_plane_dmabuf_put(q, &vb->planes[plane]);
> +		memset(&vb->v4l2_planes[plane], 0, sizeof(struct v4l2_plane));
> +
> +		/* Acquire each plane's memory */
> +		mem_priv = call_memop(q, attach_dmabuf, q->alloc_ctx[plane],
> +			dbuf, planes[plane].length, write);
> +		if (IS_ERR(mem_priv)) {
> +			dprintk(1, "qbuf: failed to attach dmabuf\n");
> +			ret = PTR_ERR(mem_priv);
> +			dma_buf_put(dbuf);
> +			goto err;
> +		}
> +
> +		vb->planes[plane].dbuf = dbuf;
> +		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)..
> +	 */
> +	for (plane = 0; plane < vb->num_planes; ++plane) {
> +		ret = call_memop(q, map_dmabuf, vb->planes[plane].mem_priv);
> +		if (ret) {
> +			dprintk(1, "qbuf: failed to map dmabuf for plane %d\n",
> +				plane);
> +			goto err;
> +		}
> +		vb->planes[plane].dbuf_mapped = 1;
> +	}
> +
> +	/*
> +	 * Call driver-specific initialization on the newly acquired buffer,
> +	 * if provided.
> +	 */
> +	ret = call_qop(q, buf_init, vb);
> +	if (ret) {
> +		dprintk(1, "qbuf: buffer initialization failed\n");
> +		goto err;
> +	}
> +
> +	/*
> +	 * Now that everything is in order, copy relevant information
> +	 * provided by userspace.
> +	 */
> +	for (plane = 0; plane < vb->num_planes; ++plane)
> +		vb->v4l2_planes[plane] = planes[plane];
> +
> +	return 0;
> +err:
> +	/* In case of errors, release planes that were already acquired */
> +	__vb2_buf_dmabuf_put(vb);
> +
> +	return ret;
> +}

  reply	other threads:[~2012-10-05  8:18 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-10-02 14:27 [PATCHv9 00/25] Integration of videobuf2 with DMABUF Tomasz Stanislawski
2012-10-02 14:27 ` [PATCHv9 01/25] v4l: Add DMABUF as a memory type Tomasz Stanislawski
2012-10-02 14:27 ` [PATCHv9 02/25] Documentation: media: description of DMABUF importing in V4L2 Tomasz Stanislawski
2012-10-05  8:05   ` Hans Verkuil
2012-10-02 14:27 ` [PATCHv9 03/25] v4l: vb2: add support for shared buffer (dma_buf) Tomasz Stanislawski
2012-10-05  8:17   ` Hans Verkuil [this message]
2012-10-02 14:27 ` [PATCHv9 04/25] v4l: vb: remove warnings about MEMORY_DMABUF Tomasz Stanislawski
2012-10-02 14:27 ` [PATCHv9 05/25] v4l: vb2-dma-contig: shorten vb2_dma_contig prefix to vb2_dc Tomasz Stanislawski
2012-10-02 14:27 ` [PATCHv9 06/25] v4l: vb2-dma-contig: remove reference of alloc_ctx from a buffer Tomasz Stanislawski
2012-10-02 14:27 ` [PATCHv9 07/25] v4l: vb2-dma-contig: reorder functions Tomasz Stanislawski
2012-10-02 14:27 ` [PATCHv9 08/25] v4l: vb2-dma-contig: add support for scatterlist in userptr mode Tomasz Stanislawski
2012-10-02 14:27 ` [PATCHv9 09/25] v4l: vb2: add prepare/finish callbacks to allocators Tomasz Stanislawski
2012-10-05  8:22   ` Hans Verkuil
2012-10-02 14:27 ` [PATCHv9 10/25] v4l: vb2-dma-contig: add prepare/finish to dma-contig allocator Tomasz Stanislawski
2012-10-02 14:27 ` [PATCHv9 11/25] v4l: vb2-dma-contig: add support for dma_buf importing Tomasz Stanislawski
2012-10-02 14:27 ` [PATCHv9 12/25] v4l: vb2-vmalloc: add support for dmabuf importing Tomasz Stanislawski
2012-10-02 14:27 ` [PATCHv9 13/25] v4l: vivi: " Tomasz Stanislawski
2012-10-02 14:27 ` [PATCHv9 14/25] v4l: s5p-tv: mixer: " Tomasz Stanislawski
2012-10-02 14:27 ` [PATCHv9 15/25] v4l: s5p-fimc: " Tomasz Stanislawski
2012-10-02 14:27 ` [PATCHv9 16/25] v4l: vb2-dma-contig: let mmap method to use dma_mmap_coherent call Tomasz Stanislawski
2012-10-02 14:27 ` [PATCHv9 17/25] Documentation: media: description of DMABUF exporting in V4L2 Tomasz Stanislawski
2012-10-05  8:44   ` Hans Verkuil
2012-10-02 14:27 ` [PATCHv9 18/25] v4l: add buffer exporting via dmabuf Tomasz Stanislawski
2012-10-05  8:55   ` Hans Verkuil
2012-10-07 13:38     ` Laurent Pinchart
2012-10-07 14:17       ` Hans Verkuil
2012-10-08  9:40         ` Tomasz Stanislawski
2012-10-08  9:54           ` Hans Verkuil
2012-10-08 10:41             ` Tomasz Stanislawski
2012-10-08 11:15               ` Hans Verkuil
2012-10-02 14:27 ` [PATCHv9 19/25] v4l: vb2: " Tomasz Stanislawski
2012-10-06 12:22   ` Hans Verkuil
2012-10-10 14:05     ` Tomasz Stanislawski
2012-10-02 14:27 ` [PATCHv9 20/25] v4l: vb2-dma-contig: add support for DMABUF exporting Tomasz Stanislawski
2012-10-07 13:38   ` Laurent Pinchart
2012-10-02 14:27 ` [PATCHv9 21/25] v4l: vb2-dma-contig: add reference counting for a device from allocator context Tomasz Stanislawski
2012-10-07 13:38   ` Laurent Pinchart
2012-10-02 14:27 ` [PATCHv9 22/25] v4l: vb2-dma-contig: fail if user ptr buffer is not correctly aligned Tomasz Stanislawski
2012-10-07 13:38   ` Laurent Pinchart
2012-10-02 14:27 ` [PATCHv9 23/25] v4l: s5p-fimc: support for dmabuf exporting Tomasz Stanislawski
2012-10-02 14:27 ` [PATCHv9 24/25] v4l: s5p-tv: mixer: " Tomasz Stanislawski
2012-10-02 14:27 ` [PATCHv9 25/25] v4l: s5p-mfc: " Tomasz Stanislawski
2012-10-05  9:24 ` [PATCHv9 00/25] Integration of videobuf2 with DMABUF Hans Verkuil
2012-10-07 10:03 ` Hans Verkuil
2012-10-10 10:54 ` Mauro Carvalho Chehab
2012-10-10 11:11   ` [Linaro-mm-sig] " Kyungmin Park
2012-10-10 11:11     ` Kyungmin Park
2012-10-10 13:34   ` Laurent Pinchart

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=201210051017.35297.hverkuil@xs4all.nl \
    --to=hverkuil@xs4all.nl \
    --cc=airlied@redhat.com \
    --cc=daeinki@gmail.com \
    --cc=daniel.vetter@ffwll.ch \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=k.debski@samsung.com \
    --cc=kyungmin.park@samsung.com \
    --cc=laurent.pinchart@ideasonboard.com \
    --cc=linaro-mm-sig@lists.linaro.org \
    --cc=linux-media@vger.kernel.org \
    --cc=m.szyprowski@samsung.com \
    --cc=mchehab@redhat.com \
    --cc=pawel@osciak.com \
    --cc=remi@remlab.net \
    --cc=robdclark@gmail.com \
    --cc=s.nawrocki@samsung.com \
    --cc=subashrp@gmail.com \
    --cc=sumit.semwal@linaro.org \
    --cc=sumit.semwal@ti.com \
    --cc=t.stanislaws@samsung.com \
    --cc=zhangfei.gao@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.