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
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
linaro-mm-sig@lists.linaro.org