Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d33f8747 authored by Jigarkumar Zala's avatar Jigarkumar Zala
Browse files

msm: camera: mem: Allow buffer queue to be reset at the time of unmapping



mutex unlock is not happening at the time of error case when kmd access
dmabuf unmapping is not successful. This change fixes this issue and
allowing buffer index to be reset it.

Change-Id: I6aad9e189bb7e7949742ddf1e018e6eeb10cd164
Signed-off-by: default avatarJigarkumar Zala <jzala@codeaurora.org>
parent d93bef6c
Loading
Loading
Loading
Loading
+8 −8
Original line number Diff line number Diff line
@@ -772,11 +772,11 @@ static int cam_mem_util_unmap_hw_va(int32_t idx,
	int32_t *mmu_hdls;
	int num_hdls;
	int fd;
	int rc = -EINVAL;
	int rc = 0;

	if (idx >= CAM_MEM_BUFQ_MAX || idx <= 0) {
		CAM_ERR(CAM_MEM, "Incorrect index");
		return rc;
		return -EINVAL;
	}

	flags = tbl.bufq[idx].flags;
@@ -921,13 +921,11 @@ static int cam_mem_util_unmap(int32_t idx,
		if (tbl.bufq[idx].dma_buf && tbl.bufq[idx].kmdvaddr) {
			rc = cam_mem_util_unmap_cpu_va(tbl.bufq[idx].dma_buf,
				tbl.bufq[idx].kmdvaddr);
			if (rc) {
			if (rc)
				CAM_ERR(CAM_MEM,
					"Failed, dmabuf=%pK, kmdvaddr=%pK",
					tbl.bufq[idx].dma_buf,
					tbl.bufq[idx].kmdvaddr);
				return rc;
			}
		}
	}

@@ -941,9 +939,11 @@ static int cam_mem_util_unmap(int32_t idx,

	if ((tbl.bufq[idx].flags & CAM_MEM_FLAG_HW_READ_WRITE) ||
		(tbl.bufq[idx].flags & CAM_MEM_FLAG_HW_SHARED_ACCESS) ||
		(tbl.bufq[idx].flags & CAM_MEM_FLAG_PROTECTED_MODE))
		rc = cam_mem_util_unmap_hw_va(idx, region, client);

		(tbl.bufq[idx].flags & CAM_MEM_FLAG_PROTECTED_MODE)) {
		if (cam_mem_util_unmap_hw_va(idx, region, client))
			CAM_ERR(CAM_MEM, "Failed, dmabuf=%pK",
				tbl.bufq[idx].dma_buf);
	}

	mutex_lock(&tbl.bufq[idx].q_lock);
	tbl.bufq[idx].flags = 0;