From 220471ac6b644beb64a2d62eaaca409f56e75293 Mon Sep 17 00:00:00 2001 From: Greg Hackmann Date: Mon, 28 Apr 2014 17:00:44 -0700 Subject: [PATCH] video: adf: memblock: map buffer for dma Change-Id: I4df13c8b45b57fd0594b5e7bf351a4da33a8cb11 Signed-off-by: Greg Hackmann --- drivers/video/adf/adf_memblock.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/drivers/video/adf/adf_memblock.c b/drivers/video/adf/adf_memblock.c index aa03809e59b7..e73a7d59f1e6 100644 --- a/drivers/video/adf/adf_memblock.c +++ b/drivers/video/adf/adf_memblock.c @@ -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); } -- 2.34.1