<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<p style="font-family:Arial;font-size:10pt;color:#0078D7;margin:15pt;" align="Left">
[AMD Official Use Only - Internal Distribution Only]<br>
</p>
<br>
<div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
I took a closer look at this and there seems to be an issue in the function. <br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
Crtc being null is a valid case here. The sequence that leads to this is, unplug -> disable crtc/release vcpi slots then hotplug. The issue is that pos->port is not guaranteed to be released in
<b>drm_dp_atomic_release_vcpi_slots()</b> so <b>list_for_each_entry(pos, &mst_state->vcpis, next) {} 
</b>might still iterate thought it.<br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
So, when a hotplug is done we still loop through the old port which has port! = null, crtc = null, and vpci = 0. I didn't find anything that I can use to remove the port from the list. So, a potential solution to this would be to add a<span> check for vpci
 = 0 and skip that port.<br>
</span></div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<span></span><span></span><br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
Thoughts/Suggestions?<br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
Bhawan<br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<div id="appendonsend"></div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="divRplyFwdMsg" dir="ltr"><font style="font-size:11pt" face="Calibri, sans-serif" color="#000000"><b>From:</b> amd-gfx <amd-gfx-bounces@lists.freedesktop.org> on behalf of Lakha, Bhawanpreet <Bhawanpreet.Lakha@amd.com><br>
<b>Sent:</b> August 14, 2020 2:52 PM<br>
<b>To:</b> Ruhl, Michael J <michael.j.ruhl@intel.com>; Lipski, Mikita <Mikita.Lipski@amd.com>; Kazlauskas, Nicholas <Nicholas.Kazlauskas@amd.com>; Deucher, Alexander <Alexander.Deucher@amd.com><br>
<b>Cc:</b> amd-gfx@lists.freedesktop.org <amd-gfx@lists.freedesktop.org>; dri-devel@lists.freedesktop.org <dri-devel@lists.freedesktop.org><br>
<b>Subject:</b> Re: [PATCH] drm/dp_mst: Don't return error code when crtc is null</font>
<div dir="ltr"> <br>
<div>
<div>
<div><br>
</div>
<div>pos->port->connector?</div>
<div>This is checking the crtc not the connector. The crtc can be null if its disabled.<br>
</div>
<div><br>
</div>
<div>
<div>Since it is happening after a unplug->hotplug, I guess we are missing something in the disable sequence and the old connector is still in the list.<br>
</div>
</div>
<div><br>
</div>
<div>Bhawan</div>
<div><br>
</div>
<div>>>-----Original Message-----<br>
</div>
<div>>>From: dri-devel <dri-devel-bounces@lists.freedesktop.org> On Behalf Of</div>
<div>>>Bhawanpreet Lakha</div>
<div>>>Sent: Friday, August 14, 2020 1:02 PM</div>
<div>>>To: mikita.lipski@amd.com; nicholas.kazlauskas@amd.com;</div>
<div>>>alexander.deucher@amd.com</div>
<div>>>Cc: Bhawanpreet Lakha <Bhawanpreet.Lakha@amd.com>; dri-</div>
<div>>>devel@lists.freedesktop.org; amd-gfx@lists.freedesktop.org</div>
<div>>>Subject: [PATCH] drm/dp_mst: Don't return error code when crtc is null</div>
<div>>></div>
<div>>>[Why]</div>
<div>>>In certain cases the crtc can be NULL and returning -EINVAL causes</div>
<div>>>atomic check to fail when it shouln't. This leads to valid</div>
<div>>>configurations failing because atomic check fails.</div>
<div>></div>
<div>>So is this a bug fix or an exception case, or an expected possibility?</div>
<div>></div>
<div>>From my reading of the function comments, it is not clear that pos->port->connector</div>
<div>>might be NULL for some reason.</div>
<br>
<div>>A better explanation of why this would occur would make this a much more</div>
<div>>useful commit message.</div>
<div>></div>
<div><br>
</div>
<div>>My reading is that you ran into this issue an are masking it with this fix.</div>
<div>></div>
<div>>Rather than this is a real possibility and this is the correct fix.</div>
<div>></div>
<div>>Mike</div>
<div>></div>
<div>>>[How]</div>
<div>>>Don't early return if crtc is null</div>
<div>>></div>
<div>>>Signed-off-by: Bhawanpreet Lakha <Bhawanpreet.Lakha@amd.com></div>
<div>>>---</div>
<div>>> drivers/gpu/drm/drm_dp_mst_topology.c | 4 ++--</div>
<div>>> 1 file changed, 2 insertions(+), 2 deletions(-)</div>
<div>>></div>
<div>>>diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c</div>
<div>>>b/drivers/gpu/drm/drm_dp_mst_topology.c</div>
<div>>>index 70c4b7afed12..bc90a1485699 100644</div>
<div>>>--- a/drivers/gpu/drm/drm_dp_mst_topology.c</div>
<div>>>+++ b/drivers/gpu/drm/drm_dp_mst_topology.c</div>
<div>>>@@ -5037,8 +5037,8 @@ int drm_dp_mst_add_affected_dsc_crtcs(struct</div>
<div>>>drm_atomic_state *state, struct drm</div>
<div>>></div>
<div>>>                crtc = conn_state->crtc;</div>
<div>>></div>
<div>>>-              if (WARN_ON(!crtc))</div>
<div>>>-                      return -EINVAL;</div>
<div>>>+              if (!crtc)</div>
<div>>>+                      continue;</div>
<div>>></div>
<div>>>                if (!drm_dp_mst_dsc_aux_for_port(pos->port))</div>
<div>>>                        continue;</div>
<div>>>--</div>
<div>>>2.17.1</div>
<div>>></div>
<div>>>_______________________________________________</div>
<div>>>dri-devel mailing list</div>
<div>>>dri-devel@lists.freedesktop.org</div>
<div>>>https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Flists.freedesktop.org%2Fmailman%2Flistinfo%2Fdri-devel&amp;data=02%7C01%7CBhawanpreet.Lakha%40amd.com%7C0f5d55c551644fef3df908d840787b3e%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637330233520819407&amp;sdata=5N%2BBb0Qp3bd5zANfxovb%2BrVLAGnbP1sjyw3EeCHXj2w%3D&amp;reserved=0 
                            <br>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>