Hi Paul, Thank you for the patch. On Sun, Jan 24, 2021 at 08:55:51AM +0000, Paul Cercueil wrote: > Since the encoders have been devm-allocated, they will be freed way > before drm_mode_config_cleanup() is called. To avoid use-after-free > conditions, we then must ensure that drm_encoder_cleanup() is called > before the encoders are freed. > > v2: Use the new __drmm_simple_encoder_alloc() function > > v3: Use the new drmm_plain_simple_encoder_alloc() macro > > Fixes: c369cb27c267 ("drm/ingenic: Support multiple panels/bridges") > Cc: <stable@xxxxxxxxxxxxxxx> # 5.8+ > Signed-off-by: Paul Cercueil <paul@xxxxxxxxxxxxxxx> Reviewed-by: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx> > --- > > Notes: > Use the V1 of this patch to fix v5.11 and older kernels. This V3 only > applies on the current drm-misc-next branch. > > drivers/gpu/drm/ingenic/ingenic-drm-drv.c | 15 ++++++--------- > 1 file changed, 6 insertions(+), 9 deletions(-) > > diff --git a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c > index 7bb31fbee29d..b23011c1c5d9 100644 > --- a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c > +++ b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c > @@ -1014,20 +1014,17 @@ static int ingenic_drm_bind(struct device *dev, bool has_components) > bridge = devm_drm_panel_bridge_add_typed(dev, panel, > DRM_MODE_CONNECTOR_DPI); > > - encoder = devm_kzalloc(dev, sizeof(*encoder), GFP_KERNEL); > - if (!encoder) > - return -ENOMEM; > + encoder = drmm_plain_simple_encoder_alloc(drm, DRM_MODE_ENCODER_DPI); > + if (IS_ERR(encoder)) { > + ret = PTR_ERR(encoder); > + dev_err(dev, "Failed to init encoder: %d\n", ret); > + return ret; > + } > > encoder->possible_crtcs = 1; > > drm_encoder_helper_add(encoder, &ingenic_drm_encoder_helper_funcs); > > - ret = drm_simple_encoder_init(drm, encoder, DRM_MODE_ENCODER_DPI); > - if (ret) { > - dev_err(dev, "Failed to init encoder: %d\n", ret); > - return ret; > - } > - > ret = drm_bridge_attach(encoder, bridge, NULL, 0); > if (ret) { > dev_err(dev, "Unable to attach bridge\n"); -- Regards, Laurent Pinchart