]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/mini-os.git/commitdiff
minios: make time interface POSIX
authorKeir Fraser <keir.fraser@citrix.com>
Mon, 21 Jan 2008 11:20:27 +0000 (11:20 +0000)
committerKeir Fraser <keir.fraser@citrix.com>
Mon, 21 Jan 2008 11:20:27 +0000 (11:20 +0000)
timespec uses tv_sec and tv_nsec too. gettimeofday takes a tz
argument.

Signed-off-by: Samuel Thibault <samuel.thibault@eu.citrix.com>
arch/ia64/time.c
arch/x86/time.c
include/sys/time.h [new file with mode: 0644]
include/time.h
kernel.c
sched.c

index e000ced0980124eab377bce3d6ae1772a0d14170..cda36e69d47a6da77d42138d8a514fff238d1e44 100644 (file)
@@ -147,10 +147,10 @@ calculate_time(void)
                new = itc_new - itc_alt;
        itc_alt = itc_new;
        new = ns_from_cycles(new);
-       os_time.ts_nsec += new;
-       if (os_time.ts_nsec > 1000000000) {     /* On overflow. */
-               os_time.ts_sec++;
-               os_time.ts_nsec -= 1000000000;
+       os_time.tv_nsec += new;
+       if (os_time.tv_nsec > 1000000000) {     /* On overflow. */
+               os_time.tv_sec++;
+               os_time.tv_nsec -= 1000000000;
        }
 }
 
@@ -177,12 +177,13 @@ monotonic_clock(void)
        return delta;
 }
 
-void
-gettimeofday(struct timeval *tv)
+int
+gettimeofday(struct timeval *tv, void *tz)
 {
        calculate_time();
-       tv->tv_sec = os_time.ts_sec;                    /* seconds */
-       tv->tv_usec = NSEC_TO_USEC(os_time.ts_nsec);    /* microseconds */
+       tv->tv_sec = os_time.tv_sec;                    /* seconds */
+       tv->tv_usec = NSEC_TO_USEC(os_time.tv_nsec);    /* microseconds */
+        return 0;
 };
 
 /*
@@ -253,16 +254,16 @@ init_time(void)
        itm_val = (itc_frequency + HZ/2) / HZ;
        printk("  itm_val: %ld\n", itm_val);
 
-       os_time.ts_sec = 0;
-       os_time.ts_nsec = 0;
+       os_time.tv_sec = 0;
+       os_time.tv_nsec = 0;
 
        if (efi_get_time(&tm)) {
                printk("  EFI-Time: %d.%d.%d   %d:%d:%d\n", tm.Day,
                       tm.Month, tm.Year, tm.Hour, tm.Minute, tm.Second);
-               os_time.ts_sec = mktime(SWAP(tm.Year), SWAP(tm.Month),
+               os_time.tv_sec = mktime(SWAP(tm.Year), SWAP(tm.Month),
                                        SWAP(tm.Day), SWAP(tm.Hour),
                                        SWAP(tm.Minute), SWAP(tm.Second));
-               os_time.ts_nsec = tm.Nanosecond;
+               os_time.tv_nsec = tm.Nanosecond;
        } else
                printk("efi_get_time() failed\n");
 
index 0fad40f6deaa3dac2f275190a6b99bf1c515ccf2..c8313705aec2e11a81f627bbe762410091c0c57f 100644 (file)
@@ -175,30 +175,32 @@ static void update_wallclock(void)
        do {
                shadow_ts_version = s->wc_version;
                rmb();
-               shadow_ts.ts_sec  = s->wc_sec;
-               shadow_ts.ts_nsec = s->wc_nsec;
+               shadow_ts.tv_sec  = s->wc_sec;
+               shadow_ts.tv_nsec = s->wc_nsec;
                rmb();
        }
        while ((s->wc_version & 1) | (shadow_ts_version ^ s->wc_version));
 }
 
 
-void gettimeofday(struct timeval *tv)
+int gettimeofday(struct timeval *tv, void *tz)
 {
     u64 nsec = monotonic_clock();
-    nsec += shadow_ts.ts_nsec;
+    nsec += shadow_ts.tv_nsec;
     
     
-    tv->tv_sec = shadow_ts.ts_sec;
+    tv->tv_sec = shadow_ts.tv_sec;
     tv->tv_sec += NSEC_TO_SEC(nsec);
     tv->tv_usec = NSEC_TO_USEC(nsec % 1000000000UL);
+
+    return 0;
 }
 
 
 void block_domain(s_time_t until)
 {
     struct timeval tv;
-    gettimeofday(&tv);
+    gettimeofday(&tv, NULL);
     if(monotonic_clock() < until)
     {
         HYPERVISOR_set_timer_op(until);
diff --git a/include/sys/time.h b/include/sys/time.h
new file mode 100644 (file)
index 0000000..87887c2
--- /dev/null
@@ -0,0 +1,38 @@
+/* -*-  Mode:C; c-basic-offset:4; tab-width:4 -*-
+ ****************************************************************************
+ * (C) 2003 - Rolf Neugebauer - Intel Research Cambridge
+ * (C) 2005 - Grzegorz Milos - Intel Research Cambridge
+ ****************************************************************************
+ *
+ *        File: time.h
+ *      Author: Rolf Neugebauer (neugebar@dcs.gla.ac.uk)
+ *     Changes: Grzegorz Milos (gm281@cam.ac.uk)
+ *              Robert Kaiser (kaiser@informatik.fh-wiesbaden.de)
+ *              
+ *        Date: Jul 2003, changes: Jun 2005, Sep 2006
+ * 
+ * Environment: Xen Minimal OS
+ * Description: Time and timer functions
+ *
+ ****************************************************************************
+ */
+
+#ifndef _MINIOS_SYS_TIME_H_
+#define _MINIOS_SYS_TIME_H_
+
+struct timespec {
+    time_t      tv_sec;
+    long        tv_nsec;
+};
+
+struct timezone {
+};
+
+struct timeval {
+       time_t          tv_sec;         /* seconds */
+       suseconds_t     tv_usec;        /* microseconds */
+};
+
+int      gettimeofday(struct timeval *tv, void *tz);
+
+#endif /* _MINIOS_SYS_TIME_H_ */
index ab844e8ede8b0fc51e2a338c998d423cd85fa70e..914f2fcff2c0f020fa1bc6cd8219bca1b2f04f6c 100644 (file)
@@ -38,20 +38,13 @@ typedef s64 s_time_t;
 #define Time_Max                ((s_time_t) 0x7fffffffffffffffLL)
 #define FOREVER                 Time_Max
 #define NSEC_TO_USEC(_nsec)     ((_nsec) / 1000UL)
