diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c index 9c24ea68..706a7eb4 100644 --- a/src/sna/sna_display.c +++ b/src/sna/sna_display.c @@ -1117,8 +1117,12 @@ static bool wait_for_shadow(struct sna *sna, damage = sna->mode.shadow_damage; sna->mode.shadow_damage = NULL; - while (sna->mode.flip_active && sna_mode_has_pending_events(sna)) - sna_mode_wakeup(sna); + if (sna->mode.flip_active) { + /* raw cmd to avoid setting wedged in the middle of an op */ + drmIoctl(sna->kgem.fd, DRM_IOCTL_I915_GEM_THROTTLE, 0); + while (sna->mode.flip_active && sna_mode_has_pending_events(sna)) + sna_mode_wakeup(sna); + } bo = sna->mode.shadow; if (sna->mode.flip_active) {