[PATCH 1/2] drm/vc4: hdmi: Take our lock to reset the link

Javier Martinez Canillas javierm at redhat.com
Thu Oct 27 15:13:04 UTC 2022


Hello Maxime,

On 10/24/22 11:36, maxime at cerno.tech wrote:
> We access some fields protected by our internal mutex in
> vc4_hdmi_reset_link() (saved_adjusted_mode, output_bpc, output_format)
> and are calling functions that need to have that lock taken
> (vc4_hdmi_supports_scrambling()).
> 
> However, the current code doesn't lock that mutex. Let's make sure it
> does.
> 
> Fixes: 6bed2ea3cb38 ("drm/vc4: hdmi: Reset link on hotplug")
> Signed-off-by: Maxime Ripard <maxime at cerno.tech>
> ---

Reviewed-by: Javier Martinez Canillas <javierm at redhat.com>

Just a trivial nit below:

>  drivers/gpu/drm/vc4/vc4_hdmi.c | 21 +++++++++++++++++----
>  1 file changed, 17 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c
> index 596e311d6e58..9e549fa07467 100644
> --- a/drivers/gpu/drm/vc4/vc4_hdmi.c
> +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
> @@ -349,27 +349,40 @@ static int vc4_hdmi_reset_link(struct drm_connector *connector,
>  	if (!crtc_state->active)
>  		return 0;
>  
> -	if (!vc4_hdmi_supports_scrambling(encoder))
> +	mutex_lock(&vc4_hdmi->mutex);
> +
> +	if (!vc4_hdmi_supports_scrambling(encoder)) {
> +		mutex_unlock(&vc4_hdmi->mutex);
>  		return 0;
> +	}
>  
>  	scrambling_needed = vc4_hdmi_mode_needs_scrambling(&vc4_hdmi->saved_adjusted_mode,
>  							   vc4_hdmi->output_bpc,
>  							   vc4_hdmi->output_format);
> -	if (!scrambling_needed)
> +	if (!scrambling_needed) {
> +		mutex_unlock(&vc4_hdmi->mutex);
>  		return 0;
> +	}
>  
>  	if (conn_state->commit &&
> -	    !try_wait_for_completion(&conn_state->commit->hw_done))
> +	    !try_wait_for_completion(&conn_state->commit->hw_done)) {
> +		mutex_unlock(&vc4_hdmi->mutex);
>  		return 0;
> +	}

I think the convention is to have a ret_unlock label followed by the
mutex_unlock() and ret 0, to avoid duplicating this. You could have
that label after the return reset_pipe(crtc, ctx).

But it's OK if you prefer to land this version too.

-- 
Best regards,

Javier Martinez Canillas
Core Platforms
Red Hat



More information about the dri-devel mailing list