From 38da82854cdc44fbaf2ece3cf1d5f1df7b266f7e Mon Sep 17 00:00:00 2001 From: Zefa Chen Date: Tue, 27 Dec 2022 12:07:35 +0800 Subject: [PATCH] media: rockchip: vicap add mutex lock for get dev stream cnt Signed-off-by: Zefa Chen Change-Id: I33aba35e029a02b4b8dfb5016f44943358565b8f --- drivers/media/platform/rockchip/cif/capture.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/media/platform/rockchip/cif/capture.c b/drivers/media/platform/rockchip/cif/capture.c index 85e74ed3232d..ba5dfb1bc3d6 100644 --- a/drivers/media/platform/rockchip/cif/capture.c +++ b/drivers/media/platform/rockchip/cif/capture.c @@ -4199,13 +4199,14 @@ void rkcif_do_stop_stream(struct rkcif_stream *stream, } else { dev->can_be_reset = true; } - + mutex_lock(&hw_dev->dev_lock); for (i = 0; i < hw_dev->dev_num; i++) { if (atomic_read(&hw_dev->cif_dev[i]->pipe.stream_cnt) != 0) { can_reset = false; break; } } + mutex_unlock(&hw_dev->dev_lock); if (dev->can_be_reset && dev->chip_id >= CHIP_RK3588_CIF) rkcif_do_soft_reset(dev); if (dev->can_be_reset && can_reset) { @@ -5129,6 +5130,7 @@ int rkcif_do_start_stream(struct rkcif_stream *stream, unsigned int mode) { struct rkcif_vdev_node *node = &stream->vnode; struct rkcif_device *dev = stream->cifdev; + struct rkcif_hw *hw_dev = dev->hw_dev; struct v4l2_device *v4l2_dev = &dev->v4l2_dev; struct rkcif_sensor_info *sensor_info = dev->active_sensor; struct rkcif_sensor_info *terminal_sensor = &dev->terminal_sensor; @@ -5191,16 +5193,19 @@ int rkcif_do_start_stream(struct rkcif_stream *stream, unsigned int mode) if (ret < 0) goto destroy_buf; + mutex_lock(&hw_dev->dev_lock); if (((dev->active_sensor && dev->active_sensor->mbus.type == V4L2_MBUS_BT656) || dev->is_use_dummybuf) && (!dev->hw_dev->dummy_buf.vaddr) && mode == RKCIF_STREAM_MODE_CAPTURE) { ret = rkcif_create_dummy_buf(stream); if (ret < 0) { + mutex_unlock(&hw_dev->dev_lock); v4l2_err(v4l2_dev, "Failed to create dummy_buf, %d\n", ret); goto destroy_buf; } } + mutex_unlock(&hw_dev->dev_lock); if (stream->cur_stream_mode == RKCIF_STREAM_MODE_NONE) { ret = dev->pipe.open(&dev->pipe, &node->vdev.entity, true);