[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Minios-devel] [UNIKRAFT/NEWLIB PATCH] Implement gettimeofday, clock_gettime, sleep



The implementations are taken from nolibc.

Signed-off-by: Florian Schmidt <florian.schmidt@xxxxxxxxx>
---
 include/time.h |  1 +
 time.c         | 43 +++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 44 insertions(+)

diff --git a/include/time.h b/include/time.h
index dd2eef2..2718515 100644
--- a/include/time.h
+++ b/include/time.h
@@ -59,6 +59,7 @@
 #endif /* __DYNAMIC_REENT__ */
 #endif /* __rtems__ */
 
+#define _POSIX_MONOTONIC_CLOCK 1
 #include_next <time.h>
 
 /* cleanup __rtems__ */
diff --git a/time.c b/time.c
index fa887ba..dccf8a1 100644
--- a/time.c
+++ b/time.c
@@ -36,6 +36,7 @@
  */
 
 #include <errno.h>
+#include <time.h>
 #include <sys/time.h>
 #include <utime.h>
 #include <uk/plat/time.h>
@@ -49,6 +50,15 @@
 int
 gettimeofday(struct timeval *tv __unused, void *tz __unused)
 {
+       __nsec now = ukplat_wall_clock();
+
+       if (!tv) {
+               errno = EINVAL;
+               return -1;
+       }
+
+       tv->tv_sec = ukarch_time_nsec_to_sec(now);
+       tv->tv_usec = ukarch_time_nsec_to_usec(ukarch_time_subsec(now));
        return 0;
 }
 
@@ -103,7 +113,40 @@ int nanosleep(const struct timespec *req, struct timespec 
*rem)
        return 0;
 }
 
+unsigned int sleep(unsigned int seconds)
+{
+       struct timespec ts;
+
+       ts.tv_sec = seconds;
+       ts.tv_nsec = 0;
+       if (nanosleep(&ts, &ts))
+               return ts.tv_sec;
+
+       return 0;
+}
+
 int clock_gettime(clockid_t clk_id __unused, struct timespec *tp __unused)
 {
+       __nsec now;
+
+       if (!tp) {
+               errno = EFAULT;
+               return -1;
+       }
+
+       switch (clk_id) {
+       case CLOCK_MONOTONIC:
+               now = ukplat_monotonic_clock();
+               break;
+       case CLOCK_REALTIME:
+               now = ukplat_wall_clock();
+               break;
+       default:
+               errno = EINVAL;
+               return -1;
+       }
+
+       tp->tv_sec = ukarch_time_nsec_to_sec(now);
+       tp->tv_nsec = ukarch_time_subsec(now);
        return 0;
 }
-- 
2.21.0


_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.