Thread (13 messages) 13 messages, 7 authors, 2012-01-26

[Linaro-mm-sig] [PATCH 1/3] dma-buf: Introduce dma buffer sharing mechanism

From: Semwal, Sumit <hidden>
Date: 2012-01-25 13:57:18
Also in: dri-devel, linux-media, linux-mm, lkml

On Fri, Jan 20, 2012 at 6:53 PM, Laurent Pinchart
[off-list ref] wrote:
Hi Summit,

Sorry for the late review. I know that this code is now in mainline, but I
still have a couple of comments. I'll send patches if you agree with them.
Hi Laurent,

Thanks for your review; apologies for being late in replying - I was
OoO for last couple of days.
On Monday 26 December 2011 10:23:15 Sumit Semwal wrote:
<snip>
quoted
[snip]
quoted
diff --git a/drivers/base/dma-buf.c b/drivers/base/dma-buf.c
new file mode 100644
index 0000000..e38ad24
--- /dev/null
+++ b/drivers/base/dma-buf.c
@@ -0,0 +1,291 @@
[snip]
quoted
+/**
+ * dma_buf_export - Creates a new dma_buf, and associates an anon file
+ * with this buffer, so it can be exported.
+ * Also connect the allocator specific data and ops to the buffer.
+ *
+ * @priv: ? ?[in] ? ?Attach private data of allocator to this buffer
+ * @ops: ? ? [in] ? ?Attach allocator-defined dma buf ops to the new buffer.
+ * @size: ? ?[in] ? ?Size of the buffer
+ * @flags: ? [in] ? ?mode flags for the file.
+ *
+ * Returns, on success, a newly created dma_buf object, which wraps the
+ * supplied private data and operations for dma_buf_ops. On either missing
+ * ops, or error in allocating struct dma_buf, will return negative error.
+ *
+ */
+struct dma_buf *dma_buf_export(void *priv, struct dma_buf_ops *ops,
+ ? ? ? ? ? ? ? ? ? ? ? ? ? ? size_t size, int flags)
+{
+ ? ? struct dma_buf *dmabuf;
+ ? ? struct file *file;
+
+ ? ? if (WARN_ON(!priv || !ops
+ ? ? ? ? ? ? ? ? ? ? ? || !ops->map_dma_buf
+ ? ? ? ? ? ? ? ? ? ? ? || !ops->unmap_dma_buf
+ ? ? ? ? ? ? ? ? ? ? ? || !ops->release)) {
+ ? ? ? ? ? ? return ERR_PTR(-EINVAL);
+ ? ? }
+
+ ? ? dmabuf = kzalloc(sizeof(struct dma_buf), GFP_KERNEL);
+ ? ? if (dmabuf == NULL)
+ ? ? ? ? ? ? return ERR_PTR(-ENOMEM);
+
+ ? ? dmabuf->priv = priv;
+ ? ? dmabuf->ops = ops;
dmabuf->ops will never but NULL, but (see below)
<snip>
quoted
+struct dma_buf_attachment *dma_buf_attach(struct dma_buf *dmabuf,
+ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? struct device *dev)
+{
+ ? ? struct dma_buf_attachment *attach;
+ ? ? int ret;
+
+ ? ? if (WARN_ON(!dmabuf || !dev || !dmabuf->ops))
you still check dmabuf->ops here, as well as in several places below.
Shouldn't these checks be removed ?
You're right - these can be removed.
quoted
+ ? ? ? ? ? ? return ERR_PTR(-EINVAL);
+
+ ? ? attach = kzalloc(sizeof(struct dma_buf_attachment), GFP_KERNEL);
+ ? ? if (attach == NULL)
+ ? ? ? ? ? ? goto err_alloc;
What about returning ERR_PTR(-ENOMEM) directly here ?
Right; we can do that.
quoted
+
+ ? ? mutex_lock(&dmabuf->lock);
+
+ ? ? attach->dev = dev;
+ ? ? attach->dmabuf = dmabuf;
These two lines can be moved before mutex_lock().
:) Yes - thanks for catching this.
<snip>
--
Regards,

Laurent Pinchart
Let me know if you'd send patches for these, or should I just go ahead
and correct.

Best regards,
~Sumit.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help