The .link_setup() handler uses state->lock to protect the src_sd field. This is only used in mipi_csis_s_stream(), which can't race .link_setup() as the MC core prevents link setup when the pipeline is streaming. Drop the lock. Signed-off-by: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx> --- drivers/staging/media/imx/imx7-mipi-csis.c | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/drivers/staging/media/imx/imx7-mipi-csis.c b/drivers/staging/media/imx/imx7-mipi-csis.c index c6cd60896969..21774f3e66e0 100644 --- a/drivers/staging/media/imx/imx7-mipi-csis.c +++ b/drivers/staging/media/imx/imx7-mipi-csis.c @@ -749,7 +749,6 @@ static int mipi_csis_link_setup(struct media_entity *entity, struct v4l2_subdev *mipi_sd = media_entity_to_v4l2_subdev(entity); struct csi_state *state = mipi_sd_to_csis_state(mipi_sd); struct v4l2_subdev *remote_sd; - int ret = 0; dev_dbg(state->dev, "link setup %s -> %s", remote_pad->entity->name, local_pad->entity->name); @@ -760,22 +759,16 @@ static int mipi_csis_link_setup(struct media_entity *entity, remote_sd = media_entity_to_v4l2_subdev(remote_pad->entity); - mutex_lock(&state->lock); - if (flags & MEDIA_LNK_FL_ENABLED) { - if (state->src_sd) { - ret = -EBUSY; - goto out; - } + if (state->src_sd) + return -EBUSY; state->src_sd = remote_sd; } else { state->src_sd = NULL; } -out: - mutex_unlock(&state->lock); - return ret; + return 0; } static struct v4l2_mbus_framefmt * -- Regards, Laurent Pinchart