Skip to content

Commit

Permalink
timekeeping: Simplify tai updating from do_adjtimex
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
John Stultz committed Apr 4, 2013
1 parent 06c017f commit 0b5154f
Showing 1 changed file with 4 additions and 5 deletions.
9 changes: 4 additions & 5 deletions kernel/time/timekeeping.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand All @@ -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;
}

Expand Down

0 comments on commit 0b5154f

Please sign in to comment.