Mesa (master): gallium/os: use CLOCK_MONOTONIC for sleeps (v2)

Marek Olšák mareko at kemper.freedesktop.org
Fri Jul 22 20:36:04 UTC 2016


Module: Mesa
Branch: master
Commit: 4cdc482283f87b2325d51f5d6369fa44434902ae
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=4cdc482283f87b2325d51f5d6369fa44434902ae

Author: Marek Olšák <marek.olsak at amd.com>
Date:   Sat Jul 16 18:38:21 2016 +0200

gallium/os: use CLOCK_MONOTONIC for sleeps (v2)

v2: handle EINTR, remove backslashes

Reviewed-by: Eric Engestrom <eric.engestrom at imgtec.com>

---

 src/gallium/auxiliary/os/os_time.c | 16 ++++++++++++++--
 src/gallium/auxiliary/os/os_time.h |  4 ----
 2 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/src/gallium/auxiliary/os/os_time.c b/src/gallium/auxiliary/os/os_time.c
index 3d2e416..e169139 100644
--- a/src/gallium/auxiliary/os/os_time.c
+++ b/src/gallium/auxiliary/os/os_time.c
@@ -40,6 +40,7 @@
 #  include <time.h> /* timeval */
 #  include <sys/time.h> /* timeval */
 #  include <sched.h> /* sched_yield */
+#  include <errno.h>
 #elif defined(PIPE_SUBSYSTEM_WINDOWS_USER)
 #  include <windows.h>
 #else
@@ -81,19 +82,30 @@ os_time_get_nano(void)
 }
 
 
-#if defined(PIPE_SUBSYSTEM_WINDOWS_USER)
 
 void
 os_time_sleep(int64_t usecs)
 {
+#if defined(PIPE_OS_LINUX)
+   struct timespec time;
+   time.tv_sec = usecs / 1000000;
+   time.tv_nsec = (usecs % 1000000) * 1000;
+   while (clock_nanosleep(CLOCK_MONOTONIC, 0, &time, &time) == EINTR);
+
+#elif defined(PIPE_OS_UNIX)
+   usleep(usecs);
+
+#elif defined(PIPE_SUBSYSTEM_WINDOWS_USER)
    DWORD dwMilliseconds = (DWORD) ((usecs + 999) / 1000);
    /* Avoid Sleep(O) as that would cause to sleep for an undetermined duration */
    if (dwMilliseconds) {
       Sleep(dwMilliseconds);
    }
+#else
+#  error Unsupported OS
+#endif
 }
 
-#endif
 
 
 int64_t
diff --git a/src/gallium/auxiliary/os/os_time.h b/src/gallium/auxiliary/os/os_time.h
index 9312e02..ca0bdd5 100644
--- a/src/gallium/auxiliary/os/os_time.h
+++ b/src/gallium/auxiliary/os/os_time.h
@@ -70,12 +70,8 @@ os_time_get(void)
 /*
  * Sleep.
  */
-#if defined(PIPE_OS_UNIX)
-#define os_time_sleep(_usecs) usleep(_usecs)
-#else
 void
 os_time_sleep(int64_t usecs);
-#endif
 
 
 /*




More information about the mesa-commit mailing list