<html>
<head>
<base href="https://bugs.freedesktop.org/">
</head>
<body>
<p>
<div>
<b><a class="bz_bug_link
bz_status_NEEDINFO "
title="NEEDINFO - Kernel "NULL pointer dereference" with MST monitor on HSW"
href="https://bugs.freedesktop.org/show_bug.cgi?id=97666#c38">Comment # 38</a>
on <a class="bz_bug_link
bz_status_NEEDINFO "
title="NEEDINFO - Kernel "NULL pointer dereference" with MST monitor on HSW"
href="https://bugs.freedesktop.org/show_bug.cgi?id=97666">bug 97666</a>
from <span class="vcard"><a class="email" href="mailto:carlos.santa@intel.com" title="Carlos Santa <carlos.santa@intel.com>"> <span class="fn">Carlos Santa</span></a>
</span></b>
<pre>(In reply to Ville Syrjala from <a href="show_bug.cgi?id=97666#c37">comment #37</a>)
<span class="quote">> (In reply to Carlos Santa from <a href="show_bug.cgi?id=97666#c35">comment #35</a>)
> > Created <span class=""><a href="attachment.cgi?id=127461" name="attach_127461" title="10-21-2016.dmesg stack trace">attachment 127461</a> <a href="attachment.cgi?id=127461&action=edit" title="10-21-2016.dmesg stack trace">[details]</a></span>
> > 10-21-2016.dmesg stack trace
>
> Pushed another little thing to dp_mst_fixes
> 3852841d51ba ("drm/dp/mst: Clear port->pdt when tearing down the i2c
> adapter")
>
> I don't particularly like how that code is structured, so can't say with any
> certainty that this would help, but let's try anyway.</span >
With this last patch, it still fails the same way as before, no changes to the
values inside the struct that defines the port->connector, it seems it's
corrupted as it's no NULL but not valid at the same time.
In my debugging I added one simple check here,
@@ -1162,7 +1164,8 @@ static void drm_dp_add_port(struct drm_dp_mst_branch
*mstb,
drm_dp_put_port(port);
goto out;
}
- if (port->port_num >= DP_MST_LOGICAL_PORT_0) {
+ printk("************* Carlos %s %d port_num: %d port_status:
%d\n",__FUNCTION__,__LINE__,port->port_num, port->conne
+ if (port->port_num >= DP_MST_LOGICAL_PORT_0 &&
port->connector->status != connector_status_unknown) {
port->cached_edid = drm_get_edid(port->connector,
&port->aux.ddc);
drm_mode_connector_set_tile_property(port->connector);
}
where I skip calling drm_get_edid() if the status of the port becomes
"unknown",and with that the crash is avoided ( I still have to force the
modeset with CRTL+F1, CRTL+F7). This shows that the struct port->connector is
certainly not NULL yet it seems to arrive to this point with invalid data,
perhaps corrupted?
Another observation, one has to press the On/Off button for this to become a
problem, if I leave the system to suspend and then wake up the monitor with the
mouse, then I don't see the crash, so maybe it's a cleanup problem during the
off button sequence???</pre>
</div>
</p>
<hr>
<span>You are receiving this mail because:</span>
<ul>
<li>You are the QA Contact for the bug.</li>
<li>You are on the CC list for the bug.</li>
</ul>
</body>
</html>