summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHariram Purushothaman <hariramp@codeaurora.org>2015-09-02 16:55:11 +0530
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-25 16:04:04 -0700
commit2643b2dfcef4e6147f557eca24de13b2da76d687 (patch)
tree80542020b68ab6019fcbd1f9626dd320b42337a8
parent61eb046eae7c54b8a8abbade62a84b3326db0725 (diff)
msm: camera: Implementing stream base locks in qbuf, dqbuf, reqbufs.
Stream based locks used in qbuf, dqbuf, reqbus. Old session based locks are removed. CRs-Fixed: 986029 Change-Id: I30788f9248bea67e560d1a602e8feadfde6c2691 Signed-off-by: Ramesh V <ramev@codeaurora.org> Signed-off-by: Hariram Purushothaman <hariramp@codeaurora.org>
-rw-r--r--drivers/media/platform/msm/camera_v2/camera/camera.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/drivers/media/platform/msm/camera_v2/camera/camera.c b/drivers/media/platform/msm/camera_v2/camera/camera.c
index 00012a771f10..f2c78d470a2e 100644
--- a/drivers/media/platform/msm/camera_v2/camera/camera.c
+++ b/drivers/media/platform/msm/camera_v2/camera/camera.c
@@ -42,6 +42,7 @@ struct camera_v4l2_private {
unsigned int is_vb2_valid; /*0 if no vb2 buffers on stream, else 1*/
struct vb2_queue vb2_q;
bool stream_created;
+ struct mutex lock;
};
static void camera_pack_event(struct file *filep, int evt_id,
@@ -225,9 +226,9 @@ static int camera_v4l2_reqbufs(struct file *filep, void *fh,
session = msm_session_find(session_id);
if (WARN_ON(!session))
return -EIO;
- mutex_lock(&session->lock_q);
+ mutex_lock(&sp->lock);
ret = vb2_reqbufs(&sp->vb2_q, req);
- mutex_unlock(&session->lock_q);
+ mutex_unlock(&sp->lock);
return ret;
}
@@ -248,9 +249,9 @@ static int camera_v4l2_qbuf(struct file *filep, void *fh,
session = msm_session_find(session_id);
if (WARN_ON(!session))
return -EIO;
- mutex_lock(&session->lock_q);
+ mutex_lock(&sp->lock);
ret = vb2_qbuf(&sp->vb2_q, pb);
- mutex_unlock(&session->lock_q);
+ mutex_unlock(&sp->lock);
return ret;
}
@@ -265,9 +266,9 @@ static int camera_v4l2_dqbuf(struct file *filep, void *fh,
session = msm_session_find(session_id);
if (WARN_ON(!session))
return -EIO;
- mutex_lock(&session->lock_q);
+ mutex_lock(&sp->lock);
ret = vb2_dqbuf(&sp->vb2_q, pb, filep->f_flags & O_NONBLOCK);
- mutex_unlock(&session->lock_q);
+ mutex_unlock(&sp->lock);
return ret;
}
@@ -495,6 +496,8 @@ static int camera_v4l2_fh_open(struct file *filep)
(const unsigned long *)&stream_id, MSM_CAMERA_STREAM_CNT_BITS);
pr_debug("%s: Found stream_id=%d\n", __func__, sp->stream_id);
+ mutex_init(&sp->lock);
+
v4l2_fh_init(&sp->fh, pvdev->vdev);
v4l2_fh_add(&sp->fh);
@@ -510,6 +513,7 @@ static int camera_v4l2_fh_release(struct file *filep)
v4l2_fh_exit(&sp->fh);
}
+ mutex_destroy(&sp->lock);
kzfree(sp);
return 0;
}