iris: Fix accidental busy-looping in query waits
authorKenneth Graunke <kenneth@whitecape.org>
Thu, 7 Feb 2019 16:41:29 +0000 (08:41 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 21 Feb 2019 18:26:11 +0000 (10:26 -0800)
When switching from bo_wait to sync-points, I missed that we turned an
if (not landed) bo_wait into a while (not landed) check_syncpt(), which
has a timeout of 0.  This meant, rather than sleeping until the batch
is complete, we'd busy-loop, continually asking the kernel "is the batch
done yet???".  This is not what we want at all - if we wanted a busy
loop, we'd just loop on !snapshots_landed.  We want to sleep.

Add an effectively infinite timeout so that we sleep.

src/gallium/drivers/iris/iris_query.c

index 6e8062f3b4ed5e3716fa0ee18925515b404e416f..c5130bda36a23b3fb5cb383501a50be375195a62 100644 (file)
@@ -876,7 +876,7 @@ iris_get_query_result(struct pipe_context *ctx,
 
       while (!q->map->snapshots_landed) {
          if (wait)
-            iris_wait_syncpt(ctx->screen, q->syncpt, 0);
+            iris_wait_syncpt(ctx->screen, q->syncpt, INT64_MAX);
          else
             return false;
       }