OSDN Git Service

media: ov9734: hold lock to check streaming state
authorBingbu Cao <bingbu.cao@intel.com>
Fri, 27 Nov 2020 03:48:12 +0000 (04:48 +0100)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Wed, 2 Dec 2020 14:56:10 +0000 (15:56 +0100)
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>
drivers/media/i2c/ov9734.c

index 4b9a2e9..e212465 100644 (file)
@@ -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) {