On Fri, 10 Jun 2022 at 10:30, Maxime Ripard <max...@cerno.tech> wrote:
>
> The current code will call drm_encoder_cleanup() when the device is
> unbound. However, by then, there might still be some references held to
> that encoder, including by the userspace that might still have the DRM
> device open.
>
> Let's switch to a DRM-managed initialization to clean up after ourselves
> only once the DRM device has been last closed.
>
> Signed-off-by: Maxime Ripard <max...@cerno.tech>

Reviewed-by: Dave Stevenson <dave.steven...@raspberrypi.com>

> ---
>  drivers/gpu/drm/vc4/vc4_dsi.c | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/vc4/vc4_dsi.c b/drivers/gpu/drm/vc4/vc4_dsi.c
> index dbb3f6fb39b4..bcaf87b43cbd 100644
> --- a/drivers/gpu/drm/vc4/vc4_dsi.c
> +++ b/drivers/gpu/drm/vc4/vc4_dsi.c
> @@ -1599,7 +1599,10 @@ static int vc4_dsi_bind(struct device *dev, struct 
> device *master, void *data)
>         if (ret)
>                 return ret;
>
> -       drm_simple_encoder_init(drm, encoder, DRM_MODE_ENCODER_DSI);
> +       ret = drmm_simple_encoder_init(drm, encoder, DRM_MODE_ENCODER_DSI);
> +       if (ret)
> +               return ret;
> +
>         drm_encoder_helper_add(encoder, &vc4_dsi_encoder_helper_funcs);
>
>         ret = drm_bridge_attach(encoder, dsi->bridge, NULL, 0);
> @@ -1632,7 +1635,6 @@ static void vc4_dsi_unbind(struct device *dev, struct 
> device *master,
>          * normally.
>          */
>         list_splice_init(&dsi->bridge_chain, &encoder->bridge_chain);
> -       drm_encoder_cleanup(encoder);
>  }
>
>  static const struct component_ops vc4_dsi_ops = {
> --
> 2.36.1
>

Reply via email to