aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBingbu Cao <bingbu.cao@intel.com>2020-11-27 04:48:12 +0100
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>2020-12-02 15:56:10 +0100
commit9677958d1d3d21923ca26cb5e989edc18ecf2786 (patch)
tree424736ceb2ecf98989258c5f895e2d332b55c8d7
parent989bea48915861171421bd6e1367bf4c9407513d (diff)
media: ov9734: hold lock to check streaming state
The lock in ov9734 is used to protect the streaming state and serialize the stream on and off callbacks, it should be hold before checking the streaming state in ov9734_set_stream(). Reported-by: Tomasz Figa <tfiga@chromium.org> Reported-by: Sergey Senozhatsky <senozhatsky@chromium.org> Signed-off-by: Bingbu Cao <bingbu.cao@intel.com> Reviewed-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
-rw-r--r--drivers/media/i2c/ov9734.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/media/i2c/ov9734.c b/drivers/media/i2c/ov9734.c
index 4b9a2e9288e7..e212465489e8 100644
--- a/drivers/media/i2c/ov9734.c
+++ b/drivers/media/i2c/ov9734.c
@@ -637,10 +637,12 @@ static int ov9734_set_stream(struct v4l2_subdev *sd, int enable)
struct i2c_client *client = v4l2_get_subdevdata(sd);
int ret = 0;
- if (ov9734->streaming == enable)
+ mutex_lock(&ov9734->mutex);
+ if (ov9734->streaming == enable) {
+ mutex_unlock(&ov9734->mutex);
return 0;
+ }
- mutex_lock(&ov9734->mutex);
if (enable) {
ret = pm_runtime_get_sync(&client->dev);
if (ret < 0) {