]> Pileus Git - ~andy/linux/commitdiff
timekeeping: Simplify tai updating from do_adjtimex
authorJohn Stultz <john.stultz@linaro.org>
Fri, 22 Mar 2013 21:20:03 +0000 (14:20 -0700)
committerJohn Stultz <john.stultz@linaro.org>
Thu, 4 Apr 2013 20:18:16 +0000 (13:18 -0700)
Since we are taking the timekeeping locks, just go ahead
and update any tai change directly, rather then dropping
the lock and calling a function that will just take it again.

Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Richard Cochran <richardcochran@gmail.com>
Cc: Prarit Bhargava <prarit@redhat.com>
Signed-off-by: John Stultz <john.stultz@linaro.org>
kernel/time/timekeeping.c

index d10bd734b1516be095d120b53704e7123a8b9583..f93f60cd97ad570767dbbfc6d38e5f0b7bfe4b88 100644 (file)
@@ -1618,9 +1618,10 @@ EXPORT_SYMBOL_GPL(ktime_get_monotonic_offset);
  */
 int do_adjtimex(struct timex *txc)
 {
+       struct timekeeper *tk = &timekeeper;
        unsigned long flags;
        struct timespec ts;
-       s32 tai, orig_tai;
+       s32 tai;
        int ret;
 
        /* Validate the data before disabling interrupts */
@@ -1640,19 +1641,17 @@ int do_adjtimex(struct timex *txc)
        }
 
        getnstimeofday(&ts);
-       orig_tai = tai = timekeeping_get_tai_offset();
 
        raw_spin_lock_irqsave(&timekeeper_lock, flags);
        write_seqcount_begin(&timekeeper_seq);
 
+       tai = tk->tai_offset;
        ret = __do_adjtimex(txc, &ts, &tai);
 
+       __timekeeping_set_tai_offset(tk, tai);
        write_seqcount_end(&timekeeper_seq);
        raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
 
-       if (tai != orig_tai)
-               timekeeping_set_tai_offset(tai);
-
        return ret;
 }