video: adf: memblock: map buffer for dma
authorGreg Hackmann <ghackmann@google.com>
Tue, 29 Apr 2014 00:00:44 +0000 (17:00 -0700)
committerJohn Stultz <john.stultz@linaro.org>
Tue, 16 Feb 2016 21:53:22 +0000 (13:53 -0800)
Change-Id: I4df13c8b45b57fd0594b5e7bf351a4da33a8cb11
Signed-off-by: Greg Hackmann <ghackmann@google.com>
drivers/video/adf/adf_memblock.c

index aa03809e59b7b002c92d9a2cf90aed4d1c893351..e73a7d59f1e60fbd92bf05bbde13e535e1007ae1 100644 (file)
@@ -28,7 +28,7 @@ static struct sg_table *adf_memblock_map(struct dma_buf_attachment *attach,
        unsigned long pfn = PFN_DOWN(pdata->base);
        struct page *page = pfn_to_page(pfn);
        struct sg_table *table;
-       int ret;
+       int nents, ret;
 
        table = kzalloc(sizeof(*table), GFP_KERNEL);
        if (!table)
@@ -36,12 +36,21 @@ static struct sg_table *adf_memblock_map(struct dma_buf_attachment *attach,
 
        ret = sg_alloc_table(table, 1, GFP_KERNEL);
        if (ret < 0)
-               goto err;
+               goto err_alloc;
 
        sg_set_page(table->sgl, page, attach->dmabuf->size, 0);
+
+       nents = dma_map_sg(attach->dev, table->sgl, 1, direction);
+       if (!nents) {
+               ret = -EINVAL;
+               goto err_map;
+       }
+
        return table;
 
-err:
+err_map:
+       sg_free_table(table);
+err_alloc:
        kfree(table);
        return ERR_PTR(ret);
 }
@@ -49,6 +58,7 @@ err:
 static void adf_memblock_unmap(struct dma_buf_attachment *attach,
                struct sg_table *table, enum dma_data_direction direction)
 {
+       dma_unmap_sg(attach->dev, table->sgl, 1, direction);
        sg_free_table(table);
 }