Linux kernel -stable discussions
 help / color / mirror / Atom feed
From: Lyude Paul <lyude@redhat.com>
To: Wayne Lin <Wayne.Lin@amd.com>,
	amd-gfx@lists.freedesktop.org,  dri-devel@lists.freedesktop.org
Cc: jani.nikula@intel.com, imre.deak@intel.com, daniel@ffwll.ch,
	 Harry.Wentland@amd.com, jerry.zuo@amd.com,
	Harry Wentland <hwentlan@amd.com>,
	 stable@vger.kernel.org
Subject: Re: [PATCH 2/3] drm/dp_mst: Skip CSN if topology probing is not done yet
Date: Wed, 26 Jun 2024 12:20:30 -0400	[thread overview]
Message-ID: <7da3ccf156a858c1a7d2691fbedfa7aa2ceccdf7.camel@redhat.com> (raw)
In-Reply-To: <20240626084825.878565-3-Wayne.Lin@amd.com>

Some comments down below:

On Wed, 2024-06-26 at 16:48 +0800, Wayne Lin wrote:
> [Why]
> During resume, observe that we receive CSN event before we start
> topology
> probing. Handling CSN at this moment based on uncertain topology is
> unnecessary.
> 
> [How]
> Add checking condition in drm_dp_mst_handle_up_req() to skip handling
> CSN
> if the topology is yet to be probed.
> 
> Cc: Lyude Paul <lyude@redhat.com>
> Cc: Harry Wentland <hwentlan@amd.com>
> Cc: Jani Nikula <jani.nikula@intel.com>
> Cc: Imre Deak <imre.deak@intel.com>
> Cc: Daniel Vetter <daniel@ffwll.ch>
> Cc: stable@vger.kernel.org
> Signed-off-by: Wayne Lin <Wayne.Lin@amd.com>
> ---
>  drivers/gpu/drm/display/drm_dp_mst_topology.c | 11 +++++++++++
>  1 file changed, 11 insertions(+)
> 
> diff --git a/drivers/gpu/drm/display/drm_dp_mst_topology.c
> b/drivers/gpu/drm/display/drm_dp_mst_topology.c
> index 68831f4e502a..fc2ceae61db2 100644
> --- a/drivers/gpu/drm/display/drm_dp_mst_topology.c
> +++ b/drivers/gpu/drm/display/drm_dp_mst_topology.c
> @@ -4069,6 +4069,7 @@ static int drm_dp_mst_handle_up_req(struct
> drm_dp_mst_topology_mgr *mgr)
>  	if (up_req->msg.req_type == DP_CONNECTION_STATUS_NOTIFY) {
>  		const struct drm_dp_connection_status_notify
> *conn_stat =
>  			&up_req->msg.u.conn_stat;
> +		bool handle_csn;
>  
>  		drm_dbg_kms(mgr->dev, "Got CSN: pn: %d ldps:%d ddps:
> %d mcs: %d ip: %d pdt: %d\n",
>  			    conn_stat->port_number,
> @@ -4077,6 +4078,16 @@ static int drm_dp_mst_handle_up_req(struct
> drm_dp_mst_topology_mgr *mgr)
>  			    conn_stat->message_capability_status,
>  			    conn_stat->input_port,
>  			    conn_stat->peer_device_type);
> +
> +		mutex_lock(&mgr->probe_lock);
> +		handle_csn = mgr->mst_primary->link_address_sent;
> +		mutex_unlock(&mgr->probe_lock);
> +
> +		if (!handle_csn) {
> +			drm_dbg_kms(mgr->dev, "Got CSN before finish
> topology probing. Skip it.");
> +			kfree(up_req);
> +			goto out;
> +		}

Hm. I think you're definitely on the right track here with not handling
CSNs immediately after resume. My one question though is whether
dropping the event entirely here is a good idea? In theory, we could
receive a CSN at any time during the probe - including receiving a CSN
for a connector that we've already probed in the initial post-resume
process, which could result in us missing CSNs coming out of resume and
still having an outdated topology layout.

I'm not totally sure about the solution I'm going to suggest but it
seems like it would certainly be worth trying: what if we added a flag
to drm_dp_mst_topology_mgr called something like "csn_during_resume"
and simply set it to true in response to getting a CSN before we've
finished reprobing? Then we at the end of the reprobe, we can simply
restart the reprobing process if csn_during_resume gets set - which
should still ensure we're up to date with reality.

>  	} else if (up_req->msg.req_type ==
> DP_RESOURCE_STATUS_NOTIFY) {
>  		const struct drm_dp_resource_status_notify *res_stat
> =
>  			&up_req->msg.u.resource_stat;

-- 
Cheers,
 Lyude Paul (she/her)
 Software Engineer at Red Hat


  reply	other threads:[~2024-06-26 16:20 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20240626084825.878565-1-Wayne.Lin@amd.com>
2024-06-26  8:48 ` [PATCH 1/3] drm/dp_mst: Fix all mstb marked as not probed after suspend/resume Wayne Lin
2024-06-26 16:22   ` Lyude Paul
2024-06-26  8:48 ` [PATCH 2/3] drm/dp_mst: Skip CSN if topology probing is not done yet Wayne Lin
2024-06-26 16:20   ` Lyude Paul [this message]
2024-06-27  9:04     ` Lin, Wayne
2024-06-28 17:40       ` Lyude Paul
2024-07-03  8:13         ` Lin, Wayne
2024-07-03 13:51           ` Lyude Paul

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=7da3ccf156a858c1a7d2691fbedfa7aa2ceccdf7.camel@redhat.com \
    --to=lyude@redhat.com \
    --cc=Harry.Wentland@amd.com \
    --cc=Wayne.Lin@amd.com \
    --cc=amd-gfx@lists.freedesktop.org \
    --cc=daniel@ffwll.ch \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=hwentlan@amd.com \
    --cc=imre.deak@intel.com \
    --cc=jani.nikula@intel.com \
    --cc=jerry.zuo@amd.com \
    --cc=stable@vger.kernel.org \
    /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