From: Michel Dänzer <michel.daenzer@xxxxxxx> 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.daenzer at 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