From f22ea4e821a33eccd3a9283d7ab048857008f7e8 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Sun, 22 Jun 2014 17:53:59 +0100 Subject: [PATCH] sna: Disable unused CRTC after undock events If undocking removes output (as the MST topology changes and some outputs then become unreachable), we may leave dangling CRTC. This confuses us, so disable any enabled but unconnected CRTC after the undock event. Reported-by: Sree Harsha Totakura References: https://bugs.freedesktop.org/show_bug.cgi?id=80355#c5 Signed-off-by: Chris Wilson --- src/sna/sna_display.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c index 0cee970d..e7dd3d8d 100644 --- a/src/sna/sna_display.c +++ b/src/sna/sna_display.c @@ -3506,6 +3506,7 @@ static void sna_output_del(xf86OutputPtr output) xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(scrn); int i; + DBG(("%s(%s)\n", __FUNCTION__, output->name)); assert(to_sna_output(output)); RROutputDestroy(output->randr_output); @@ -3549,7 +3550,7 @@ void sna_mode_discover(struct sna *sna) struct drm_mode_card_res res; uint32_t connectors[32]; int i, j, serial; - bool changed = false; + int changed = 0; VG_CLEAR(connectors); @@ -3589,7 +3590,7 @@ void sna_mode_discover(struct sna *sna) to_sna_output(output)->id = 0; output->crtc = NULL; } - changed = true; + changed |= 2; } } @@ -3598,6 +3599,10 @@ void sna_mode_discover(struct sna *sna) /* Reorder user visible listing */ sort_randr_outputs(sna, screen); + + if (changed & 2) + xf86DisableUnusedFunctions(sna->scrn); + xf86RandR12TellChanged(screen); } }