v3d: Fix the timeout value passed to drmSyncobjWait().
authorEric Anholt <eric@anholt.net>
Mon, 9 Jul 2018 20:18:34 +0000 (13:18 -0700)
committerEric Anholt <eric@anholt.net>
Fri, 20 Jul 2018 18:11:29 +0000 (11:11 -0700)
The API wants an absolute time, so we need to go add gallium's argument to
CLOCK_MONOTONIC.

src/gallium/drivers/v3d/v3d_fence.c

index 850e4a7441470f5784e0cf98f4c7fb442aefe224..f07ea17b0d3e1cb99a42609affd0764ac931d4d4 100644 (file)
@@ -35,6 +35,7 @@
  */
 
 #include "util/u_inlines.h"
+#include "util/os_time.h"
 
 #include "v3d_context.h"
 #include "v3d_bufmgr.h"
@@ -70,7 +71,11 @@ v3d_fence_finish(struct pipe_screen *pscreen,
         struct v3d_screen *screen = v3d_screen(pscreen);
         struct v3d_fence *f = (struct v3d_fence *)pf;
 
-        return drmSyncobjWait(screen->fd, &f->sync, 1, timeout_ns, 0, NULL) >= 0;
+        uint64_t abs_timeout = os_time_get_absolute_timeout(timeout_ns);
+        if (abs_timeout == OS_TIMEOUT_INFINITE)
+                abs_timeout = INT64_MAX;
+        return drmSyncobjWait(screen->fd, &f->sync, 1, abs_timeout,
+                              0, NULL) >= 0;
 }
 
 struct v3d_fence *