From: Michel Dänzer <michel.daen...@amd.com>

If disabling a CRTC had to be deferred due to a pending flip in
drmmode_crtc_dpms, there may no longer be any outputs associated with
the CRTC when we get here. So we have to check for !crtc->enabled and
call drmmode_crtc_dpms in that case as well.

Fixes: 9090309e057d ("Wait for pending flips to complete before turning
off an output or CRTC")

Signed-off-by: Michel Dänzer <michel.daen...@amd.com>
---
 src/drmmode_display.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index cb228da..e474046 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -2181,8 +2181,9 @@ drmmode_clear_pending_flip(xf86CrtcPtr crtc)
 
        drmmode_crtc->flip_pending = FALSE;
 
-       if (drmmode_crtc->pending_dpms_mode != DPMSModeOn &&
-           drmmode_crtc->dpms_mode != drmmode_crtc->pending_dpms_mode) {
+       if (!crtc->enabled ||
+           (drmmode_crtc->pending_dpms_mode != DPMSModeOn &&
+            drmmode_crtc->dpms_mode != drmmode_crtc->pending_dpms_mode)) {
                xf86CrtcConfigPtr xf86_config = 
XF86_CRTC_CONFIG_PTR(crtc->scrn);
                int o;
 
@@ -2193,8 +2194,9 @@ drmmode_clear_pending_flip(xf86CrtcPtr crtc)
                                continue;
 
                        drmmode_output_dpms(output, 
drmmode_crtc->pending_dpms_mode);
-                       drmmode_crtc_dpms(crtc, 
drmmode_crtc->pending_dpms_mode);
                }
+
+               drmmode_crtc_dpms(crtc, drmmode_crtc->pending_dpms_mode);
        }
 }
 
-- 
2.9.3

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to