From 26c4e850b8a7d13afc351097ee6f6b2f3f90e2b9 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Wed, 25 Jun 2014 08:18:25 +0100 Subject: [PATCH] sna: Throttle before doing a TearFree buffer replacement If the client is rendering fast, he may be rendering too fast and starting to build up a backlog. Signed-off-by: Chris Wilson --- src/sna/sna_display.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) 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) {