[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v3 2/7] add current_time function to time manager
From: Paul Semel <phentex@xxxxxxxxx> this function returns the "epoch" time Signed-off-by: Paul Semel <phentex@xxxxxxxxx> --- common/time.c | 39 +++++++++++++++++++++++++++++++++++++++ include/xtf/time.h | 4 ++++ 2 files changed, 43 insertions(+) diff --git a/common/time.c b/common/time.c index 7859c21..29b38ca 100644 --- a/common/time.c +++ b/common/time.c @@ -3,6 +3,7 @@ #include <xtf/time.h> #include <arch/barrier.h> +#include <arch/div.h> /* This function was taken from mini-os source code */ /* It returns ((delta << shift) * mul_frac) >> 32 */ @@ -70,6 +71,44 @@ uint64_t since_boot_time(void) return system_time; } +static void get_time_info(uint64_t *boot_time, uint64_t *sec, uint32_t *nsec) +{ + uint32_t ver1, ver2; + do { + ver1 = ACCESS_ONCE(shared_info.wc_version); + smp_rmb(); + *boot_time = since_boot_time(); +#if defined(__i386__) + *sec = (uint64_t)ACCESS_ONCE(shared_info.wc_sec); +#else + *sec = ((uint64_t)ACCESS_ONCE(shared_info.wc_sec_hi) << 32) + | ACCESS_ONCE(shared_info.wc_sec); +#endif + *nsec = (uint64_t)ACCESS_ONCE(shared_info.wc_nsec); + smp_rmb(); + ver2 = ACCESS_ONCE(shared_info.wc_version); + smp_rmb(); + } while ( (ver1 & 1) != 0 && ver1 != ver2 ); +} + +/* This function return the epoch time (number of seconds elapsed + * since Juanary 1, 1970) */ +uint64_t current_time(void) +{ + uint32_t nsec; + uint64_t boot_time, sec; + + get_time_info(&boot_time, &sec, &nsec); + +#if defined(__i386__) + divmod64(&boot_time, SEC_TO_NSEC(1)); +#else + boot_time /= SEC_TO_NSEC(1); +#endif + + return sec + boot_time; +} + /* * Local variables: * mode: C diff --git a/include/xtf/time.h b/include/xtf/time.h index b88da63..4d94958 100644 --- a/include/xtf/time.h +++ b/include/xtf/time.h @@ -14,10 +14,14 @@ tsc = ((uint64_t)hi << 32) | lo;\ } +#define SEC_TO_NSEC(x) ((x) * 1000000000ul) + /* Time from boot in nanoseconds */ uint64_t since_boot_time(void); +uint64_t current_time(void); + #endif /* XTF_TIME_H */ /* -- 2.16.1 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |