Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp250326pxb; Wed, 20 Jan 2021 06:16:54 -0800 (PST) X-Google-Smtp-Source: ABdhPJzyPvnxJqJvh7pipTzhNg/HTmD/TuHa4lZ2Vy4N6xIzEUAJpKHQ3CFq8OazDpiiTo4IxDsh X-Received: by 2002:a50:fc97:: with SMTP id f23mr7961631edq.307.1611152213788; Wed, 20 Jan 2021 06:16:53 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1611152213; cv=none; d=google.com; s=arc-20160816; b=iEe/icRYyGfMDVsiWcYX9JBrP9SVp34RNpQoDW71u+eoLOjI80d/9zCAO/azJrCMUa SphDOsDmq9zQCOfJdF9685DMgdjIw05LFJP+pJi+RuVKPZR3e0X/hWDgGxCZq+DvlH+v Nmoy1pGTFNxVprLnKGs0jWdLeOpmv6QFWdMLoGvPFHwrUbhboq8FPPp4DoxtgG3PWjPf H4mItjKQV086XtqRahxqPRW/M+i6tDtzlP22AtLBxk0dojBs7AW+8u++GzkvHKAGr/Yv xX25NC6esrHZLT/eOHTTBfKEQD0BD8uvwNNeHlDxq9ahHupZ2n1kZ737fC0TgB2Ygq0W zXuw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:cc:to:subject:from:date; bh=ZYg4mQ+p9cjallbUMotMxGhgskhIpIOqE7bDW5sVq2E=; b=C3W7HPYjQR/QFi3W/Seblr+8NZp/8LAuBdG7dOWrkAlVXMFWo4wbn1tBuAfA3CeJ44 VzYFimbkGt/45j8lwv66A2Tm8W+h2bBerP7TA9Ro0KsYg6yis4tD/50y3Dw2QhLVL/nI JaF74PNU47vffPtY2gMmmr7ugu7Sjlueuv1v2U/oA/f5/tvvagvxOtjXySEuUAnimZNV qOoUVTHBEC0DdvgA4F4lrHLQzUCF+IIXD7Py5BCYICGQeVibN2ixRQPmANung07BZznE fa8Al5DaxKCcdCB2c2gMjGBT8jGMTzA95g6mnfnJFJtvuGj+Q1NY9/A4GbA+o9CJ6J0O aNYw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=crapouillou.net Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id a59si931223edf.278.2021.01.20.06.16.28; Wed, 20 Jan 2021 06:16:53 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=crapouillou.net Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2390281AbhATOMi convert rfc822-to-8bit (ORCPT + 99 others); Wed, 20 Jan 2021 09:12:38 -0500 Received: from aposti.net ([89.234.176.197]:49048 "EHLO aposti.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731970AbhATNW0 (ORCPT ); Wed, 20 Jan 2021 08:22:26 -0500 Date: Wed, 20 Jan 2021 13:21:29 +0000 From: Paul Cercueil Subject: Re: [PATCH v2 2/3] drm/ingenic: Register devm action to cleanup encoders To: Daniel Vetter Cc: David Airlie , Sam Ravnborg , Laurent Pinchart , od@zcrc.me, dri-devel , Linux Kernel Mailing List , stable Message-Id: In-Reply-To: References: <20210120123535.40226-1-paul@crapouillou.net> <20210120123535.40226-3-paul@crapouillou.net> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1; format=flowed Content-Transfer-Encoding: 8BIT Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Le mer. 20 janv. 2021 ? 14:01, Daniel Vetter a ?crit : > 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 = >> 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_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. -Paul >> + >> 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"); >> -- >> 2.29.2 >> > > > -- > Daniel Vetter > Software Engineer, Intel Corporation > http://blog.ffwll.ch