timekeeping; Use ktime based data for ktime_get_update_offsets_tick()
authorThomas Gleixner <tglx@linutronix.de>
Wed, 16 Jul 2014 21:04:20 +0000 (21:04 +0000)
committerJohn Stultz <john.stultz@linaro.org>
Wed, 23 Jul 2014 17:18:01 +0000 (10:18 -0700)
No need to juggle with timespecs.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: John Stultz <john.stultz@linaro.org>
kernel/time/timekeeping.c

index 54d9052..e993503 100644 (file)
@@ -1636,22 +1636,22 @@ ktime_t ktime_get_update_offsets_tick(ktime_t *offs_real, ktime_t *offs_boot,
                                                        ktime_t *offs_tai)
 {
        struct timekeeper *tk = &tk_core.timekeeper;
-       struct timespec64 ts;
-       ktime_t now;
        unsigned int seq;
+       ktime_t base;
+       u64 nsecs;
 
        do {
                seq = read_seqcount_begin(&tk_core.seq);
 
-               ts = tk_xtime(tk);
+               base = tk->base_mono;
+               nsecs = tk->xtime_nsec >> tk->shift;
+
                *offs_real = tk->offs_real;
                *offs_boot = tk->offs_boot;
                *offs_tai = tk->offs_tai;
        } while (read_seqcount_retry(&tk_core.seq, seq));
 
-       now = ktime_set(ts.tv_sec, ts.tv_nsec);
-       now = ktime_sub(now, *offs_real);
-       return now;
+       return ktime_add_ns(base, nsecs);
 }
 
 #ifdef CONFIG_HIGH_RES_TIMERS