minios: make time interface POSIX
PATCH 1/1 minios: make time interface POSIX
minios: make time interface POSIX
timespec uses tv_sec and tv_nsec too. gettimeofday takes a tz argument.
Signed-off-by Samuel Thibault <[email protected]>
extras/mini-os/arch/ia64/time.c +13 -12
@@ -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" );
extras/mini-os/arch/x86/time.c +8 -6
@@ -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);
extras/mini-os/include/time.h +2 -10
@@ -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 @@ s_time_t get_s_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_ */
extras/mini-os/kernel.c +1 -1
@@ -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 ); }
extras/mini-os/sched.c +2 -2
@@ -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 ; }
extras/mini-os/include/sys/time.h new file +38 -0
@@ -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 ([email protected]) +* Changes: Grzegorz Milos ([email protected]) +* Robert Kaiser ([email protected]) +* +* 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_ */