On Fri, 10 Jun 2022 at 10:30, Maxime Ripard <maxime@xxxxxxxxxx> 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 <maxime@xxxxxxxxxx> Reviewed-by: Dave Stevenson <dave.stevenson@xxxxxxxxxxxxxxx> > --- > 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 >