On Mon, Dec 10, 2012 at 8:44 AM, Johan Mossberg johan.mossberg@stericsson.com 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 | 18 ++++++++++++++++-- include/linux/ion.h | 8 ++++++++ 2 files changed, 24 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/ion/ion.c b/drivers/gpu/ion/ion.c index 748ff7d..31bb5e1 100644 --- a/drivers/gpu/ion/ion.c +++ b/drivers/gpu/ion/ion.c @@ -991,12 +991,12 @@ 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);
@@ -1013,6 +1013,20 @@ int ion_share_dma_buf(struct ion_client *client, struct ion_handle *handle) ion_buffer_put(buffer); return PTR_ERR(dmabuf);
Now that this function returns a ptr instead of an int you need to just return dmabuf and to fix the error case above to return ERR_PTR or you'll get compiler warnings here.
}
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 3ccc75a..cfb831d 100644 --- a/include/linux/ion.h +++ b/include/linux/ion.h @@ -210,6 +210,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