OSDN Git Service

msm: camera: Use mutex lock to avoid race condition
authorKrupal Divvela <kdivvela@codeaurora.org>
Thu, 18 May 2017 12:38:14 +0000 (18:08 +0530)
committerGerrit - the friendly Code Review server <code-review@localhost>
Thu, 22 Jun 2017 23:16:18 +0000 (16:16 -0700)
Use mutex lock before using queuing ioctls like
queuing, dequeing buffers to avoid race condition.

Change-Id: Ia9fdfd5a766add2f8d99003b0c2bfe7d34d57a09
Signed-off-by: Krupal Divvela <kdivvela@codeaurora.org>
drivers/media/platform/msm/camera_v2/fd/msm_fd_dev.c

index c5f5a12..a04d7ca 100644 (file)
@@ -749,9 +749,13 @@ static int msm_fd_s_fmt_vid_out(struct file *file,
 static int msm_fd_reqbufs(struct file *file,
        void *fh, struct v4l2_requestbuffers *req)
 {
+       int ret;
        struct fd_ctx *ctx = msm_fd_ctx_from_fh(fh);
 
-       return vb2_reqbufs(&ctx->vb2_q, req);
+       mutex_lock(&ctx->fd_device->recovery_lock);
+       ret = vb2_reqbufs(&ctx->vb2_q, req);
+       mutex_unlock(&ctx->fd_device->recovery_lock);
+       return ret;
 }
 
 /*
@@ -763,9 +767,14 @@ static int msm_fd_reqbufs(struct file *file,
 static int msm_fd_qbuf(struct file *file, void *fh,
        struct v4l2_buffer *pb)
 {
+       int ret;
        struct fd_ctx *ctx = msm_fd_ctx_from_fh(fh);
 
-       return vb2_qbuf(&ctx->vb2_q, pb);
+       mutex_lock(&ctx->fd_device->recovery_lock);
+       ret = vb2_qbuf(&ctx->vb2_q, pb);
+       mutex_unlock(&ctx->fd_device->recovery_lock);
+       return ret;
+
 }
 
 /*
@@ -777,9 +786,13 @@ static int msm_fd_qbuf(struct file *file, void *fh,
 static int msm_fd_dqbuf(struct file *file,
        void *fh, struct v4l2_buffer *pb)
 {
+       int ret;
        struct fd_ctx *ctx = msm_fd_ctx_from_fh(fh);
 
-       return vb2_dqbuf(&ctx->vb2_q, pb, file->f_flags & O_NONBLOCK);
+       mutex_lock(&ctx->fd_device->recovery_lock);
+       ret = vb2_dqbuf(&ctx->vb2_q, pb, file->f_flags & O_NONBLOCK);
+       mutex_unlock(&ctx->fd_device->recovery_lock);
+       return ret;
 }
 
 /*