All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sylwester Nawrocki <s.nawrocki@samsung.com>
To: Marek Szyprowski <m.szyprowski@samsung.com>,
	Tomasz Stanislawski <t.stanislaws@samsung.com>
Cc: Philipp Zabel <p.zabel@pengutronix.de>,
	linux-media@vger.kernel.org,
	Mauro Carvalho Chehab <mchehab@redhat.com>,
	Pawel Osciak <pawel@osciak.com>,
	Hans Verkuil <hans.verkuil@cisco.com>,
	Kyungmin Park <kyungmin.park@samsung.com>
Subject: Re: [PATCH] [media] v4l: vb2-dma-contig: add support for file access mode flags for DMABUF exporting
Date: Wed, 11 Sep 2013 11:56:39 +0200	[thread overview]
Message-ID: <52303E57.8070102@samsung.com> (raw)
In-Reply-To: <1369123895-10574-1-git-send-email-p.zabel@pengutronix.de>

Tomasz, Marek,

Can you review/ack this patch ? I can't see nothing wrong in it and
it has been sat on the ML for quite long. I would add it to my pull
request once it is reviewed.

Thanks,
Sylwester

On 05/21/2013 10:11 AM, Philipp Zabel wrote:
> Currently it is not possible for userspace to map a DMABUF exported buffer
> with write permissions. This patch allows to also pass O_RDONLY/O_RDWR when
> exporting the buffer, so that userspace may map it with write permissions.
> 
> Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
> ---
>  Documentation/DocBook/media/v4l/vidioc-expbuf.xml | 8 +++++---
>  drivers/media/v4l2-core/videobuf2-core.c          | 8 ++++----
>  drivers/media/v4l2-core/videobuf2-dma-contig.c    | 4 ++--
>  include/media/videobuf2-core.h                    | 2 +-
>  4 files changed, 12 insertions(+), 10 deletions(-)
> 
> diff --git a/Documentation/DocBook/media/v4l/vidioc-expbuf.xml b/Documentation/DocBook/media/v4l/vidioc-expbuf.xml
> index e287c8f..4165e7b 100644
> --- a/Documentation/DocBook/media/v4l/vidioc-expbuf.xml
> +++ b/Documentation/DocBook/media/v4l/vidioc-expbuf.xml
> @@ -73,7 +73,8 @@ range from zero to the maximal number of valid planes for the currently active
>  format. For the single-planar API, applications must set <structfield> plane
>  </structfield> to zero.  Additional flags may be posted in the <structfield>
>  flags </structfield> field.  Refer to a manual for open() for details.
> -Currently only O_CLOEXEC is supported.  All other fields must be set to zero.
> +Currently only O_CLOEXEC, O_RDONLY, O_WRONLY, and O_RDWR are supported.  All
> +other fields must be set to zero.
>  In the case of multi-planar API, every plane is exported separately using
>  multiple <constant> VIDIOC_EXPBUF </constant> calls. </para>
>  
> @@ -170,8 +171,9 @@ multi-planar API. Otherwise this value must be set to zero. </entry>
>  	    <entry>__u32</entry>
>  	    <entry><structfield>flags</structfield></entry>
>  	    <entry>Flags for the newly created file, currently only <constant>
> -O_CLOEXEC </constant> is supported, refer to the manual of open() for more
> -details.</entry>
> +O_CLOEXEC </constant>, <constant>O_RDONLY</constant>, <constant>O_WRONLY
> +</constant>, and <constant>O_RDWR</constant> are supported, refer to the manual
> +of open() for more details.</entry>
>  	  </row>
>  	  <row>
>  	    <entry>__s32</entry>
> diff --git a/drivers/media/v4l2-core/videobuf2-core.c b/drivers/media/v4l2-core/videobuf2-core.c
> index 7d833ee..5f7ae44 100644
> --- a/drivers/media/v4l2-core/videobuf2-core.c
> +++ b/drivers/media/v4l2-core/videobuf2-core.c
> @@ -1785,8 +1785,8 @@ int vb2_expbuf(struct vb2_queue *q, struct v4l2_exportbuffer *eb)
>  		return -EINVAL;
>  	}
>  
> -	if (eb->flags & ~O_CLOEXEC) {
> -		dprintk(1, "Queue does support only O_CLOEXEC flag\n");
> +	if (eb->flags & ~(O_CLOEXEC | O_ACCMODE)) {
> +		dprintk(1, "Queue does support only O_CLOEXEC and access mode flags\n");
>  		return -EINVAL;
>  	}
>  
> @@ -1809,14 +1809,14 @@ int vb2_expbuf(struct vb2_queue *q, struct v4l2_exportbuffer *eb)
>  
>  	vb_plane = &vb->planes[eb->plane];
>  
> -	dbuf = call_memop(q, get_dmabuf, vb_plane->mem_priv);
> +	dbuf = call_memop(q, get_dmabuf, vb_plane->mem_priv, eb->flags & O_ACCMODE);
>  	if (IS_ERR_OR_NULL(dbuf)) {
>  		dprintk(1, "Failed to export buffer %d, plane %d\n",
>  			eb->index, eb->plane);
>  		return -EINVAL;
>  	}
>  
> -	ret = dma_buf_fd(dbuf, eb->flags);
> +	ret = dma_buf_fd(dbuf, eb->flags & ~O_ACCMODE);
>  	if (ret < 0) {
>  		dprintk(3, "buffer %d, plane %d failed to export (%d)\n",
>  			eb->index, eb->plane, ret);
> diff --git a/drivers/media/v4l2-core/videobuf2-dma-contig.c b/drivers/media/v4l2-core/videobuf2-dma-contig.c
> index fd56f25..e443df5 100644
> --- a/drivers/media/v4l2-core/videobuf2-dma-contig.c
> +++ b/drivers/media/v4l2-core/videobuf2-dma-contig.c
> @@ -393,7 +393,7 @@ static struct sg_table *vb2_dc_get_base_sgt(struct vb2_dc_buf *buf)
>  	return sgt;
>  }
>  
> -static struct dma_buf *vb2_dc_get_dmabuf(void *buf_priv)
> +static struct dma_buf *vb2_dc_get_dmabuf(void *buf_priv, unsigned long flags)
>  {
>  	struct vb2_dc_buf *buf = buf_priv;
>  	struct dma_buf *dbuf;
> @@ -404,7 +404,7 @@ static struct dma_buf *vb2_dc_get_dmabuf(void *buf_priv)
>  	if (WARN_ON(!buf->sgt_base))
>  		return NULL;
>  
> -	dbuf = dma_buf_export(buf, &vb2_dc_dmabuf_ops, buf->size, 0);
> +	dbuf = dma_buf_export(buf, &vb2_dc_dmabuf_ops, buf->size, flags);
>  	if (IS_ERR(dbuf))
>  		return NULL;
>  
> diff --git a/include/media/videobuf2-core.h b/include/media/videobuf2-core.h
> index d88a098..41709a8 100644
> --- a/include/media/videobuf2-core.h
> +++ b/include/media/videobuf2-core.h
> @@ -83,7 +83,7 @@ struct vb2_fileio_data;
>  struct vb2_mem_ops {
>  	void		*(*alloc)(void *alloc_ctx, unsigned long size, gfp_t gfp_flags);
>  	void		(*put)(void *buf_priv);
> -	struct dma_buf *(*get_dmabuf)(void *buf_priv);
> +	struct dma_buf *(*get_dmabuf)(void *buf_priv, unsigned long flags);
>  
>  	void		*(*get_userptr)(void *alloc_ctx, unsigned long vaddr,
>  					unsigned long size, int write);
> 


-- 
Sylwester Nawrocki
Samsung R&D Institute Poland

  reply	other threads:[~2013-09-11  9:56 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-05-21  8:11 [PATCH] [media] v4l: vb2-dma-contig: add support for file access mode flags for DMABUF exporting Philipp Zabel
2013-09-11  9:56 ` Sylwester Nawrocki [this message]
2013-10-08 10:06   ` Philipp Zabel
2013-10-19 19:03     ` Sylwester Nawrocki

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=52303E57.8070102@samsung.com \
    --to=s.nawrocki@samsung.com \
    --cc=hans.verkuil@cisco.com \
    --cc=kyungmin.park@samsung.com \
    --cc=linux-media@vger.kernel.org \
    --cc=m.szyprowski@samsung.com \
    --cc=mchehab@redhat.com \
    --cc=p.zabel@pengutronix.de \
    --cc=pawel@osciak.com \
    --cc=t.stanislaws@samsung.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.