All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Xilin Wu" <sophon@radxa.com>
Cc: dri-devel@lists.freedesktop.org
Subject: Re: [PATCH 03/13] drm/msm/dp: Track PHY power ownership
Date: Wed, 30 Sep 2026 12:59:21 +0000	[thread overview]
Message-ID: <20260930125922.524781F00893@smtp.kernel.org> (raw)
In-Reply-To: <20260930-msm-dp-hdr10-v1-3-dbbf8b2b42bc@radxa.com>

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] msm/dp: TOCTOU race in PHY power ownership tracking causes power and clock leak
--

commit c9182f8e77cc8634e408d0bae0ac2751df04598b
Author: Xilin Wu <sophon@radxa.com>

drm/msm/dp: Track PHY power ownership

This commit introduces PHY power ownership tracking to prevent underflow
during repeated cleanup operations. It adds boolean flags to track PHY
power and link clock states and uses them to skip redundant enables or
disables.

> diff --git a/drivers/gpu/drm/msm/dp/dp_ctrl.c b/drivers/gpu/drm/msm/dp/dp_ctrl.c
> index 59070f399e2d3..f005421630c63 100644
> --- a/drivers/gpu/drm/msm/dp/dp_ctrl.c
> +++ b/drivers/gpu/drm/msm/dp/dp_ctrl.c
[ ... ]
> @@ -1813,6 +1814,9 @@ static void msm_dp_ctrl_link_clk_disable(struct msm_dp_ctrl *msm_dp_ctrl)
>  
>  	ctrl = container_of(msm_dp_ctrl, struct msm_dp_ctrl_private, msm_dp_ctrl);
>  
> +	if (!ctrl->link_clks_on)
> +		return;
> +

[Severity: High]
Could this lockless check introduce a clock reference leak when executing
concurrently?

If a DP sink device sends an HPD interrupt with a
DP_TEST_LINK_PHY_TEST_PATTERN request at the same time as a userspace
modeset, msm_dp_ctrl_link_clk_enable() might run concurrently from two
threads (one holding plugged_lock, the other holding drm_modeset_lock).

Both could enable the clock and set the flag. Later, the first disable
call un-sets the flag, causing subsequent calls to return here early
and leak the extra clock reference.

>  	clk_bulk_disable_unprepare(ctrl->num_link_clks, ctrl->link_clks);
>  
>  	ctrl->link_clks_on = false;
> @@ -1824,6 +1828,23 @@ static void msm_dp_ctrl_link_clk_disable(struct msm_dp_ctrl *msm_dp_ctrl)
>  		   str_on_off(ctrl->core_clks_on));
>  }
>  
> +static int msm_dp_ctrl_phy_power_off(struct msm_dp_ctrl_private *ctrl)
> +{
> +	int ret;
> +
> +	if (!ctrl->phy_powered)
> +		return 0;
> +

[Severity: High]
Similarly, does this skip release when the flag was unset by a racing
thread?

If phy_power_on() was called twice due to the same race, the second
power-off call will skip releasing the reference here, permanently
leaking the PHY power reference.

> +	ret = phy_power_off(ctrl->phy);
> +	if (ret) {
> +		DRM_ERROR("Failed to power off PHY: %d\n", ret);
> +		return ret;
> +	}
> +
> +	ctrl->phy_powered = false;
> +	return 0;
> +}
> +
>  static int msm_dp_ctrl_enable_mainlink_clocks(struct msm_dp_ctrl_private *ctrl,
>  					      struct msm_dp_panel *panel)
>  {
> @@ -1836,7 +1857,11 @@ static int msm_dp_ctrl_enable_mainlink_clocks(struct msm_dp_ctrl_private *ctrl,
>  	ctrl->phy_opts.dp.ssc = drm_dp_max_downspread(dpcd);
>  
>  	phy_configure(phy, &ctrl->phy_opts);
> -	phy_power_on(phy);
> +	if (!ctrl->phy_powered) {

[Severity: High]
Does this flag need lock protection? The phy_powered state is checked and
modified without locking here.

When msm_dp_irq_hpd_handle() and msm_dp_display_atomic_enable() race,
both threads could see !ctrl->phy_powered as true, calling phy_power_on()
twice and incrementing the PHY core's power_count twice.

> +		ret = phy_power_on(phy);
> +		if (!ret)
> +			ctrl->phy_powered = true;
> +	}
>  
>  	dev_pm_opp_set_rate(ctrl->dev, ctrl->link->link_params.rate * 1000);
>  	ret = msm_dp_ctrl_link_clk_enable(&ctrl->msm_dp_ctrl);

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260930-msm-dp-hdr10-v1-0-dbbf8b2b42bc@radxa.com?part=3

  reply	other threads:[~2026-09-30 12:59 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-30 12:41 [PATCH 00/13] drm/msm/dp: Add static HDR support for DP and eDP Xilin Wu
2026-09-30 12:41 ` [PATCH 01/13] drm/atomic: Handle max bpc properties before connector state allocation Xilin Wu
2026-09-30 13:26   ` Dmitry Baryshkov
2026-09-30 14:16     ` Xilin Wu
2026-10-01  9:07   ` Maxime Ripard
2026-09-30 12:41 ` [PATCH 02/13] drm/msm/dp: Support multiple generic SDP slots Xilin Wu
2026-09-30 16:05   ` Dmitry Baryshkov
2026-09-30 12:41 ` [PATCH 03/13] drm/msm/dp: Track PHY power ownership Xilin Wu
2026-09-30 12:59   ` sashiko-bot [this message]
2026-09-30 12:41 ` [PATCH 04/13] drm/msm/dp: Serialize HPD state updates Xilin Wu
2026-09-30 16:07   ` Dmitry Baryshkov
2026-09-30 12:41 ` [PATCH 05/13] drm/msm/dp: Unwind resources when enabling a stream fails Xilin Wu
2026-09-30 12:59   ` sashiko-bot
2026-09-30 12:41 ` [PATCH 06/13] drm/msm/dp: Report stream enable failures through link status Xilin Wu
2026-09-30 16:11   ` Dmitry Baryshkov
2026-09-30 12:41 ` [PATCH 07/13] drm/msm/dp: Track validity of cached sink link capabilities Xilin Wu
2026-09-30 16:14   ` Dmitry Baryshkov
2026-09-30 12:41 ` [PATCH 08/13] drm/msm/dp: Rebuild the eDP stream on modesets leaving self refresh Xilin Wu
2026-09-30 12:41 ` [PATCH 09/13] drm/msm/dp: Track output bit depth in bridge atomic state Xilin Wu
2026-09-30 13:01   ` sashiko-bot
2026-09-30 18:05   ` Dmitry Baryshkov
2026-09-30 12:41 ` [PATCH 10/13] drm/msm/dp: Signal BT.2020 RGB on DP and eDP Xilin Wu
2026-09-30 12:57   ` sashiko-bot
2026-09-30 18:50   ` Dmitry Baryshkov
2026-09-30 12:41 ` [PATCH 11/13] drm/msm/dp: Initialize the debugfs connector pointer Xilin Wu
2026-09-30 18:51   ` Dmitry Baryshkov
2026-09-30 12:41 ` [PATCH 12/13] drm/msm/dp: Serialize video test state changes Xilin Wu
2026-09-30 12:41 ` [PATCH 13/13] drm/msm/dp: Add static HDR metadata support for DP and eDP Xilin Wu
2026-09-30 13:04   ` sashiko-bot
2026-09-30 18:54   ` Dmitry Baryshkov
2026-10-03  0:46 ` [PATCH 00/13] drm/msm/dp: Add static HDR " 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=20260930125922.524781F00893@smtp.kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=sashiko-reviews@lists.linux.dev \
    --cc=sophon@radxa.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.