[Mesa-dev] [PATCH] gallium/os: use CLOCK_MONOTONIC for sleeps (v2)

Eric Engestrom eric.engestrom at imgtec.com
Wed Jul 20 12:58:57 UTC 2016


On Tue, Jul 19, 2016 at 06:29:20PM +0200, Marek Olšák wrote:
> From: Marek Olšák <marek.olsak at amd.com>
> 
> v2: handle EINTR, remove backslashes

I was a bit surprised by the way you use clock_nanosleep(), but
I checked the man and you're right :)
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
>  
>  
>  /*
> -- 
> 2.7.4


More information about the mesa-dev mailing list