summaryrefslogtreecommitdiff
path: root/src/drmmode_display.c
diff options
context:
space:
mode:
authorMichel Dänzer <michel.daenzer@amd.com>2018-07-10 18:57:49 +0200
committerMichel Dänzer <michel@daenzer.net>2018-07-12 18:08:19 +0200
commitcf8bc72e3473cef2b511e2c938eb00aca82de909 (patch)
tree3c31d96050787a62ccadfc7f3a4bd057ba775ef7 /src/drmmode_display.c
parentf01d8cf2bd9681b8f5f0e2eddec0a79614389771 (diff)
Wait for pending flips in drmmode_output_set_tear_free
This prevents a nested call to drmHandleEvent, which would hang. Fixes hangs when disabling TearFree on a CRTC while a DRI3 client is page flipping. (Ported from amdgpu commit 04947b83cce3a7782e59dece2c7797cc396c1e05) Acked-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'src/drmmode_display.c')
-rw-r--r--src/drmmode_display.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index ae605eda..003fe51e 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -1754,6 +1754,14 @@ drmmode_output_set_tear_free(RADEONEntPtr pRADEONEnt,
drmmode_output->tear_free = tear_free;
if (crtc) {
+ drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
+
+ /* Wait for pending flips before drmmode_set_mode_major calls
+ * drmmode_crtc_update_tear_free, to prevent a nested
+ * drmHandleEvent call, which would hang
+ */
+ drmmode_crtc_wait_pending_event(drmmode_crtc, pRADEONEnt->fd,
+ drmmode_crtc->flip_pending);
drmmode_set_mode_major(crtc, &crtc->mode, crtc->rotation,
crtc->x, crtc->y);
}