On Fri, May 30, 2025 at 05:54:23PM +0800, Yongbang Shi wrote: > From: Baihan Li <libai...@huawei.com> > > Currently the driver missed to clean the i2c adapter when vdac init failed. > It may cause resource leak. > > Fixes: 94ee73ee3020 ("drm/hisilicon/hibmc: add dp hw moduel in hibmc driver")
No, the tag is incorrect. Offending code was added in a different commit. > Signed-off-by: Baihan Li <libai...@huawei.com> > --- > drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h | 1 + > drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_i2c.c | 5 +++++ > drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c | 9 +++++++-- > 3 files changed, 13 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h > b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h > index 274feabe7df0..ca8502e2760c 100644 > --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h > +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h > @@ -69,6 +69,7 @@ int hibmc_de_init(struct hibmc_drm_private *priv); > int hibmc_vdac_init(struct hibmc_drm_private *priv); > > int hibmc_ddc_create(struct drm_device *drm_dev, struct hibmc_vdac > *connector); > +void hibmc_ddc_del(struct hibmc_vdac *vdac); > > int hibmc_dp_init(struct hibmc_drm_private *priv); > > diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_i2c.c > b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_i2c.c > index 99b3b77b5445..44860011855e 100644 > --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_i2c.c > +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_i2c.c > @@ -95,3 +95,8 @@ int hibmc_ddc_create(struct drm_device *drm_dev, struct > hibmc_vdac *vdac) > > return i2c_bit_add_bus(&vdac->adapter); > } > + > +void hibmc_ddc_del(struct hibmc_vdac *vdac) > +{ > + i2c_del_adapter(&vdac->adapter); > +} Then hibmc_connector_destroy() also needs to use this helper. > diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c > b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c > index e8a527ede854..36401b46034c 100644 > --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c > +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c > @@ -110,7 +110,7 @@ int hibmc_vdac_init(struct hibmc_drm_private *priv) > ret = drmm_encoder_init(dev, encoder, NULL, DRM_MODE_ENCODER_DAC, NULL); > if (ret) { > drm_err(dev, "failed to init encoder: %d\n", ret); > - return ret; > + goto err; > } > > drm_encoder_helper_add(encoder, &hibmc_encoder_helper_funcs); > @@ -121,7 +121,7 @@ int hibmc_vdac_init(struct hibmc_drm_private *priv) > &vdac->adapter); > if (ret) { > drm_err(dev, "failed to init connector: %d\n", ret); > - return ret; > + goto err; > } > > drm_connector_helper_add(connector, &hibmc_connector_helper_funcs); > @@ -131,4 +131,9 @@ int hibmc_vdac_init(struct hibmc_drm_private *priv) > connector->polled = DRM_CONNECTOR_POLL_CONNECT | > DRM_CONNECTOR_POLL_DISCONNECT; > > return 0; > + > +err: > + hibmc_ddc_del(vdac); > + > + return ret; > } > -- > 2.33.0 > -- With best wishes Dmitry