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_dpi.c | 20 +++++---------------
>  1 file changed, 5 insertions(+), 15 deletions(-)
>
> diff --git a/drivers/gpu/drm/vc4/vc4_dpi.c b/drivers/gpu/drm/vc4/vc4_dpi.c
> index 4e24dbad77f2..8a50de2c40d9 100644
> --- a/drivers/gpu/drm/vc4/vc4_dpi.c
> +++ b/drivers/gpu/drm/vc4/vc4_dpi.c
> @@ -296,35 +296,25 @@ static int vc4_dpi_bind(struct device *dev, struct 
> device *master, void *data)
>         if (ret)
>                 return ret;
>
> -       drm_simple_encoder_init(drm, &dpi->encoder.base, 
> DRM_MODE_ENCODER_DPI);
> +       ret = drmm_simple_encoder_init(drm, &dpi->encoder.base, 
> DRM_MODE_ENCODER_DPI);
> +       if (ret)
> +               return ret;
> +
>         drm_encoder_helper_add(&dpi->encoder.base, 
> &vc4_dpi_encoder_helper_funcs);
>
>         ret = vc4_dpi_init_bridge(dpi);
>         if (ret)
> -               goto err_destroy_encoder;
> +               return ret;
>
>         dev_set_drvdata(dev, dpi);
>
>         vc4_debugfs_add_regset32(drm, "dpi_regs", &dpi->regset);
>
>         return 0;
> -
> -err_destroy_encoder:
> -       drm_encoder_cleanup(&dpi->encoder.base);
> -       return ret;
> -}
> -
> -static void vc4_dpi_unbind(struct device *dev, struct device *master,
> -                          void *data)
> -{
> -       struct vc4_dpi *dpi = dev_get_drvdata(dev);
> -
> -       drm_encoder_cleanup(&dpi->encoder.base);
>  }
>
>  static const struct component_ops vc4_dpi_ops = {
>         .bind   = vc4_dpi_bind,
> -       .unbind = vc4_dpi_unbind,
>  };
>
>  static int vc4_dpi_dev_probe(struct platform_device *pdev)
> --
> 2.36.1
>

Reply via email to