diff options
| author | Jeff Garzik <jgarzik@pobox.com> | 2005-12-12 15:24:45 -0500 |
|---|---|---|
| committer | Jeff Garzik <jgarzik@pobox.com> | 2005-12-12 15:24:45 -0500 |
| commit | b1086eef813ecee09bd6b8ae364acf0fad065cba (patch) | |
| tree | bc723bbdfc2898252e3fd8e14320d7fac58dca4b /kernel/time.c | |
| parent | 003a20c81ec278595820d3829b544e90919f6f61 (diff) | |
| parent | 49d7bc64283970ee83d2c954d04ba00d04e5943d (diff) | |
Merge branch 'master'
Diffstat (limited to 'kernel/time.c')
| -rw-r--r-- | kernel/time.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/kernel/time.c b/kernel/time.c index 245d595a13cb..b94bfa8c03e0 100644 --- a/kernel/time.c +++ b/kernel/time.c @@ -561,6 +561,28 @@ void getnstimeofday(struct timespec *tv) EXPORT_SYMBOL_GPL(getnstimeofday); #endif +void getnstimestamp(struct timespec *ts) +{ + unsigned int seq; + struct timespec wall2mono; + + /* synchronize with settimeofday() changes */ + do { + seq = read_seqbegin(&xtime_lock); + getnstimeofday(ts); + wall2mono = wall_to_monotonic; + } while(unlikely(read_seqretry(&xtime_lock, seq))); + + /* adjust to monotonicaly-increasing values */ + ts->tv_sec += wall2mono.tv_sec; + ts->tv_nsec += wall2mono.tv_nsec; + while (unlikely(ts->tv_nsec >= NSEC_PER_SEC)) { + ts->tv_nsec -= NSEC_PER_SEC; + ts->tv_sec++; + } +} +EXPORT_SYMBOL_GPL(getnstimestamp); + #if (BITS_PER_LONG < 64) u64 get_jiffies_64(void) { |
