1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
From 8fdc7b71354fbbbbc68fa8b2b810610ee41e052f Mon Sep 17 00:00:00 2001
From: Frank Hartmann <frank.hartmann@dreamchip.de>
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 <frank.hartmann@dreamchip.de>
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;
}
|