From: "Luca Ceresoli" <luca.ceresoli@bootlin.com>
To: "Dmitry Baryshkov" <dmitry.baryshkov@oss.qualcomm.com>
Cc: "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>,
"Rob Clark" <robin.clark@oss.qualcomm.com>,
"Dmitry Baryshkov" <lumag@kernel.org>,
"Abhinav Kumar" <abhinav.kumar@linux.dev>,
"Jessica Zhang" <jesszhan0024@gmail.com>,
"Sean Paul" <sean@poorly.run>,
"Marijn Suijten" <marijn.suijten@somainline.org>,
"Xinliang Liu" <xinliang.liu@linaro.org>,
"Tian Tao" <tiantao6@hisilicon.com>,
"Xinwei Kong" <kong.kongxinwei@hisilicon.com>,
"Sumit Semwal" <sumit.semwal@linaro.org>,
"Yongqin Liu" <yongqin.liu@linaro.org>,
"John Stultz" <jstultz@google.com>,
"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>,
"Tomi Valkeinen" <tomi.valkeinen@ideasonboard.com>,
"Michal Simek" <michal.simek@amd.com>,
"Hui Pu" <Hui.Pu@gehealthcare.com>,
"Ian Ray" <ian.ray@gehealthcare.com>,
"Thomas Petazzoni" <thomas.petazzoni@bootlin.com>,
<dri-devel@lists.freedesktop.org>, <linux-kernel@vger.kernel.org>,
<linux-arm-msm@vger.kernel.org>,
<freedreno@lists.freedesktop.org>,
<linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH 01/10] drm/bridge: add of_drm_get_bridge_by_endpoint()
Date: Mon, 13 Apr 2026 19:07:14 +0200 [thread overview]
Message-ID: <DHS6WZRYGWZQ.1X6ABU4UWF730@bootlin.com> (raw)
In-Reply-To: <u2awvqh2uoc2acuuvyavwwtuvtiaidhbkkj5a2d2wwph2s7j7g@b4j73kwzblgk>
Hi Dmitry, Maxime,
thanks Dmitry for the quick feedback!
On Mon Apr 13, 2026 at 4:58 PM CEST, Dmitry Baryshkov wrote:
>> --- a/drivers/gpu/drm/drm_bridge.c
>> +++ b/drivers/gpu/drm/drm_bridge.c
>> @@ -1581,6 +1581,52 @@ struct drm_bridge *of_drm_find_bridge(struct device_node *np)
>> return bridge;
>> }
>> EXPORT_SYMBOL(of_drm_find_bridge);
>> +
>> +/**
>> + * of_drm_get_bridge_by_endpoint - return DRM bridge connected to a port/endpoint
>> + * @np: device tree node containing output ports
>> + * @port: port in the device tree node, or -1 for the first port found
>> + * @endpoint: endpoint in the device tree node, or -1 for the first endpoint found
>> + * @bridge: pointer to hold returned drm_bridge, must not be NULL
>> + *
>> + * Given a DT node's port and endpoint number, find the connected node and
>> + * return the associated drm_bridge device.
>> + *
>> + * The refcount of the returned bridge is incremented. Use drm_bridge_put()
>> + * when done with it.
>> + *
>> + * Returns zero (and sets *bridge to a valid bridge pointer) if successful,
>> + * or one of the standard error codes (and the value in *bridge is
>> + * unspecified) if it fails.
>
> Can we return drm_bridge or error cookie instead?
(while replying I realized there is a design flaw in my implementation, but
see below)
I initially thought I'd do it, but I don't like returning an error cookie
for functions getting a bridge pointer. The main reason is that with bridge
refcounting the __free() cleanup actions are handy in a lot of places, so we
are introdugin a lot of code like:
struct drm_bridge *foo __free(drm_bridge_put) = some_func(...);
Where some_func can be one of of_drm_find_bridge(),
drm_bridge_get_next_bridge(), drm_bridge_chain_get_{first,last}_bridge()
etc.
Such code is very handy exactly because these functions return either a
valid pointer or NULL, and thus the cleanup actions always does the right
thing. If an error cookie were returned, the caller would have to be very
careful in inhibiting the cleanup action by clearing the pointer before
returning. This originate for example this discussion: [0]
[0] https://lore.kernel.org/lkml/4cd29943-a8d0-4706-b0c5-01d6b33863e4@bootlin.com/
So I think never having a negative error value in the bridge pointer is
useful to prevent bugs slipping in drivers. For this we should take one of
these two opposite approaches:
1. don't return a bridge pointer which can be an ERR_PTR; return an int
with the error code and take a **drm_bridge and:
- on success, set the valid pointer in *bridge
- on failure, set *bridge = NULL (*)
2. like the above-mentioned functions (of_drm_find_bridge(),
drm_bridge_get_next_bridge() etc) return a drm_bridge pointer which is
either a valid pointer or NULL
(*) I didn't do it in this patch, that's a design flaw, I'll fix in case
approach 1 is taken
Clearly option 2 is the simplest to use, but it loses information about
which error happened.
What do you think about these options?
>> + */
>> +int of_drm_get_bridge_by_endpoint(const struct device_node *np,
>> + int port, int endpoint,
>> + struct drm_bridge **bridge)
>
> Nit: can it be drm_of_get_bridge_by_endpoint?
Argh, this convention is changing periodically it seems! :-)
I previous discussions I was asked to do either drm_of_ [1] of of_drm_ [2],
but since the latter was the last one requested I sticked on it.
@Maxime, Dmitry, I'm OK with either, just let me know if I need to change.
[1] https://lore.kernel.org/dri-devel/20250319-stylish-lime-mongoose-0a18ad@houat/
-> search "called drm_of_find_bridge"
[2] https://lore.kernel.org/all/DEH1VJUEJ8HQ.MIS45UOLCPXL@bootlin.com/
-> search "What about"
Luca
--
Luca Ceresoli, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
next prev parent reply other threads:[~2026-04-13 17:07 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-13 13:58 [PATCH 00/10] drm/bridge: handle refcounting for bridge-only callers of drm_of_find_panel_or_bridge() Luca Ceresoli
2026-04-13 13:58 ` [PATCH 01/10] drm/bridge: add of_drm_get_bridge_by_endpoint() Luca Ceresoli
2026-04-13 14:58 ` Dmitry Baryshkov
2026-04-13 17:07 ` Luca Ceresoli [this message]
2026-04-13 17:56 ` Dmitry Baryshkov
2026-04-14 6:44 ` Luca Ceresoli
2026-04-13 13:58 ` [PATCH 02/10] drm/msm/hdmi: switch to of_drm_get_bridge_by_endpoint() Luca Ceresoli
2026-04-13 17:57 ` Dmitry Baryshkov
2026-04-13 18:10 ` Dmitry Baryshkov
2026-04-13 13:58 ` [PATCH 03/10] drm/hisilicon/kirin: " Luca Ceresoli
2026-04-13 13:58 ` [PATCH 04/10] drm/bridge: chrontel-ch7033: " Luca Ceresoli
2026-04-13 13:58 ` [PATCH 05/10] drm/bridge: lontium-lt9611uxc: " Luca Ceresoli
2026-04-13 18:01 ` Dmitry Baryshkov
2026-04-13 18:12 ` Dmitry Baryshkov
2026-04-13 13:58 ` [PATCH 06/10] drm/bridge: lt9611: " Luca Ceresoli
2026-04-13 18:18 ` Dmitry Baryshkov
2026-04-13 13:58 ` [PATCH 07/10] drm/bridge: adv7511: " Luca Ceresoli
2026-04-13 18:17 ` Dmitry Baryshkov
2026-04-13 13:58 ` [PATCH 08/10] drm/bridge: lt8713sx: " Luca Ceresoli
2026-04-13 18:18 ` Dmitry Baryshkov
2026-04-13 13:58 ` [PATCH 09/10] drm: zynqmp_dp: " Luca Ceresoli
2026-04-13 13:58 ` [PATCH 10/10] drm: of: forbid bridge-only calls to drm_of_find_panel_or_bridge() Luca Ceresoli
2026-04-13 18:04 ` Dmitry Baryshkov
2026-04-14 7:02 ` 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=DHS6WZRYGWZQ.1X6ABU4UWF730@bootlin.com \
--to=luca.ceresoli@bootlin.com \
--cc=Hui.Pu@gehealthcare.com \
--cc=Laurent.pinchart@ideasonboard.com \
--cc=abhinav.kumar@linux.dev \
--cc=airlied@gmail.com \
--cc=andrzej.hajda@intel.com \
--cc=dmitry.baryshkov@oss.qualcomm.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=freedreno@lists.freedesktop.org \
--cc=ian.ray@gehealthcare.com \
--cc=jernej.skrabec@gmail.com \
--cc=jesszhan0024@gmail.com \
--cc=jonas@kwiboo.se \
--cc=jstultz@google.com \
--cc=kong.kongxinwei@hisilicon.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lumag@kernel.org \
--cc=maarten.lankhorst@linux.intel.com \
--cc=marijn.suijten@somainline.org \
--cc=michal.simek@amd.com \
--cc=mripard@kernel.org \
--cc=neil.armstrong@linaro.org \
--cc=rfoss@kernel.org \
--cc=robin.clark@oss.qualcomm.com \
--cc=sean@poorly.run \
--cc=simona@ffwll.ch \
--cc=sumit.semwal@linaro.org \
--cc=thomas.petazzoni@bootlin.com \
--cc=tiantao6@hisilicon.com \
--cc=tomi.valkeinen@ideasonboard.com \
--cc=tzimmermann@suse.de \
--cc=xinliang.liu@linaro.org \
--cc=yongqin.liu@linaro.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox