From: Luca Ceresoli <luca.ceresoli@bootlin.com>
To: Maxime Ripard <mripard@kernel.org>
Cc: Andrzej Hajda <andrzej.hajda@intel.com>,
Neil Armstrong <neil.armstrong@linaro.org>,
Robert Foss <rfoss@kernel.org>,
Laurent Pinchart <Laurent.pinchart@ideasonboard.com>,
Jonas Karlman <jonas@kwiboo.se>,
Jernej Skrabec <jernej.skrabec@gmail.com>,
Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
Thomas Zimmermann <tzimmermann@suse.de>,
David Airlie <airlied@gmail.com>, Simona Vetter <simona@ffwll.ch>,
Liu Ying <victor.liu@nxp.com>, Shawn Guo <shawnguo@kernel.org>,
Sascha Hauer <s.hauer@pengutronix.de>,
Pengutronix Kernel Team <kernel@pengutronix.de>,
Fabio Estevam <festevam@gmail.com>,
Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>,
Philipp Zabel <p.zabel@pengutronix.de>,
Hui Pu <Hui.Pu@gehealthcare.com>,
Thomas Petazzoni <thomas.petazzoni@bootlin.com>,
linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org,
imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH 8/9] drm/bridge: put the bridge returned by drm_bridge_get_next_bridge()
Date: Mon, 14 Jul 2025 12:08:42 +0200 [thread overview]
Message-ID: <20250714120842.3b336998@booty> (raw)
In-Reply-To: <20250710-classic-bouncy-caiman-8e2045@houat>
Hi Maxime,
On Thu, 10 Jul 2025 09:27:09 +0200
Maxime Ripard <mripard@kernel.org> wrote:
> Hi,
>
> On Wed, Jul 09, 2025 at 06:48:07PM +0200, Luca Ceresoli wrote:
> > The bridge returned by drm_bridge_get_next_bridge() is refcounted. Put it
> > when done.
> >
> > Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
>
> You should really expand a bit more your commit logs, and provide the
> context of why you think putting drm_bridge_put where you do is a good idea.
>
> > ---
> > drivers/gpu/drm/drm_bridge.c | 2 ++
> > 1 file changed, 2 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c
> > index 0b450b334afd82e0460f18fdd248f79d0a2b153d..05e85457099ab1e0a23ea7842c9654c9a6881dfb 100644
> > --- a/drivers/gpu/drm/drm_bridge.c
> > +++ b/drivers/gpu/drm/drm_bridge.c
> > @@ -1147,6 +1147,8 @@ drm_atomic_bridge_propagate_bus_flags(struct drm_bridge *bridge,
> > } else {
> > next_bridge_state = drm_atomic_get_new_bridge_state(state,
> > next_bridge);
> > + drm_bridge_put(next_bridge);
> > +
> > /*
> > * No bridge state attached to the next bridge, just leave the
> > * flags to 0.
>
> In particular, I don't think it is here.
>
> You still have a variable in scope after that branch that you would have
> given up the reference for, which is pretty dangerous.
>
> Also, the bridge state lifetime is shorter than the bridge lifetime
> itself, so we probably want to have the drm_bridge_put after we're done
> with next_bridge_state too.
Totally agree about this.
I theory moving the _put just after the last usage of next_bridge_state
would be enough. However...
> Overall, I think using __free here is probably the most robust solution.
...I'm OK with using use __free here, even though it doesn't look
strictly necessary. However for patch 9 the code path is slightly more
complex, so I'll use __free for both.
With this change, this patch would become:
@@ -1121,7 +1121,6 @@ drm_atomic_bridge_propagate_bus_flags(struct drm_bridge *bridge,
struct drm_atomic_state *state)
{
struct drm_bridge_state *bridge_state, *next_bridge_state;
- struct drm_bridge *next_bridge;
u32 output_flags = 0;
bridge_state = drm_atomic_get_new_bridge_state(state, bridge);
@@ -1130,7 +1129,7 @@ drm_atomic_bridge_propagate_bus_flags(struct drm_bridge *bridge,
if (!bridge_state)
return;
- next_bridge = drm_bridge_get_next_bridge(bridge);
+ struct drm_bridge *next_bridge __free(drm_bridge_put) = drm_bridge_get_next_bridge(bridge);
/*
* Let's try to apply the most common case here, that is, propagate
And a tentative commit message body is:
The bridge returned by drm_bridge_get_next_bridge() is refcounted. Put
it when done. We need to ensure it is not put before either
next_bridge or next_bridge_state is in use, thus for simplicity use a
cleanup action.
I'll resend with the above changes (unless you have more improvements to
suggest) in a few days, to wait for any feedback on patch 1.
Luca
--
Luca Ceresoli, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
next prev parent reply other threads:[~2025-07-14 10:08 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-09 16:47 [PATCH 0/9] drm/bridge: get/put the bridge returned by drm_bridge_get_last_bridge() Luca Ceresoli
2025-07-09 16:48 ` [PATCH 1/9] list: add list_last_entry_or_null() Luca Ceresoli
2025-07-09 16:48 ` [PATCH 2/9] drm/bridge: add drm_bridge_chain_get_last_bridge() Luca Ceresoli
2025-07-10 7:11 ` Maxime Ripard
2025-07-09 16:48 ` [PATCH 3/9] drm/bridge: imx93-mipi-dsi: use drm_bridge_chain_get_last_bridge() Luca Ceresoli
2025-07-10 7:13 ` Maxime Ripard
2025-07-09 16:48 ` [PATCH 4/9] drm/omapdrm: " Luca Ceresoli
2025-07-10 7:13 ` Maxime Ripard
2025-07-14 10:32 ` Luca Ceresoli
2025-07-25 14:15 ` Maxime Ripard
2025-08-01 17:06 ` Luca Ceresoli
2025-07-09 16:48 ` [PATCH 5/9] drm/bridge: add drm_bridge_is_last() Luca Ceresoli
2025-07-10 7:14 ` Maxime Ripard
2025-07-09 16:48 ` [PATCH 6/9] drm/display: bridge_connector: use drm_bridge_is_last() Luca Ceresoli
2025-07-10 7:14 ` Maxime Ripard
2025-07-09 16:48 ` [PATCH 7/9] drm/bridge: get the bridge returned by drm_bridge_get_next_bridge() Luca Ceresoli
2025-07-10 7:14 ` Maxime Ripard
2025-07-09 16:48 ` [PATCH 8/9] drm/bridge: put " Luca Ceresoli
2025-07-10 7:27 ` Maxime Ripard
2025-07-14 10:08 ` Luca Ceresoli [this message]
2025-07-09 16:48 ` [PATCH 9/9] drm/imx: parallel-display: " Luca Ceresoli
2025-07-10 7:28 ` Maxime Ripard
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=20250714120842.3b336998@booty \
--to=luca.ceresoli@bootlin.com \
--cc=Hui.Pu@gehealthcare.com \
--cc=Laurent.pinchart@ideasonboard.com \
--cc=airlied@gmail.com \
--cc=andrzej.hajda@intel.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=festevam@gmail.com \
--cc=imx@lists.linux.dev \
--cc=jernej.skrabec@gmail.com \
--cc=jonas@kwiboo.se \
--cc=kernel@pengutronix.de \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=maarten.lankhorst@linux.intel.com \
--cc=mripard@kernel.org \
--cc=neil.armstrong@linaro.org \
--cc=p.zabel@pengutronix.de \
--cc=rfoss@kernel.org \
--cc=s.hauer@pengutronix.de \
--cc=shawnguo@kernel.org \
--cc=simona@ffwll.ch \
--cc=thomas.petazzoni@bootlin.com \
--cc=tomi.valkeinen@ideasonboard.com \
--cc=tzimmermann@suse.de \
--cc=victor.liu@nxp.com \
/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.