lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <ddcf8a8b-84a5-4895-b890-4f236c8094f2@bootlin.com>
Date: Thu, 30 Oct 2025 15:18:47 +0100
From: Louis Chauvet <louis.chauvet@...tlin.com>
To: Luca Ceresoli <luca.ceresoli@...tlin.com>,
 Ernest Van Hoecke <ernestvanhoecke@...il.com>,
 Philipp Zabel <p.zabel@...gutronix.de>,
 Maarten Lankhorst <maarten.lankhorst@...ux.intel.com>,
 Maxime Ripard <mripard@...nel.org>, Thomas Zimmermann <tzimmermann@...e.de>,
 David Airlie <airlied@...il.com>, Simona Vetter <simona@...ll.ch>,
 Shawn Guo <shawnguo@...nel.org>, Sascha Hauer <s.hauer@...gutronix.de>,
 Pengutronix Kernel Team <kernel@...gutronix.de>,
 Fabio Estevam <festevam@...il.com>
Cc: Hui Pu <Hui.Pu@...ealthcare.com>,
 Thomas Petazzoni <thomas.petazzoni@...tlin.com>,
 dri-devel@...ts.freedesktop.org, imx@...ts.linux.dev,
 linux-arm-kernel@...ts.infradead.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH 1/2] drm/imx: parallel-display: convert to
 devm_drm_bridge_alloc() API



Le 14/10/2025 à 13:30, Luca Ceresoli a écrit :
> This is the new API for allocating DRM bridges.
> 
> This conversion was missed during the initial conversion of all bridges to
> the new API. Thus all kernels with commit 94d50c1a2ca3 ("drm/bridge:
> get/put the bridge reference in drm_bridge_attach/detach()") and using this
> driver now warn due to drm_bridge_attach() incrementing the refcount, which
> is not initialized without using devm_drm_bridge_alloc() for allocation.
> 
> To make the conversion simple and straightforward without messing up with
> the drmm_simple_encoder_alloc(), move the struct drm_bridge from struct
> imx_parallel_display_encoder to struct imx_parallel_display.
> 
> Also remove the 'struct imx_parallel_display *pd' from struct
> imx_parallel_display_encoder, not needed anymore.
> 
> Fixes: 94d50c1a2ca3 ("drm/bridge: get/put the bridge reference in drm_bridge_attach/detach()")
> Reported-by: Ernest Van Hoecke <ernestvanhoecke@...il.com>
> Closes: https://lore.kernel.org/all/hlf4wdopapxnh4rekl5s3kvoi6egaga3lrjfbx6r223ar3txri@3ik53xw5idyh/
> Signed-off-by: Luca Ceresoli <luca.ceresoli@...tlin.com>

Reviewed-by: Louis Chauvet <louis.chauvet@...tlin.com>

> ---
>   drivers/gpu/drm/imx/ipuv3/parallel-display.c | 16 +++++++---------
>   1 file changed, 7 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/gpu/drm/imx/ipuv3/parallel-display.c b/drivers/gpu/drm/imx/ipuv3/parallel-display.c
> index 6d8325c766979aa3ba98970f00806e99c139d3c3..3d0de9c6e925978b7532b6d13caf6909cc343dd7 100644
> --- a/drivers/gpu/drm/imx/ipuv3/parallel-display.c
> +++ b/drivers/gpu/drm/imx/ipuv3/parallel-display.c
> @@ -25,19 +25,18 @@
>   
>   struct imx_parallel_display_encoder {
>   	struct drm_encoder encoder;
> -	struct drm_bridge bridge;
> -	struct imx_parallel_display *pd;
>   };
>   
>   struct imx_parallel_display {
>   	struct device *dev;
>   	u32 bus_format;
>   	struct drm_bridge *next_bridge;
> +	struct drm_bridge bridge;
>   };
>   
>   static inline struct imx_parallel_display *bridge_to_imxpd(struct drm_bridge *b)
>   {
> -	return container_of(b, struct imx_parallel_display_encoder, bridge)->pd;
> +	return container_of(b, struct imx_parallel_display, bridge);
>   }
>   
>   static const u32 imx_pd_bus_fmts[] = {
> @@ -195,15 +194,13 @@ static int imx_pd_bind(struct device *dev, struct device *master, void *data)
>   	if (IS_ERR(imxpd_encoder))
>   		return PTR_ERR(imxpd_encoder);
>   
> -	imxpd_encoder->pd = imxpd;
>   	encoder = &imxpd_encoder->encoder;
> -	bridge = &imxpd_encoder->bridge;
> +	bridge = &imxpd->bridge;
>   
>   	ret = imx_drm_encoder_parse_of(drm, encoder, imxpd->dev->of_node);
>   	if (ret)
>   		return ret;
>   
> -	bridge->funcs = &imx_pd_bridge_funcs;
>   	drm_bridge_attach(encoder, bridge, NULL, DRM_BRIDGE_ATTACH_NO_CONNECTOR);
>   
>   	connector = drm_bridge_connector_init(drm, encoder);
> @@ -228,9 +225,10 @@ static int imx_pd_probe(struct platform_device *pdev)
>   	u32 bus_format = 0;
>   	const char *fmt;
>   
> -	imxpd = devm_kzalloc(dev, sizeof(*imxpd), GFP_KERNEL);
> -	if (!imxpd)
> -		return -ENOMEM;
> +	imxpd = devm_drm_bridge_alloc(dev, struct imx_parallel_display, bridge,
> +				      &imx_pd_bridge_funcs);
> +	if (IS_ERR(imxpd))
> +		return PTR_ERR(imxpd);
>   
>   	/* port@1 is the output port */
>   	imxpd->next_bridge = devm_drm_of_get_bridge(dev, np, 1, 0);
> 

-- 
--
Louis Chauvet, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