diff --git a/drivers/gpu/msm/kgsl.c b/drivers/gpu/msm/kgsl.c index 328ea61b46a8..99c3207530c5 100644 --- a/drivers/gpu/msm/kgsl.c +++ b/drivers/gpu/msm/kgsl.c @@ -349,6 +349,7 @@ static void kgsl_destroy_ion(struct kgsl_memdesc *memdesc) if (meta != NULL) { remove_dmabuf_list(meta); + dma_buf_unmap_attachment(meta->attach, memdesc->sgt, DMA_BIDIRECTIONAL); dma_buf_detach(meta->dmabuf, meta->attach); dma_buf_put(meta->dmabuf); kfree(meta); @@ -2996,7 +2997,7 @@ static int kgsl_setup_dma_buf(struct kgsl_device *device, { int ret = 0; struct scatterlist *s; - struct sg_table *sg_table; + struct sg_table *sg_table = NULL; struct dma_buf_attachment *attach = NULL; struct kgsl_dma_buf_meta *meta; @@ -3038,8 +3039,6 @@ static int kgsl_setup_dma_buf(struct kgsl_device *device, goto out; } - dma_buf_unmap_attachment(attach, sg_table, DMA_BIDIRECTIONAL); - meta->table = sg_table; entry->priv_data = meta; entry->memdesc.sgt = sg_table; @@ -3094,6 +3093,9 @@ skip_access_check: out: if (ret) { + if (!IS_ERR_OR_NULL(sg_table)) + dma_buf_unmap_attachment(attach, sg_table, DMA_BIDIRECTIONAL); + if (!IS_ERR_OR_NULL(attach)) dma_buf_detach(dmabuf, attach);