Hi, On Wed, Aug 14, 2024 at 04:36:33PM GMT, Louis Chauvet wrote: > Currently drm_writeback_connector are created by > drm_writeback_connector_init or drm_writeback_connector_init_with_encoder. > Both of the function uses drm_connector_init and drm_encoder_init, but > there is no way to properly clean those structure from outside. > > This patch introduce the new function drm_writeback_connector_cleanup to > allow a proper cleanup. > > Signed-off-by: Louis Chauvet <louis.chauvet@xxxxxxxxxxx> > --- > drivers/gpu/drm/drm_writeback.c | 10 ++++++++++ > include/drm/drm_writeback.h | 11 +++++++++++ > 2 files changed, 21 insertions(+) > > diff --git a/drivers/gpu/drm/drm_writeback.c b/drivers/gpu/drm/drm_writeback.c > index a031c335bdb9..505a4eb40f93 100644 > --- a/drivers/gpu/drm/drm_writeback.c > +++ b/drivers/gpu/drm/drm_writeback.c > @@ -184,6 +184,7 @@ int drm_writeback_connector_init(struct drm_device *dev, > drm_encoder_helper_add(&wb_connector->encoder, enc_helper_funcs); > > wb_connector->encoder.possible_crtcs = possible_crtcs; > + wb_connector->managed_encoder = true; > > ret = drm_encoder_init(dev, &wb_connector->encoder, > &drm_writeback_encoder_funcs, > @@ -290,6 +291,15 @@ int drm_writeback_connector_init_with_encoder(struct drm_device *dev, > } > EXPORT_SYMBOL(drm_writeback_connector_init_with_encoder); > > +void drm_writeback_connector_cleanup(struct drm_writeback_connector *wb_connector) > +{ > + drm_connector_cleanup(&wb_connector->base); > + drm_property_blob_put(wb_connector->pixel_formats_blob_ptr); > + if (wb_connector->managed_encoder) > + drm_encoder_cleanup(&wb_connector->encoder); > +} > +EXPORT_SYMBOL(drm_writeback_connector_cleanup); > + > int drm_writeback_set_fb(struct drm_connector_state *conn_state, > struct drm_framebuffer *fb) > { > diff --git a/include/drm/drm_writeback.h b/include/drm/drm_writeback.h > index 17e576c80169..e651c0c0c84c 100644 > --- a/include/drm/drm_writeback.h > +++ b/include/drm/drm_writeback.h > @@ -35,6 +35,15 @@ struct drm_writeback_connector { > */ > struct drm_encoder encoder; > > + /** > + * @managed_encoder: Sets to true if @encoder was created by drm_writeback_connector_init() > + * > + * If the user used drm_writeback_connector_init_with_encoder() to create the connector, > + * @encoder is not valid and not managed by drm_writeback_connector. This fields allows > + * the drm_writeback_cleanup() function to properly destroy the encoder if needed. > + */ > + bool managed_encoder; > + I think we should rather create drmm_writeback_connector variants, and make both deprecated in favor of these new functions. Maxime
Attachment:
signature.asc
Description: PGP signature