[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Minios-devel] [UNIKRAFT PATCH v4 8/9] plat/linuxu: Add monotonic clock
From: Simon Kuenzer <simon.kuenzer@xxxxxxxxx> Implement ukplat_monotonic_clock() with clock_gettime() system call. Signed-off-by: Simon Kuenzer <simon.kuenzer@xxxxxxxxx> Signed-off-by: Florian Schmidt <florian.schmidt@xxxxxxxxx> --- plat/linuxu/include/linuxu/syscall-arm_32.h | 1 + plat/linuxu/include/linuxu/syscall-x86_64.h | 1 + plat/linuxu/include/linuxu/syscall.h | 7 +++++++ plat/linuxu/include/linuxu/time.h | 1 + plat/linuxu/time.c | 15 +++++++++++++-- 5 files changed, 23 insertions(+), 2 deletions(-) diff --git a/plat/linuxu/include/linuxu/syscall-arm_32.h b/plat/linuxu/include/linuxu/syscall-arm_32.h index b393627..c3a684c 100644 --- a/plat/linuxu/include/linuxu/syscall-arm_32.h +++ b/plat/linuxu/include/linuxu/syscall-arm_32.h @@ -53,6 +53,7 @@ #define __SC_TIMER_GETTIME 259 #define __SC_TIMER_GETOVERRUN 260 #define __SC_TIMER_DELETE 261 +#define __SC_CLOCK_GETTIME 263 #define __SC_PSELECT6 335 /* NOTE: from `man syscall`: diff --git a/plat/linuxu/include/linuxu/syscall-x86_64.h b/plat/linuxu/include/linuxu/syscall-x86_64.h index fb09dd5..26820dc 100644 --- a/plat/linuxu/include/linuxu/syscall-x86_64.h +++ b/plat/linuxu/include/linuxu/syscall-x86_64.h @@ -53,6 +53,7 @@ #define __SC_TIMER_GETTIME 224 #define __SC_TIMER_GETOVERRUN 225 #define __SC_TIMER_DELETE 226 +#define __SC_CLOCK_GETTIME 228 #define __SC_PSELECT6 270 /* NOTE: from linux-4.6.3 (arch/x86/entry/entry_64.S): diff --git a/plat/linuxu/include/linuxu/syscall.h b/plat/linuxu/include/linuxu/syscall.h index 6df3108..edd7458 100644 --- a/plat/linuxu/include/linuxu/syscall.h +++ b/plat/linuxu/include/linuxu/syscall.h @@ -70,6 +70,13 @@ static inline int sys_exit(int status) (long) (status)); } +static inline int sys_clock_gettime(clockid_t clk_id, struct timespec *tp) +{ + return (int) syscall2(__SC_CLOCK_GETTIME, + (long) clk_id, + (long) tp); +} + /* * Please note that on failure sys_mmap() is returning -errno */ diff --git a/plat/linuxu/include/linuxu/time.h b/plat/linuxu/include/linuxu/time.h index c4c97e1..94bf91b 100644 --- a/plat/linuxu/include/linuxu/time.h +++ b/plat/linuxu/include/linuxu/time.h @@ -41,5 +41,6 @@ /* POSIX definitions */ #define CLOCK_REALTIME 0 +#define CLOCK_MONOTONIC 1 #endif /* __LINUXU_TIME_H__ */ diff --git a/plat/linuxu/time.c b/plat/linuxu/time.c index e1fae2c..9c9d0bb 100644 --- a/plat/linuxu/time.c +++ b/plat/linuxu/time.c @@ -34,6 +34,7 @@ */ #include <string.h> +#include <time.h> #include <uk/plat/time.h> #include <uk/plat/irq.h> #include <uk/assert.h> @@ -47,8 +48,18 @@ static timer_t timerid; __nsec ukplat_monotonic_clock(void) { - /* TODO */ - return 0; + struct timespec tp; + __nsec ret; + int rc; + + rc = sys_clock_gettime(CLOCK_MONOTONIC, &tp); + if (unlikely(rc != 0)) + return 0; + + ret = ukarch_time_sec_to_nsec((__nsec) tp.tv_sec); + ret += (__nsec) tp.tv_nsec; + + return ret; } static int timer_handler(void *arg __unused) -- 2.18.0 _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |