From 8fdc7b71354fbbbbc68fa8b2b810610ee41e052f Mon Sep 17 00:00:00 2001 From: Frank Hartmann Date: Fri, 5 Jan 2018 21:27:23 +0100 Subject: [PATCH 1/2] linux: avoid using CLOCK_SGI_CYCLE The call clock_gettime(CLOCK_SGI_CYCLE, &t) from function getticks() fails with EINVAL. See : http://elixir.free-electrons.com/linux/latest/source/include/uapi/linux/time.h#L62 - "The driver implementing this got removed. The clock ID is kept as a place holder. Do not reuse!" --- kernel/cycle.h | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/kernel/cycle.h b/kernel/cycle.h index fe3dd50d6..21d206e35 100644 --- a/kernel/cycle.h +++ b/kernel/cycle.h @@ -437,8 +437,18 @@ INLINE_ELAPSED(__inline) #define HAVE_TICK_COUNTER #endif /*----------------------------------------------------------------*/ -/* SGI/Irix */ -#if defined(HAVE_CLOCK_GETTIME) && defined(CLOCK_SGI_CYCLE) && !defined(HAVE_TICK_COUNTER) && !defined(__ANDROID__) +/* SGI/Irix/Linux but not android */ +#if !defined(__ANDROID__) +#if defined(HAVE_CLOCK_GETTIME) && !defined(HAVE_TICK_COUNTER) +#if defined(CLOCK_MONOTONIC) +#define METHOD CLOCK_MONOTONIC +#elif defined(CLOCK_REALTIME) +#define METHOD CLOCK_REALTIME +#elif defined(CLOCK_SGI_CYCLE) +#define METHOD CLOCK_SGI_CYCLE +#endif +#endif + typedef struct timespec ticks; static inline ticks getticks(void) From c68b27dedad182b0b222502d98cc9795787c2607 Mon Sep 17 00:00:00 2001 From: Frank Hartmann Date: Sun, 14 Jan 2018 16:52:30 +0100 Subject: [PATCH 2/2] linux: avoid using CLOCK_SGI_CYCLE, use METHOD --- kernel/cycle.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/kernel/cycle.h b/kernel/cycle.h index 21d206e35..777d1cda5 100644 --- a/kernel/cycle.h +++ b/kernel/cycle.h @@ -438,8 +438,8 @@ INLINE_ELAPSED(__inline) #endif /*----------------------------------------------------------------*/ /* SGI/Irix/Linux but not android */ -#if !defined(__ANDROID__) -#if defined(HAVE_CLOCK_GETTIME) && !defined(HAVE_TICK_COUNTER) +#if !defined(__ANDROID__) && !defined(HAVE_TICK_COUNTER) +#if defined(HAVE_CLOCK_GETTIME) #if defined(CLOCK_MONOTONIC) #define METHOD CLOCK_MONOTONIC #elif defined(CLOCK_REALTIME) @@ -454,7 +454,7 @@ typedef struct timespec ticks; static inline ticks getticks(void) { struct timespec t; - clock_gettime(CLOCK_SGI_CYCLE, &t); + clock_gettime(METHOD, &t); return t; }