From: "Luca Ceresoli" <luca.ceresoli@bootlin.com>
To: "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>,
"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>,
"Tian Tao" <tiantao6@hisilicon.com>,
"Xinwei Kong" <kong.kongxinwei@hisilicon.com>,
"Sumit Semwal" <sumit.semwal@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>
Cc: "Hui Pu" <Hui.Pu@gehealthcare.com>,
"Ian Ray" <ian.ray@gehealthcare.com>,
"Thomas Petazzoni" <thomas.petazzoni@bootlin.com>,
"dri-devel@lists.freedesktop.org"
<dri-devel@lists.freedesktop.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"linux-arm-msm@vger.kernel.org" <linux-arm-msm@vger.kernel.org>,
"freedreno@lists.freedesktop.org"
<freedreno@lists.freedesktop.org>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH v2 08/11] drm/bridge: adv7511: switch to of_drm_get_bridge_by_endpoint()
Date: Tue, 28 Apr 2026 15:47:41 +0200 [thread overview]
Message-ID: <DI4U2DT3OBMR.23T3F7X8P75RU@bootlin.com> (raw)
In-Reply-To: <TY3PR01MB11346E82D19FBE8544F51624286372@TY3PR01MB11346.jpnprd01.prod.outlook.com>
Hello,
On Tue Apr 28, 2026 at 3:31 PM CEST, Biju Das wrote:
>> >> > @@ -1251,10 +1251,9 @@ static int adv7511_probe(struct i2c_client
>> >> > *i2c)
>> >> >
>> >> > memset(&link_config, 0, sizeof(link_config));
>> >> >
>> >> > - ret = drm_of_find_panel_or_bridge(dev->of_node, 1, -1, NULL,
>> >> > - &adv7511->next_bridge);
>> >> > - if (ret && ret != -ENODEV)
>> >> > - return ret;
>> >> > + adv7511->bridge.next_bridge = of_drm_get_bridge_by_endpoint(dev->of_node, 1, -1);
>> >> > + if (IS_ERR(adv7511->bridge.next_bridge) && PTR_ERR(adv7511->bridge.next_bridge) != -ENODEV)
>> >> > + return PTR_ERR(adv7511->bridge.next_bridge);
>> >>
>> >> Does it crash, if the error is -EPROBE_DEFER?
>> >
>> > I see a crash with patch [1], which is fixed by avoiding the direct assignment.
>>
>> Ah, dammit! Good catch, thanks for the quick testing and follow-up!
>>
>> Indeed this driver assumes next_bridge is either NULL or a valid pointer, but due to the 'if(IS_ERR()
>> && some_other_condition)' now it can also be -ENODEV (not -EPROBE_DEFER, but that's irrelevant).
>>
>> This affects the msm and zynqmp_dp patches equally.
>>
>> I'm sending a v3 soon with these fixed. I'm just not sure which approach to use to fix (same for all
>> the 3 patches). Alternatives are:
>>
>> 1. -ENODEV is accepted, set next_bridge to NULL when it happens:
>>
>> - if (IS_ERR(adv7511->bridge.next_bridge) && PTR_ERR(adv7511->bridge.next_bridge) != -
>> ENODEV)
>> - return PTR_ERR(adv7511->bridge.next_bridge);
>> + if (IS_ERR(adv7511->bridge.next_bridge)) {
>> + if (PTR_ERR(adv7511->bridge.next_bridge) == -ENODEV)
>> + adv7511->bridge.next_bridge = NULL;
>> + else
>> + return PTR_ERR(adv7511->bridge.next_bridge);
>
> The point is you cannot return PTR_ERR as it will lead to crash, if it is
> direct assignment.
It would definitely crash when the next_bridge is dereferenced (which
happens in adv7511_bridge_attach()) but I don't see how it can crash
here. Here it _can_ be assigned -ENODEV, but it would be immediately be
cleared to NULL, or to enother error, but we'd immediately return. And in
case of return, when next_bridge is cleared by __drm_bridge_free ->
drm_bridge_put, the error value would be ignored thanks to patch 1.
>
> if (IS_ERR(adv7511->bridge.next_bridge)) {
> int err = PTR_ERR(adv7511->bridge.next_bridge);
> adv7511->bridge.next_bridge = NULL;
> return err;
> }
Is this if() condition wrong? The driver needs to accept the -ENODEV return
value, the next_bridge is conditional in the curent driver code.
>
> Cheers,
> Biju
>
>> 2. let nexxt_bridge hold -ENODEV but ignore it when it is used (only in
>> the attach op, for all 3 drivers):
>>
>> - if (adv->bridge.next_bridge) {
>> + if (!IS_ERR_OR_NULL(adv->bridge.next_bridge)) {
>>
>> While the latter approach involves less code, it might let errors sneak in in case new usages of
>> next_bridge are added with just a NULL check.
>>
>> Opinions about the two?
Luca
--
Luca Ceresoli, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
next prev parent reply other threads:[~2026-04-28 13:47 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-28 9:15 [PATCH v2 00/11] drm/bridge: handle refcounting for bridge-only callers of drm_of_find_panel_or_bridge() Luca Ceresoli
2026-04-28 9:15 ` [PATCH v2 01/11] drm/bridge: drm_bridge_get/put(): ignore ERR_PTR Luca Ceresoli
2026-04-28 11:29 ` Dmitry Baryshkov
2026-04-28 9:15 ` [PATCH v2 02/11] drm/bridge: add of_drm_get_bridge_by_endpoint() Luca Ceresoli
2026-04-28 11:30 ` Dmitry Baryshkov
2026-04-28 9:15 ` [PATCH v2 03/11] drm/msm/hdmi: switch to of_drm_get_bridge_by_endpoint() Luca Ceresoli
2026-04-28 11:31 ` Dmitry Baryshkov
2026-04-28 9:15 ` [PATCH v2 04/11] drm/hisilicon/kirin: " Luca Ceresoli
2026-04-28 9:15 ` [PATCH v2 05/11] drm/bridge: chrontel-ch7033: " Luca Ceresoli
2026-04-28 11:36 ` Dmitry Baryshkov
2026-04-28 9:15 ` [PATCH v2 06/11] drm/bridge: lontium-lt9611uxc: " Luca Ceresoli
2026-04-28 11:31 ` Dmitry Baryshkov
2026-04-28 9:15 ` [PATCH v2 07/11] drm/bridge: lt9611: " Luca Ceresoli
2026-04-28 11:32 ` Dmitry Baryshkov
2026-04-28 13:18 ` Gyeyoung Baek
2026-04-28 13:53 ` Luca Ceresoli
2026-04-28 9:15 ` [PATCH v2 08/11] drm/bridge: adv7511: " Luca Ceresoli
2026-04-28 11:34 ` Dmitry Baryshkov
2026-04-28 11:49 ` Biju Das
2026-04-28 11:58 ` Biju Das
2026-04-28 13:19 ` Luca Ceresoli
2026-04-28 13:31 ` Biju Das
2026-04-28 13:47 ` Luca Ceresoli [this message]
2026-04-28 14:02 ` Biju Das
2026-04-28 14:38 ` Biju Das
2026-04-28 14:45 ` Biju Das
2026-04-28 15:19 ` Luca Ceresoli
2026-04-28 9:15 ` [PATCH v2 09/11] drm/bridge: lt8713sx: " Luca Ceresoli
2026-04-28 11:34 ` Dmitry Baryshkov
2026-04-28 9:15 ` [PATCH v2 10/11] drm: zynqmp_dp: " Luca Ceresoli
2026-04-28 9:15 ` [PATCH v2 11/11] drm: of: forbid bridge-only calls to drm_of_find_panel_or_bridge() Luca Ceresoli
2026-04-28 11:35 ` Dmitry Baryshkov
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=DI4U2DT3OBMR.23T3F7X8P75RU@bootlin.com \
--to=luca.ceresoli@bootlin.com \
--cc=Hui.Pu@gehealthcare.com \
--cc=abhinav.kumar@linux.dev \
--cc=airlied@gmail.com \
--cc=andrzej.hajda@intel.com \
--cc=biju.das.jz@bp.renesas.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=laurent.pinchart@ideasonboard.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 \
/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.