From: Louis Chauvet <louis.chauvet@bootlin.com>
To: Luca Ceresoli <luca.ceresoli@bootlin.com>,
Biju Das <biju.das.jz@bp.renesas.com>,
Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
Maxime Ripard <mripard@kernel.org>,
Thomas Zimmermann <tzimmermann@suse.de>,
David Airlie <airlied@gmail.com>, Simona Vetter <simona@ffwll.ch>,
Anitha Chrisanthus <anitha.chrisanthus@intel.com>,
Linus Walleij <linusw@kernel.org>,
Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>,
Tomi Valkeinen <tomi.valkeinen+renesas@ideasonboard.com>,
Kieran Bingham <kieran.bingham+renesas@ideasonboard.com>,
Geert Uytterhoeven <geert+renesas@glider.be>,
Magnus Damm <magnus.damm@gmail.com>,
Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Cc: Hui Pu <Hui.Pu@gehealthcare.com>,
Ian Ray <ian.ray@gehealthcare.com>,
Thomas Petazzoni <thomas.petazzoni@bootlin.com>,
dri-devel@lists.freedesktop.org,
linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v4 1/4] drm: renesas: rz-du: rzg2l_du_encoder: convert to of_drm_find_and_get_bridge()
Date: Wed, 8 Apr 2026 17:44:34 +0200 [thread overview]
Message-ID: <a3c30888-9818-4355-9d09-5398172cd698@bootlin.com> (raw)
In-Reply-To: <20260402-drm-bridge-alloc-getput-drm_of_find_bridge-4-v4-1-421781c8c061@bootlin.com>
On 4/2/26 18:27, Luca Ceresoli wrote:
> of_drm_find_bridge() is deprecated. Move to its replacement
> of_drm_find_and_get_bridge() which gets a bridge reference, and ensure it
> is put when done.
>
> This is made somewhat simpler by the fact that 'bridge' is a local
> variable.
>
> However we need to handle both branches of the main if().
>
> In the 'else' case, just switch to of_drm_find_and_get_bridge() to ensure
> the bridge is not freed while in use in the function tail
> (drm_bridge_attach() mainly).
>
> In the 'then' case, devm_drm_panel_bridge_add_typed() already increments
> the refcount using devres which ties the bridge allocation lifetime to the
> device lifetime, so we would not need to do anything. However to have the
> same behaviour in both branches take an additional reference here, so that
> the bridge needs to be put whichever branch is taken without more
> complicated logic. Ensure to clear the bridge pointer however, to avoid
> calling drm_bridge_put() on an ERR_PTR.
>
> Reviewed-by: Biju Das <biju.das.jz@bp.renesas.com>
> Tested-by: Biju Das <biju.das.jz@bp.renesas.com>
> Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
>
> ---
>
> Changes in v4:
> - Added comment to clarify the additional drm_bridge_get() in the
> panel_bridge case (keeping the R-by and T-by tags as it's just a comment)
> ---
> drivers/gpu/drm/renesas/rz-du/rzg2l_du_encoder.c | 19 +++++++++++++++----
> 1 file changed, 15 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/renesas/rz-du/rzg2l_du_encoder.c b/drivers/gpu/drm/renesas/rz-du/rzg2l_du_encoder.c
> index 5e6dd16705e6..9edb90059830 100644
> --- a/drivers/gpu/drm/renesas/rz-du/rzg2l_du_encoder.c
> +++ b/drivers/gpu/drm/renesas/rz-du/rzg2l_du_encoder.c
> @@ -67,7 +67,7 @@ int rzg2l_du_encoder_init(struct rzg2l_du_device *rcdu,
> {
> struct rzg2l_du_encoder *renc;
> struct drm_connector *connector;
> - struct drm_bridge *bridge;
> + struct drm_bridge *bridge __free(drm_bridge_put) = NULL;
> int ret;
>
> /*
> @@ -83,10 +83,21 @@ int rzg2l_du_encoder_init(struct rzg2l_du_device *rcdu,
>
> bridge = devm_drm_panel_bridge_add_typed(rcdu->dev, panel,
> DRM_MODE_CONNECTOR_DPI);
> - if (IS_ERR(bridge))
> - return PTR_ERR(bridge);
> + if (IS_ERR(bridge)) {
> + // Inhibit the cleanup action on an ERR_PTR
> + ret = PTR_ERR(bridge);
> + bridge = NULL;
> + return ret;
> + }
Can't you use
https://elixir.bootlin.com/linux/v6.19.11/source/include/linux/cleanup.h#L230?
return PTR_ERR(no_free_ptr(bridge));
With or without this modification:
Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>
> +
> + /*
> + * The reference taken by devm_drm_panel_bridge_add_typed() is
> + * released automatically. Take a second one for the __free()
> + * when this function will return.
> + */
> + drm_bridge_get(bridge);
> } else {
> - bridge = of_drm_find_bridge(enc_node);
> + bridge = of_drm_find_and_get_bridge(enc_node);
> if (!bridge)
> return -EPROBE_DEFER;
> }
>
next prev parent reply other threads:[~2026-04-08 15:44 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-02 16:27 [PATCH v4 0/4] drm/bridge: convert users of of_drm_find_bridge(), part 4 Luca Ceresoli
2026-04-02 16:27 ` [PATCH v4 1/4] drm: renesas: rz-du: rzg2l_du_encoder: convert to of_drm_find_and_get_bridge() Luca Ceresoli
2026-04-08 15:44 ` Louis Chauvet [this message]
2026-04-08 17:39 ` Luca Ceresoli
2026-04-08 21:33 ` Laurent Pinchart
2026-04-09 12:32 ` Luca Ceresoli
2026-04-02 16:27 ` [PATCH v4 2/4] drm/kmb/dsi: " Luca Ceresoli
2026-04-08 15:44 ` Louis Chauvet
2026-04-02 16:27 ` [PATCH v4 3/4] drm: rcar-du: encoder: " Luca Ceresoli
2026-04-08 16:03 ` Louis Chauvet
2026-04-08 21:31 ` Laurent Pinchart
2026-04-02 16:27 ` [PATCH v4 4/4] drm/omap: dss: " Luca Ceresoli
2026-04-08 16:14 ` Louis Chauvet
2026-04-07 9:40 ` [PATCH v4 0/4] drm/bridge: convert users of of_drm_find_bridge(), part 4 Linus Walleij
2026-04-07 9:40 ` Linus Walleij
2026-04-09 12:59 ` (subset) " Luca Ceresoli
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=a3c30888-9818-4355-9d09-5398172cd698@bootlin.com \
--to=louis.chauvet@bootlin.com \
--cc=Hui.Pu@gehealthcare.com \
--cc=airlied@gmail.com \
--cc=anitha.chrisanthus@intel.com \
--cc=biju.das.jz@bp.renesas.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=geert+renesas@glider.be \
--cc=ian.ray@gehealthcare.com \
--cc=kieran.bingham+renesas@ideasonboard.com \
--cc=laurent.pinchart+renesas@ideasonboard.com \
--cc=linusw@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-renesas-soc@vger.kernel.org \
--cc=luca.ceresoli@bootlin.com \
--cc=maarten.lankhorst@linux.intel.com \
--cc=magnus.damm@gmail.com \
--cc=mripard@kernel.org \
--cc=simona@ffwll.ch \
--cc=thomas.petazzoni@bootlin.com \
--cc=tomi.valkeinen+renesas@ideasonboard.com \
--cc=tomi.valkeinen@ideasonboard.com \
--cc=tzimmermann@suse.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.