+#define NSEC_TO_MSEC(_nsec)     ((_nsec) / 1000000ULL)
 #define NSEC_TO_SEC(_nsec)      ((_nsec) / 1000000000ULL)
 
 /* wall clock time  */
 typedef long time_t;
 typedef long suseconds_t;
-struct timeval {
-       time_t          tv_sec;         /* seconds */
-       suseconds_t     tv_usec;        /* microseconds */
-};
-
-struct timespec {
-    time_t      ts_sec;
-    long        ts_nsec;
-};
+#include <sys/time.h>
 
 
 /* prototypes */
@@ -59,7 +52,6 @@ void     init_time(void);
 s_time_t get_s_time(void);
 s_time_t get_v_time(void);
 u64      monotonic_clock(void);
-void     gettimeofday(struct timeval *tv);
 void     block_domain(s_time_t until);
 
 #endif /* _TIME_H_ */
index 9d18b22e1b176f28f7fc61e7f2dd6211dc796652..65c4467571f307ed00ea9877283cefc47d78013f 100644 (file)
--- a/kernel.c
+++ b/kernel.c
@@ -75,7 +75,7 @@ static void periodic_thread(void *p)
     printk("Periodic thread started.\n");
     for(;;)
     {
-        gettimeofday(&tv);
+        gettimeofday(&tv, NULL);
         printk("T(s=%ld us=%ld)\n", tv.tv_sec, tv.tv_usec);
         sleep(1000);
     }
diff --git a/sched.c b/sched.c
index f5f47783c7448881935f26dd672ff0f58752795f..5820d646893a63036a79b03a560d04cb9c219286 100644 (file)
--- a/sched.c
+++ b/sched.c
@@ -270,10 +270,10 @@ void th_f1(void *data)
         up(&mutex);
         
         
-        gettimeofday(&tv1);
+        gettimeofday(&tv1, NULL);
         for(;;)
         {
-            gettimeofday(&tv2);
+            gettimeofday(&tv2, NULL);
             if(tv2.tv_sec - tv1.tv_sec > 2) break;
         }