Merge "msm: camera: memmgr: reduce mutex lock duration" into camera-kernel.lnx.4.0
This commit is contained in:

committed by
Gerrit - the friendly Code Review server

commit
e475f14229
@@ -238,8 +238,11 @@ int cam_mem_get_io_buf(int32_t buf_handle, int32_t mmu_handle,
|
||||
if (idx >= CAM_MEM_BUFQ_MAX || idx <= 0)
|
||||
return -ENOENT;
|
||||
|
||||
if (!tbl.bufq[idx].active)
|
||||
if (!tbl.bufq[idx].active) {
|
||||
CAM_ERR(CAM_MEM, "Buffer at idx=%d is already unmapped,",
|
||||
idx);
|
||||
return -EAGAIN;
|
||||
}
|
||||
|
||||
mutex_lock(&tbl.bufq[idx].q_lock);
|
||||
if (buf_handle != tbl.bufq[idx].buf_handle) {
|
||||
@@ -294,8 +297,11 @@ int cam_mem_get_cpu_buf(int32_t buf_handle, uintptr_t *vaddr_ptr, size_t *len)
|
||||
if (idx >= CAM_MEM_BUFQ_MAX || idx <= 0)
|
||||
return -EINVAL;
|
||||
|
||||
if (!tbl.bufq[idx].active)
|
||||
if (!tbl.bufq[idx].active) {
|
||||
CAM_ERR(CAM_MEM, "Buffer at idx=%d is already unmapped,",
|
||||
idx);
|
||||
return -EPERM;
|
||||
}
|
||||
|
||||
if (buf_handle != tbl.bufq[idx].buf_handle)
|
||||
return -EINVAL;
|
||||
@@ -337,6 +343,8 @@ int cam_mem_mgr_cache_ops(struct cam_mem_cache_ops_cmd *cmd)
|
||||
mutex_lock(&tbl.bufq[idx].q_lock);
|
||||
|
||||
if (!tbl.bufq[idx].active) {
|
||||
CAM_ERR(CAM_MEM, "Buffer at idx=%d is already unmapped,",
|
||||
idx);
|
||||
rc = -EINVAL;
|
||||
goto end;
|
||||
}
|
||||
@@ -1053,6 +1061,13 @@ static int cam_mem_util_unmap(int32_t idx,
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Deactivate the buffer queue to prevent multiple unmap */
|
||||
mutex_lock(&tbl.bufq[idx].q_lock);
|
||||
tbl.bufq[idx].active = false;
|
||||
tbl.bufq[idx].vaddr = 0;
|
||||
mutex_unlock(&tbl.bufq[idx].q_lock);
|
||||
mutex_unlock(&tbl.m_lock);
|
||||
|
||||
if (tbl.bufq[idx].flags & CAM_MEM_FLAG_KMD_ACCESS) {
|
||||
if (tbl.bufq[idx].dma_buf && tbl.bufq[idx].kmdvaddr) {
|
||||
rc = cam_mem_util_unmap_cpu_va(tbl.bufq[idx].dma_buf,
|
||||
@@ -1083,10 +1098,10 @@ static int cam_mem_util_unmap(int32_t idx,
|
||||
tbl.bufq[idx].dma_buf = NULL;
|
||||
}
|
||||
|
||||
mutex_lock(&tbl.m_lock);
|
||||
mutex_lock(&tbl.bufq[idx].q_lock);
|
||||
tbl.bufq[idx].flags = 0;
|
||||
tbl.bufq[idx].buf_handle = -1;
|
||||
tbl.bufq[idx].vaddr = 0;
|
||||
memset(tbl.bufq[idx].hdls, 0,
|
||||
sizeof(int32_t) * CAM_MEM_MMU_MAX_HANDLE);
|
||||
|
||||
@@ -1105,7 +1120,6 @@ static int cam_mem_util_unmap(int32_t idx,
|
||||
tbl.bufq[idx].is_internal = false;
|
||||
tbl.bufq[idx].len = 0;
|
||||
tbl.bufq[idx].num_hdl = 0;
|
||||
tbl.bufq[idx].active = false;
|
||||
memset(&tbl.bufq[idx].timestamp, 0, sizeof(struct timespec64));
|
||||
mutex_unlock(&tbl.bufq[idx].q_lock);
|
||||
mutex_destroy(&tbl.bufq[idx].q_lock);
|
||||
|
Reference in New Issue
Block a user