From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D7119C433E9 for ; Thu, 21 Jan 2021 08:53:53 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 82B8D239A1 for ; Thu, 21 Jan 2021 08:53:53 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 82B8D239A1 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=crapouillou.net Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id E59336E8FD; Thu, 21 Jan 2021 08:53:21 +0000 (UTC) Received: from aposti.net (aposti.net [89.234.176.197]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5EC5E6E090 for ; Wed, 20 Jan 2021 15:55:47 +0000 (UTC) Date: Wed, 20 Jan 2021 15:55:33 +0000 From: Paul Cercueil Subject: Re: [PATCH v2 2/3] drm/ingenic: Register devm action to cleanup encoders To: Daniel Vetter Message-Id: In-Reply-To: References: <20210120123535.40226-1-paul@crapouillou.net> <20210120123535.40226-3-paul@crapouillou.net> MIME-Version: 1.0 X-Mailman-Approved-At: Thu, 21 Jan 2021 08:52:31 +0000 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: David Airlie , Linux Kernel Mailing List , dri-devel , od@zcrc.me, Laurent Pinchart , stable , Sam Ravnborg Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="iso-8859-1"; Format="flowed" Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Le mer. 20 janv. 2021 =E0 15:04, Daniel Vetter a = =E9crit : > On Wed, Jan 20, 2021 at 2:21 PM Paul Cercueil = > wrote: >> = >> = >> = >> Le mer. 20 janv. 2021 =E0 14:01, Daniel Vetter a >> =E9crit : >> > On Wed, Jan 20, 2021 at 1:36 PM 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 >> >> >> >> Fixes: c369cb27c267 ("drm/ingenic: Support multiple = >> panels/bridges") >> >> Cc: # 5.8+ >> >> Signed-off-by: Paul Cercueil >> >> --- >> >> >> >> Notes: >> >> Use the V1 of this patch to fix v5.11 and older kernels. = >> This >> >> V2 only >> >> applies on the current drm-misc-next branch. >> >> >> >> drivers/gpu/drm/ingenic/ingenic-drm-drv.c | 16 +++++++--------- >> >> 1 file changed, 7 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..158433b4c084 100644 >> >> --- a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c >> >> +++ b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c >> >> @@ -1014,20 +1014,18 @@ static int ingenic_drm_bind(struct = >> device >> >> *dev, bool has_components) >> >> bridge =3D >> >> devm_drm_panel_bridge_add_typed(dev, panel, >> >> >> >> DRM_MODE_CONNECTOR_DPI); >> >> >> >> - encoder =3D devm_kzalloc(dev, sizeof(*encoder), >> >> GFP_KERNEL); >> >> - if (!encoder) >> >> - return -ENOMEM; >> >> + encoder =3D __drmm_simple_encoder_alloc(drm, >> >> sizeof(*encoder), 0, >> > >> > Please don't use the __ prefixed functions, those are the internal >> > ones. The official one comes with type checking and all that = >> included. >> > Otherwise lgtm. >> > -Daniel >> = >> The non-prefixed one assumes that I want to allocate a struct that >> contains the encoder, not just the drm_encoder itself. > = > Hm, but using the internal one is also a bit too ugly. A > drm_plain_simple_enocder_alloc(drm, type) wrapper would be the right > thing here I think? Setting the offsets and struct sizes directly in > these in drivers really doesn't feel like a good idea. I think simple > encoder is the only case where we really have a need for a > non-embeddable struct. > -Daniel Alright, I will add a wrapper. Cheers, -Paul >> = >> >> + >> >> DRM_MODE_ENCODER_DPI); >> >> + if (IS_ERR(encoder)) { >> >> + ret =3D PTR_ERR(encoder); >> >> + dev_err(dev, "Failed to init encoder: >> >> %d\n", ret); >> >> + return ret; >> >> + } >> >> >> >> encoder->possible_crtcs =3D 1; >> >> >> >> drm_encoder_helper_add(encoder, >> >> &ingenic_drm_encoder_helper_funcs); >> >> >> >> - ret =3D 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 =3D drm_bridge_attach(encoder, bridge, NULL, = >> 0); >> >> if (ret) { >> >> dev_err(dev, "Unable to attach = >> bridge\n"); >> >> -- >> >> 2.29.2 >> >> >> > >> > >> > -- >> > Daniel Vetter >> > Software Engineer, Intel Corporation >> > http://blog.ffwll.ch >> = >> = > = > = > -- > Daniel Vetter > Software Engineer, Intel Corporation > http://blog.ffwll.ch _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel