From: Michel Dänzer <[email protected]>

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.

Signed-off-by: Michel Dänzer <[email protected]>
---
 src/drmmode_display.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index cf1e5d1f1..4fac645b9 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -1750,6 +1750,15 @@ drmmode_output_set_tear_free(AMDGPUEntPtr pAMDGPUEnt,
        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,
+                                               pAMDGPUEnt->fd,
+                                               drmmode_crtc->flip_pending);
                drmmode_set_mode_major(crtc, &crtc->mode, crtc->rotation,
                                       crtc->x, crtc->y);
        }
-- 
2.17.0

_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to