浏览代码

Merge "msm: camera: smmu: Remove extra shared mem map" into camera-kernel.lnx.4.0

Camera Software Integration 4 年之前
父节点
当前提交
6c0556bd8a
共有 1 个文件被更改,包括 11 次插入5 次删除
  1. 11 5
      drivers/cam_smmu/cam_smmu_api.c

+ 11 - 5
drivers/cam_smmu/cam_smmu_api.c

@@ -1956,7 +1956,7 @@ static int cam_smmu_map_buffer_validate(struct dma_buf *buf,
 	} else {
 		CAM_ERR(CAM_SMMU, "Error: Wrong region id passed");
 		rc = -EINVAL;
-		goto err_unmap_sg;
+		goto err_detach;
 	}
 
 	CAM_DBG(CAM_SMMU,
@@ -2012,6 +2012,10 @@ static int cam_smmu_map_buffer_validate(struct dma_buf *buf,
 		idx, buf, (void *)iommu_cb_set.cb_info[idx].dev,
 		(void *)*paddr_ptr, (unsigned int)*len_ptr);
 
+	/* Unmap the mapping in dma region as this is not used anyway */
+	if (region_id == CAM_SMMU_REGION_SHARED)
+		dma_buf_unmap_attachment(attach, table, dma_dir);
+
 	return 0;
 
 err_alloc:
@@ -2158,14 +2162,16 @@ static int cam_smmu_unmap_buf_and_remove_from_list(
 		iommu_cb_set.cb_info[idx].shared_mapping_size -=
 			mapping_info->len;
 	} else if (mapping_info->region_id == CAM_SMMU_REGION_IO) {
+		if (mapping_info->is_internal)
+			mapping_info->attach->dma_map_attrs |=
+				DMA_ATTR_SKIP_CPU_SYNC;
+
+		dma_buf_unmap_attachment(mapping_info->attach,
+			mapping_info->table, mapping_info->dir);
 		iommu_cb_set.cb_info[idx].io_mapping_size -= mapping_info->len;
 	}
 
-	if (mapping_info->is_internal)
-		mapping_info->attach->dma_map_attrs |= DMA_ATTR_SKIP_CPU_SYNC;
 
-	dma_buf_unmap_attachment(mapping_info->attach,
-		mapping_info->table, mapping_info->dir);
 	dma_buf_detach(mapping_info->buf, mapping_info->attach);
 	dma_buf_put(mapping_info->buf);