From: sashiko-bot@kernel.org
To: "Sebastian Reichel" <sebastian.reichel@collabora.com>
Cc: robh@kernel.org, conor+dt@kernel.org,
dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org
Subject: Re: [PATCH v11 03/21] drm/bridge: synopsys: dw-dp: Fix error handling for DP link enablement
Date: Thu, 06 Aug 2026 17:29:35 +0000 [thread overview]
Message-ID: <20260806172936.D0A261F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260806-synopsys-dw-dp-improvements-v11-3-0d508505f383@collabora.com>
Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:
New issues:
- [High] Unconditional call to `drm_dp_link_power_down()` on error path causes severe stalls when unplugged.
Pre-existing issues:
- [High] Missing `reinit_completion()` in `dw_dp_aux_transfer()` leads to spurious AUX timeouts and data corruption.
- [High] TOCTOU race condition between asynchronous HPD worker and non-blocking atomic disable.
--
--- Patch [3]: [PATCH v11 03/21] drm/bridge: synopsys: dw-dp: Fix error handling for DP link enablement ---
commit a255c1363edf851c03c63d0e1832fe5878093ca6
Author: Sebastian Reichel <sebastian.reichel@collabora.com>
drm/bridge: synopsys: dw-dp: Fix error handling for DP link enablement
This commit introduces an enabled state variable in the link structure to
ensure that the link is only disabled if it was properly enabled, preventing
PHY power state mismatches. It also adds missing error handling to
dw_dp_link_enable() to ensure the link enablement is an atomic operation.
> diff --git a/drivers/gpu/drm/bridge/synopsys/dw-dp.c b/drivers/gpu/drm/bridge/synopsys/dw-dp.c
> index d7945f7fe9f05..21d60e89126f0 100644
> --- a/drivers/gpu/drm/bridge/synopsys/dw-dp.c
> +++ b/drivers/gpu/drm/bridge/synopsys/dw-dp.c
[ ... ]
> @@ -1636,10 +1641,22 @@ static int dw_dp_link_enable(struct dw_dp *dp)
>
> ret = drm_dp_link_power_up(&dp->aux, dp->link.revision);
> if (ret < 0)
> - return ret;
> + goto err_phy_power_off;
>
> ret = dw_dp_link_train(dp);
> + if (ret < 0)
> + goto err_link_power_down;
> +
> + dp->link.enabled = true;
>
> + return 0;
> +
> +err_link_power_down:
> + drm_dp_link_power_down(&dp->aux, dp->link.revision);
[Severity: High]
Can this unconditionally stall the DRM commit worker during a hot-unplug event?
If dw_dp_link_enable() fails link training due to the display being unplugged,
this error path unconditionally executes drm_dp_link_power_down() without
verifying if the hardware is still plugged in.
Because the sink is disconnected, DPCD writes over the AUX channel will
repeatedly time out, stalling the DRM commit worker for hundreds of
milliseconds. The existing cleanup code safely guards this with
if (dw_dp_hpd_detect(dp)), but this new inline error path omits the check.
> + dw_dp_phy_xmit_enable(dp, 0);
> +
> +err_phy_power_off:
> + phy_power_off(dp->phy);
> return ret;
> }
[Severity: High]
This isn't a bug introduced by this patch, but does dw_dp_aux_transfer() have
a missing completion re-initialization that could cause data corruption?
Looking at dw_dp_aux_transfer():
drivers/gpu/drm/bridge/synopsys/dw-dp.c:dw_dp_aux_transfer() {
...
status = wait_for_completion_timeout(&dp->complete, timeout);
...
}
The wait relies on the completion state being clean, but because it is not
re-initialized, a late interrupt from a previous timeout will prematurely
satisfy this wait. This could cause the next transfer to immediately return
without waiting for actual completion, returning stale data or falsely
reporting timeouts.
Should reinit_completion() be called before starting a transfer?
[Severity: High]
This is a pre-existing issue, but is there a TOCTOU race condition between the
asynchronous HPD worker and non-blocking atomic disable?
Looking at dw_dp_link_retrain():
drivers/gpu/drm/bridge/synopsys/dw-dp.c:dw_dp_link_retrain() {
...
if (!ret)
ret = dw_dp_link_train(dp);
...
}
And dw_dp_bridge_atomic_disable():
drivers/gpu/drm/bridge/synopsys/dw-dp.c:dw_dp_bridge_atomic_disable() {
...
dw_dp_link_disable(dp);
...
}
dw_dp_hpd_work() can trigger a link retrain asynchronously. It checks
dw_dp_needs_link_retrain() without the connection_mutex, then acquires the lock
and unconditionally calls dw_dp_link_train().
Since non-blocking atomic commits drop connection_mutex before
dw_dp_bridge_atomic_disable() executes, the HPD worker can run concurrently
with bridge teardown. If atomic_disable powers off the PHY, the HPD worker
could blindly access the powered-down hardware, potentially causing a lockup or
crash.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260806-synopsys-dw-dp-improvements-v11-0-0d508505f383@collabora.com?part=3
next prev parent reply other threads:[~2026-08-06 17:29 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-06 17:02 [PATCH v11 00/21] Synopsys DisplayPort Controller improvements for Rockchip platforms Sebastian Reichel
2026-08-06 17:02 ` [PATCH v11 01/21] drm/bridge: synopsys: dw-dp: Register DP AUX on bridge attach Sebastian Reichel
2026-08-06 17:37 ` sashiko-bot
2026-08-06 17:02 ` [PATCH v11 02/21] drm/bridge: synopsys: dw-dp: Fix incorrect resource lifetimes in bind callback Sebastian Reichel
2026-08-06 17:36 ` sashiko-bot
2026-08-06 17:02 ` [PATCH v11 03/21] drm/bridge: synopsys: dw-dp: Fix error handling for DP link enablement Sebastian Reichel
2026-08-06 17:29 ` sashiko-bot [this message]
2026-08-06 17:02 ` [PATCH v11 04/21] drm/bridge: synopsys: dw-dp: Document missing reset line deassert Sebastian Reichel
2026-08-06 17:33 ` sashiko-bot
2026-08-06 17:02 ` [PATCH v11 05/21] drm/bridge: synopsys: dw-dp: Add missing mutex cleanups on module removal Sebastian Reichel
2026-08-06 17:30 ` sashiko-bot
2026-08-06 17:02 ` [PATCH v11 06/21] drm/bridge: synopsys: dw-dp: Fix AUX transfer timeout race condition Sebastian Reichel
2026-08-06 17:32 ` sashiko-bot
2026-08-06 17:02 ` [PATCH v11 07/21] drm/bridge: synopsys: dw-dp: Fix support for short I2C reads Sebastian Reichel
2026-08-06 17:02 ` [PATCH v11 08/21] drm/bridge: synopsys: dw-dp: Free output_fmts when none are valid Sebastian Reichel
2026-08-06 17:02 ` [PATCH v11 09/21] drm/bridge: synopsys: dw-dp: Support MEDIA_BUS_FMT_FIXED Sebastian Reichel
2026-08-06 17:33 ` sashiko-bot
2026-08-06 17:02 ` [PATCH v11 10/21] drm/bridge: synopsys: dw-dp: Add follow-up bridge support Sebastian Reichel
2026-08-07 2:50 ` Chaoyi Chen
2026-08-06 17:02 ` [PATCH v11 11/21] drm/bridge: Add out-of-band HPD notify handler Sebastian Reichel
2026-08-06 17:02 ` [PATCH v11 12/21] drm/bridge: synopsys: dw-dp: Support software triggered OOB HPD Sebastian Reichel
2026-08-06 17:02 ` [PATCH v11 13/21] drm/rockchip: dw_dp: Implement out-of-band HPD handling Sebastian Reichel
2026-08-06 17:27 ` sashiko-bot
2026-08-06 17:02 ` [PATCH v11 14/21] drm/bridge: synopsys: dw-dp: Add Runtime PM support Sebastian Reichel
2026-08-06 17:41 ` sashiko-bot
2026-08-06 17:02 ` [PATCH v11 15/21] drm/rockchip: dw_dp: Add runtime " Sebastian Reichel
2026-08-06 17:45 ` sashiko-bot
2026-08-06 17:02 ` [PATCH v11 16/21] drm/bridge: synopsys: dw-dp: Protect sdp_reg_bank from concurrent access Sebastian Reichel
2026-08-06 17:02 ` [PATCH v11 17/21] drm/bridge: synopsys: dw-dp: Drop useless reservation of first slot Sebastian Reichel
2026-08-06 17:45 ` sashiko-bot
2026-08-06 17:02 ` [PATCH v11 18/21] drm/bridge: synopsys: dw-dp: Clear only enabled SDPs on atomic disable Sebastian Reichel
2026-08-06 17:02 ` [PATCH v11 19/21] drm/bridge: synopsys: dw-dp: Use regmap_set_bits in dw_dp_send_sdp Sebastian Reichel
2026-08-06 17:02 ` [PATCH v11 20/21] dt-bindings: display: rockchip: dw-dp: Fix sound DAI cells Sebastian Reichel
2026-08-06 17:39 ` sashiko-bot
2026-08-07 15:51 ` Rob Herring
2026-08-07 17:58 ` Sebastian Reichel
2026-08-06 17:02 ` [PATCH v11 21/21] drm/bridge: synopsys: dw-dp: Add audio support Sebastian Reichel
2026-08-06 17:44 ` sashiko-bot
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=20260806172936.D0A261F000E9@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=robh@kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
--cc=sebastian.reichel@collabora.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox