All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Hongyan Xu" <getshell@seu.edu.cn>
Cc: dri-devel@lists.freedesktop.org
Subject: Re: [RFC PATCH v2 2/2] drm/bridge: cdns-mhdp8546: exclude producers before teardown
Date: Sun, 15 Nov 2026 12:14:52 +0000	[thread overview]
Message-ID: <sashiko-outbox-215486@kernel.org> (raw)
In-Reply-To: <179474329002.103840.2247392197839757167@seu.edu.cn>

Thank you for your contribution! Sashiko AI review found 1 potential
issue to consider:
- [Medium] drm/bridge: cdns-mhdp8546: unvalidated connector in modeset
  retry work
--

commit 2451c0294329178177f8dd09e32efe0d3bf442ae
Author: Hongyan Xu <getshell@seu.edu.cn>

drm/bridge: cdns-mhdp8546: exclude producers before teardown

This commit guards bridge callbacks and work functions with
drm_bridge_enter() and drm_bridge_exit(), synchronizes teardown with
drm_bridge_unplug(), and serializes connector references in modeset retry
and HDCP property work items.

Link: https://lore.kernel.org/all/20260728135214.1850-1-getshell@seu.edu.cn/

> diff --git a/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c b/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c
> index f47717bd10798..6c108090c2caa 100644
> --- a/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c
> +++ b/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c
[ ... ]
> @@ -2172,14 +2334,20 @@ static int cdns_mhdp_update_link_status(struct cdns_mhdp_device *mhdp)
>  	return ret;
>  }
>  
> -static void cdns_mhdp_modeset_retry_fn(struct work_struct *work)
> +static void cdns_mhdp_modeset_retry_fn_active(struct work_struct *work)
>  {
>  	struct cdns_mhdp_device *mhdp;
>  	struct drm_connector *conn;
>  
>  	mhdp = container_of(work, typeof(*mhdp), modeset_retry_work);
>  
> +	mutex_lock(&mhdp->link_mutex);
>  	conn = mhdp->connector;
> +	if (conn)
> +		drm_connector_get(conn);
> +	mutex_unlock(&mhdp->link_mutex);
> +	if (!conn)
> +		return;
>  
>  	/* Grab the locks before changing connector property */
>  	mutex_lock(&conn->dev->mode_config.mutex);
> @@ -2192,7 +2360,21 @@ static void cdns_mhdp_modeset_retry_fn(struct work_struct *work)
>  	mutex_unlock(&conn->dev->mode_config.mutex);
>  
>  	/* Send Hotplug uevent so userspace can reprobe */
> -	drm_kms_helper_hotplug_event(mhdp->bridge.dev);
> +	drm_kms_helper_hotplug_event(conn->dev);
> +	drm_connector_put(conn);
> +}

[Severity: Medium]
Can cdns_mhdp_modeset_retry_fn_active() update a stale connector after
dropping mhdp->link_mutex?

CPU0                                  CPU1
cdns_mhdp_modeset_retry_fn_active()
  mutex_lock(&mhdp->link_mutex)
  conn = mhdp->connector
  drm_connector_get(conn)
  mutex_unlock(&mhdp->link_mutex)
                                      cdns_mhdp_atomic_disable_active()
                                        mutex_lock(&mhdp->link_mutex)
                                        ...
                                        mhdp->connector = NULL
                                        mutex_unlock(&mhdp->link_mutex)
  mutex_lock(&conn->dev->mode_config.mutex)
  drm_connector_set_link_status_property(conn,
      DRM_MODE_LINK_STATUS_BAD)       <-- updates detached connector
  mutex_unlock(&conn->dev->mode_config.mutex)
  drm_kms_helper_hotplug_event(conn->dev)

Unlike cdns_mhdp_hdcp_prop_work_active(), which checks conn->dev and
re-acquires mhdp->link_mutex under connection_mutex to verify
mhdp->connector == conn && conn->state, cdns_mhdp_modeset_retry_fn_active()
never revalidates mhdp->connector before setting link_status to BAD and
sending a hotplug uevent (or after a subsequent modeset has already
recovered the link).  If drm_connector_cleanup() also runs after
mhdp->connector is cleared, conn->dev or conn->state can be NULL when
dereferenced.

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/179474328603.103840.4363768155390012601@seu.edu.cn?part=2

      reply	other threads:[~2026-11-15 12:15 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-11-15 11:48 [RFC PATCH v2 0/2] drm/bridge: cdns-mhdp8546: order teardown against producers Hongyan Xu
2026-11-15 11:48 ` [RFC PATCH v2 1/2] drm/bridge: protect complete HPD helpers during unplug Hongyan Xu
2026-11-15 11:48 ` [RFC PATCH v2 2/2] drm/bridge: cdns-mhdp8546: exclude producers before teardown Hongyan Xu
2026-11-15 12:14   ` sashiko-bot [this message]

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=sashiko-outbox-215486@kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=getshell@seu.edu.cn \
    --cc=sashiko-reviews@lists.linux.dev \
    /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.