* [PATCH] drm/bridge: display-connector: fix i2c adapter leak on probe failure
@ 2026-07-17 8:57 Johan Hovold
2026-07-17 12:20 ` Laurent Pinchart
0 siblings, 1 reply; 3+ messages in thread
From: Johan Hovold @ 2026-07-17 8:57 UTC (permalink / raw)
To: Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart
Cc: Jonas Karlman, Jernej Skrabec, Luca Ceresoli, Maarten Lankhorst,
Maxime Ripard, Thomas Zimmermann, David Airlie, Simona Vetter,
dri-devel, linux-kernel, Johan Hovold, stable, Tomi Valkeinen,
H. Nikolaus Schaller, Dmitry Baryshkov, Laurent Pinchart
Make sure to drop the i2c adapter device and module references on failed
regulator and enable gpio lookup (and regulator enable) during probe
(e.g. on probe deferral).
Note that of_get_i2c_adapter_by_node() does not return error pointers,
but i2c_put_adapter() can handle a NULL argument so the error pointer
check at remove works even if it is misleading.
Fixes: 2e2bf3a5584d ("drm/bridge: display-connector: add DP support")
Fixes: 6de79dd3a920 ("drm/bridge: display-connector: add ddc-en gpio support")
Fixes: 6eb6b6f0a012 ("drm/bridge: display-connector: handle hdmi-pwr supply")
Cc: stable@vger.kernel.org # 5.12
Cc: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Cc: H. Nikolaus Schaller <hns@goldelico.com>
Cc: Dmitry Baryshkov <lumag@kernel.org>
Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Johan Hovold <johan@kernel.org>
---
drivers/gpu/drm/bridge/display-connector.c | 16 +++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/bridge/display-connector.c b/drivers/gpu/drm/bridge/display-connector.c
index 16c0631adeb1..c38de5518211 100644
--- a/drivers/gpu/drm/bridge/display-connector.c
+++ b/drivers/gpu/drm/bridge/display-connector.c
@@ -208,6 +208,13 @@ static int display_connector_get_supply(struct platform_device *pdev,
return PTR_ERR_OR_ZERO(conn->supply);
}
+static void display_connector_put_ddc(void *_ddc)
+{
+ struct i2c_adapter *ddc = _ddc;
+
+ i2c_put_adapter(ddc);
+}
+
static int display_connector_probe(struct platform_device *pdev)
{
struct display_connector *conn;
@@ -328,6 +335,12 @@ static int display_connector_probe(struct platform_device *pdev)
of_node_put(phandle);
if (!conn->bridge.ddc)
return -EPROBE_DEFER;
+
+ ret = devm_add_action_or_reset(&pdev->dev,
+ display_connector_put_ddc,
+ conn->bridge.ddc);
+ if (ret)
+ return ret;
} else {
dev_dbg(&pdev->dev,
"No I2C bus specified, disabling EDID readout\n");
@@ -403,9 +416,6 @@ static void display_connector_remove(struct platform_device *pdev)
regulator_disable(conn->supply);
drm_bridge_remove(&conn->bridge);
-
- if (!IS_ERR(conn->bridge.ddc))
- i2c_put_adapter(conn->bridge.ddc);
}
static const struct of_device_id display_connector_match[] = {
--
2.54.0
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] drm/bridge: display-connector: fix i2c adapter leak on probe failure
2026-07-17 8:57 [PATCH] drm/bridge: display-connector: fix i2c adapter leak on probe failure Johan Hovold
@ 2026-07-17 12:20 ` Laurent Pinchart
2026-07-17 14:51 ` Johan Hovold
0 siblings, 1 reply; 3+ messages in thread
From: Laurent Pinchart @ 2026-07-17 12:20 UTC (permalink / raw)
To: Johan Hovold
Cc: Andrzej Hajda, Neil Armstrong, Robert Foss, Jonas Karlman,
Jernej Skrabec, Luca Ceresoli, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, dri-devel,
linux-kernel, stable, Tomi Valkeinen, H. Nikolaus Schaller,
Dmitry Baryshkov
Hi Johan,
Thank you for the patch.
On Fri, Jul 17, 2026 at 10:57:16AM +0200, Johan Hovold wrote:
> Make sure to drop the i2c adapter device and module references on failed
> regulator and enable gpio lookup (and regulator enable) during probe
> (e.g. on probe deferral).
>
> Note that of_get_i2c_adapter_by_node() does not return error pointers,
> but i2c_put_adapter() can handle a NULL argument so the error pointer
> check at remove works even if it is misleading.
I've already sent a fix for this, see
https://lore.kernel.org/dri-devel/20260705213542.28987-3-laurent.pinchart+renesas@ideasonboard.com/
> Fixes: 2e2bf3a5584d ("drm/bridge: display-connector: add DP support")
> Fixes: 6de79dd3a920 ("drm/bridge: display-connector: add ddc-en gpio support")
> Fixes: 6eb6b6f0a012 ("drm/bridge: display-connector: handle hdmi-pwr supply")
> Cc: stable@vger.kernel.org # 5.12
> Cc: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
> Cc: H. Nikolaus Schaller <hns@goldelico.com>
> Cc: Dmitry Baryshkov <lumag@kernel.org>
> Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Signed-off-by: Johan Hovold <johan@kernel.org>
> ---
> drivers/gpu/drm/bridge/display-connector.c | 16 +++++++++++++---
> 1 file changed, 13 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/bridge/display-connector.c b/drivers/gpu/drm/bridge/display-connector.c
> index 16c0631adeb1..c38de5518211 100644
> --- a/drivers/gpu/drm/bridge/display-connector.c
> +++ b/drivers/gpu/drm/bridge/display-connector.c
> @@ -208,6 +208,13 @@ static int display_connector_get_supply(struct platform_device *pdev,
> return PTR_ERR_OR_ZERO(conn->supply);
> }
>
> +static void display_connector_put_ddc(void *_ddc)
> +{
> + struct i2c_adapter *ddc = _ddc;
> +
> + i2c_put_adapter(ddc);
> +}
> +
> static int display_connector_probe(struct platform_device *pdev)
> {
> struct display_connector *conn;
> @@ -328,6 +335,12 @@ static int display_connector_probe(struct platform_device *pdev)
> of_node_put(phandle);
> if (!conn->bridge.ddc)
> return -EPROBE_DEFER;
> +
> + ret = devm_add_action_or_reset(&pdev->dev,
> + display_connector_put_ddc,
> + conn->bridge.ddc);
> + if (ret)
> + return ret;
> } else {
> dev_dbg(&pdev->dev,
> "No I2C bus specified, disabling EDID readout\n");
> @@ -403,9 +416,6 @@ static void display_connector_remove(struct platform_device *pdev)
> regulator_disable(conn->supply);
>
> drm_bridge_remove(&conn->bridge);
> -
> - if (!IS_ERR(conn->bridge.ddc))
> - i2c_put_adapter(conn->bridge.ddc);
> }
>
> static const struct of_device_id display_connector_match[] = {
--
Regards,
Laurent Pinchart
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] drm/bridge: display-connector: fix i2c adapter leak on probe failure
2026-07-17 12:20 ` Laurent Pinchart
@ 2026-07-17 14:51 ` Johan Hovold
0 siblings, 0 replies; 3+ messages in thread
From: Johan Hovold @ 2026-07-17 14:51 UTC (permalink / raw)
To: Laurent Pinchart
Cc: Andrzej Hajda, Neil Armstrong, Robert Foss, Jonas Karlman,
Jernej Skrabec, Luca Ceresoli, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, dri-devel,
linux-kernel, stable, Tomi Valkeinen, H. Nikolaus Schaller,
Dmitry Baryshkov
On Fri, Jul 17, 2026 at 03:20:35PM +0300, Laurent Pinchart wrote:
> On Fri, Jul 17, 2026 at 10:57:16AM +0200, Johan Hovold wrote:
> > Make sure to drop the i2c adapter device and module references on failed
> > regulator and enable gpio lookup (and regulator enable) during probe
> > (e.g. on probe deferral).
> >
> > Note that of_get_i2c_adapter_by_node() does not return error pointers,
> > but i2c_put_adapter() can handle a NULL argument so the error pointer
> > check at remove works even if it is misleading.
>
> I've already sent a fix for this, see
>
> https://lore.kernel.org/dri-devel/20260705213542.28987-3-laurent.pinchart+renesas@ideasonboard.com/
Ah, ok. If that series is blocked perhaps you can send the fix
separately.
Johan
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-07-17 14:51 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-17 8:57 [PATCH] drm/bridge: display-connector: fix i2c adapter leak on probe failure Johan Hovold
2026-07-17 12:20 ` Laurent Pinchart
2026-07-17 14:51 ` Johan Hovold
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox