I'm tempted to call this new api ion_share_dma_buf and rename the old one to ion_share_dma_buf_fd while the number of users is still small.  I think it's clearer.  Otherwise this patch looks good.

Thoughts?

Rebecca

On Mon, Jan 7, 2013 at 5:38 AM, Johan Mossberg <johan.mossberg@stericsson.com> wrote:
Hi Rebecca,

Is this patch accepted for ion mainline or do you have more comments/questions?

/Johan Mossberg

On 12/13/2012 10:24 AM, Johan Mossberg wrote:
> ion_share_dma_buf_kernel enables you to share ion buffers via dma buf
> for kernel only use cases. Useful for example when a GPU driver using
> ion wants to share its output buffers with a 3d party display
> controller driver supporting dma buf.
>
> Signed-off-by: Johan Mossberg <johan.mossberg@stericsson.com>
> ---
>  drivers/gpu/ion/ion.c | 22 ++++++++++++++++++----
>  include/linux/ion.h   |  8 ++++++++
>  2 files changed, 26 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/ion/ion.c b/drivers/gpu/ion/ion.c
> index 3872095..e7b0d0b 100644
> --- a/drivers/gpu/ion/ion.c
> +++ b/drivers/gpu/ion/ion.c
> @@ -955,19 +955,19 @@ struct dma_buf_ops dma_buf_ops = {
>       .kunmap = ion_dma_buf_kunmap,
>  };
>
> -int ion_share_dma_buf(struct ion_client *client, struct ion_handle *handle)
> +struct dma_buf *ion_share_dma_buf_kernel(struct ion_client *client,
> +                                             struct ion_handle *handle)
>  {
>       struct ion_buffer *buffer;
>       struct dma_buf *dmabuf;
>       bool valid_handle;
> -     int fd;
>
>       mutex_lock(&client->lock);
>       valid_handle = ion_handle_validate(client, handle);
>       mutex_unlock(&client->lock);
>       if (!valid_handle) {
>               WARN(1, "%s: invalid handle passed to share.\n", __func__);
> -             return -EINVAL;
> +             return ERR_PTR(-EINVAL);
>       }
>
>       buffer = handle->buffer;
> @@ -975,8 +975,22 @@ int ion_share_dma_buf(struct ion_client *client, struct ion_handle *handle)
>       dmabuf = dma_buf_export(buffer, &dma_buf_ops, buffer->size, O_RDWR);
>       if (IS_ERR(dmabuf)) {
>               ion_buffer_put(buffer);
> -             return PTR_ERR(dmabuf);
> +             return dmabuf;
>       }
> +
> +     return dmabuf;
> +}
> +EXPORT_SYMBOL(ion_share_dma_buf_kernel);
> +
> +int ion_share_dma_buf(struct ion_client *client, struct ion_handle *handle)
> +{
> +     struct dma_buf *dmabuf;
> +     int fd;
> +
> +     dmabuf = ion_share_dma_buf_kernel(client, handle);
> +     if (IS_ERR(dmabuf))
> +             return PTR_ERR(dmabuf);
> +
>       fd = dma_buf_fd(dmabuf, O_CLOEXEC);
>       if (fd < 0)
>               dma_buf_put(dmabuf);
> diff --git a/include/linux/ion.h b/include/linux/ion.h
> index a7d399c..8720e9b 100644
> --- a/include/linux/ion.h
> +++ b/include/linux/ion.h
> @@ -205,6 +205,14 @@ void *ion_map_kernel(struct ion_client *client, struct ion_handle *handle);
>  void ion_unmap_kernel(struct ion_client *client, struct ion_handle *handle);
>
>  /**
> + * ion_share_dma_buf_kernel() - share buffer as dma-buf
> + * @client:  the client
> + * @handle:  the handle
> + */
> +struct dma_buf *ion_share_dma_buf_kernel(struct ion_client *client,
> +                                                     struct ion_handle *buf);
> +
> +/**
>   * ion_share_dma_buf() - given an ion client, create a dma-buf fd
>   * @client:  the client
>   * @handle:  the handle
> --
> 1.8.0
>
>
> _______________________________________________
> Linaro-mm-sig mailing list
> Linaro-mm-sig@lists.linaro.org
> http://lists.linaro.org/mailman/listinfo/linaro-mm-sig
>
>