X-Git-Url: http://plrg.eecs.uci.edu/git/?p=firefly-linux-kernel-4.4.55.git;a=blobdiff_plain;f=drivers%2Fvideo%2Frockchip%2Fvcodec%2Fvcodec_iommu_drm.c;fp=drivers%2Fvideo%2Frockchip%2Fvcodec%2Fvcodec_iommu_drm.c;h=23d03427ef1bcd69d6e6399efd01ed04c288ac38;hp=aa79a98b76225e74deac65b76957e843bdc6c6bb;hb=fa9bd02d2f4b6639914795ec605cb96ac9e2589c;hpb=f9efdd80e4d528ad959c7b003b0eaca0ee9c1507 diff --git a/drivers/video/rockchip/vcodec/vcodec_iommu_drm.c b/drivers/video/rockchip/vcodec/vcodec_iommu_drm.c index aa79a98b7622..23d03427ef1b 100644 --- a/drivers/video/rockchip/vcodec/vcodec_iommu_drm.c +++ b/drivers/video/rockchip/vcodec/vcodec_iommu_drm.c @@ -671,9 +671,13 @@ static int vcodec_drm_import(struct vcodec_iommu_session_info *session_info, s = sg_next(s); } - vcodec_dma_map_sg(drm_info->domain, drm_buffer->copy_sgt->sgl, - drm_buffer->copy_sgt->nents, - IOMMU_READ | IOMMU_WRITE); + ret = vcodec_dma_map_sg(drm_info->domain, drm_buffer->copy_sgt->sgl, + drm_buffer->copy_sgt->nents, + IOMMU_READ | IOMMU_WRITE); + if (!ret) { + ret = -ENOMEM; + goto fail_alloc; + } drm_buffer->iova = sg_dma_address(drm_buffer->copy_sgt->sgl); drm_buffer->size = drm_buffer->dma_buf->size; @@ -712,8 +716,12 @@ static int vcodec_drm_import(struct vcodec_iommu_session_info *session_info, return drm_buffer->index; +fail_alloc: + sg_free_table(drm_buffer->copy_sgt); + kfree(drm_buffer->copy_sgt); + dma_buf_unmap_attachment(attach, sgt, + DMA_BIDIRECTIONAL); fail_detach: - dev_err(dev, "dmabuf map attach failed\n"); dma_buf_detach(drm_buffer->dma_buf, attach); dma_buf_put(drm_buffer->dma_buf); fail_out: