Ping, any update on this? On Wed, 2016-05-18 at 17:35 -0400, Lyude wrote: > From: Lyude Paul <cpaul@xxxxxxxxxx> > > DRM does not always update the status of each connector during a > hotplug event, and it's generally expected that userspace is supposed > to > handle that by reprobing. This happens in a couple situations: > suspend/resume, MST hotplugs, and probably a few others. As a result, > making this assumption actually breaks MST hotplugging. > > Signed-off-by: Lyude <cpaul@xxxxxxxxxx> > --- > src/sna/sna_display.c | 17 +++++------------ > 1 file changed, 5 insertions(+), 12 deletions(-) > > diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c > index 16d0321..6299d1e 100644 > --- a/src/sna/sna_display.c > +++ b/src/sna/sna_display.c > @@ -5038,14 +5038,11 @@ output_check_status(struct sna *sna, struct > sna_output *output) > switch (compat_conn.conn.connection) { > case DRM_MODE_CONNECTED: > status = XF86OutputStatusConnected; > - break; > case DRM_MODE_DISCONNECTED: > status = XF86OutputStatusDisconnected; > - break; > default: > case DRM_MODE_UNKNOWNCONNECTION: > status = XF86OutputStatusUnknown; > - break; > } > return output->status == status; > } > @@ -5055,7 +5052,7 @@ void sna_mode_discover(struct sna *sna, bool > tell) > ScreenPtr screen = xf86ScrnToScreen(sna->scrn); > xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(sna->scrn); > struct drm_mode_card_res res; > - uint32_t connectors[32], now; > + uint32_t connectors[32]; > unsigned changed = 0; > unsigned serial; > int i, j; > @@ -5087,7 +5084,6 @@ void sna_mode_discover(struct sna *sna, bool > tell) > if (serial == 0) > serial = ++sna->mode.serial; > > - now = GetTimeInMillis(); > for (i = 0; i < res.count_connectors; i++) { > DBG(("%s: connector[%d] = %d\n", __FUNCTION__, i, > connectors[i])); > for (j = 0; j < sna->mode.num_real_output; j++) { > @@ -5113,13 +5109,10 @@ void sna_mode_discover(struct sna *sna, bool > tell) > continue; > > if (sna_output->serial == serial) { > - if (output_check_status(sna, sna_output)) { > - DBG(("%s: output %s (id=%d), > retained state\n", > - __FUNCTION__, output->name, > sna_output->id)); > - sna_output->last_detect = now; > - } else { > - DBG(("%s: output %s (id=%d), changed > state, reprobing\n", > - __FUNCTION__, output->name, > sna_output->id)); > + if (!output_check_status(sna, sna_output)) { > + DBG(("%s: output %s (id=%d), changed > state, reprobing]\n", > + __FUNCTION__, output->name, > sna_output->id, > + sna_output->serial, serial)); > sna_output->last_detect = 0; > changed |= 4; > } -- Cheers, Lyude _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx