Reused later.

Signed-off-by: Gurchetan Singh <gurchetansi...@chromium.org>
---
 drivers/dma-buf/udmabuf.c | 26 +++++++++++++++++++-------
 1 file changed, 19 insertions(+), 7 deletions(-)

diff --git a/drivers/dma-buf/udmabuf.c b/drivers/dma-buf/udmabuf.c
index 47003abbf4c2..5f8bee1862de 100644
--- a/drivers/dma-buf/udmabuf.c
+++ b/drivers/dma-buf/udmabuf.c
@@ -55,10 +55,10 @@ static int mmap_udmabuf(struct dma_buf *buf, struct 
vm_area_struct *vma)
        return 0;
 }
 
-static struct sg_table *map_udmabuf(struct dma_buf_attachment *at,
-                                   enum dma_data_direction direction)
+static struct sg_table *get_sg_table(struct device *dev, struct dma_buf *buf,
+                                    enum dma_data_direction direction)
 {
-       struct udmabuf *ubuf = at->dmabuf->priv;
+       struct udmabuf *ubuf = buf->priv;
        struct sg_table *sg;
        int ret;
 
@@ -70,7 +70,7 @@ static struct sg_table *map_udmabuf(struct dma_buf_attachment 
*at,
                                        GFP_KERNEL);
        if (ret < 0)
                goto err;
-       if (!dma_map_sg(at->dev, sg->sgl, sg->nents, direction)) {
+       if (!dma_map_sg(dev, sg->sgl, sg->nents, direction)) {
                ret = -EINVAL;
                goto err;
        }
@@ -82,13 +82,25 @@ static struct sg_table *map_udmabuf(struct 
dma_buf_attachment *at,
        return ERR_PTR(ret);
 }
 
+static void put_sg_table(struct device *dev, struct sg_table *sg,
+                        enum dma_data_direction direction)
+{
+       dma_unmap_sg(dev, sg->sgl, sg->nents, direction);
+       sg_free_table(sg);
+       kfree(sg);
+}
+
+static struct sg_table *map_udmabuf(struct dma_buf_attachment *at,
+                                   enum dma_data_direction direction)
+{
+       return get_sg_table(at->dev, at->dmabuf, direction);
+}
+
 static void unmap_udmabuf(struct dma_buf_attachment *at,
                          struct sg_table *sg,
                          enum dma_data_direction direction)
 {
-       dma_unmap_sg(at->dev, sg->sgl, sg->nents, direction);
-       sg_free_table(sg);
-       kfree(sg);
+       return put_sg_table(at->dev, sg, direction);
 }
 
 static void release_udmabuf(struct dma_buf *buf)
-- 
2.17.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to