msm: camera: Use mutex lock to avoid race condition
Use mutex lock before using queuing ioctls like queuing, dequeing buffers to avoid race condition. Change-Id: I59c70f2abe3daddf38761a2f17671d3d49f43989 CRs-fixed: 2038086 Signed-off-by: Terence Ho <terenceh@codeaurora.org>
This commit is contained in:
parent
e3a07a2190
commit
3642b7a3b6
1 changed files with 16 additions and 3 deletions
|
@ -745,9 +745,13 @@ static int msm_fd_s_fmt_vid_out(struct file *file,
|
||||||
static int msm_fd_reqbufs(struct file *file,
|
static int msm_fd_reqbufs(struct file *file,
|
||||||
void *fh, struct v4l2_requestbuffers *req)
|
void *fh, struct v4l2_requestbuffers *req)
|
||||||
{
|
{
|
||||||
|
int ret;
|
||||||
struct fd_ctx *ctx = msm_fd_ctx_from_fh(fh);
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -759,9 +763,14 @@ static int msm_fd_reqbufs(struct file *file,
|
||||||
static int msm_fd_qbuf(struct file *file, void *fh,
|
static int msm_fd_qbuf(struct file *file, void *fh,
|
||||||
struct v4l2_buffer *pb)
|
struct v4l2_buffer *pb)
|
||||||
{
|
{
|
||||||
|
int ret;
|
||||||
struct fd_ctx *ctx = msm_fd_ctx_from_fh(fh);
|
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;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -773,9 +782,13 @@ static int msm_fd_qbuf(struct file *file, void *fh,
|
||||||
static int msm_fd_dqbuf(struct file *file,
|
static int msm_fd_dqbuf(struct file *file,
|
||||||
void *fh, struct v4l2_buffer *pb)
|
void *fh, struct v4l2_buffer *pb)
|
||||||
{
|
{
|
||||||
|
int ret;
|
||||||
struct fd_ctx *ctx = msm_fd_ctx_from_fh(fh);
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Add table
Reference in a new issue