timekeeping: Simplify tai updating from do_adjtimex
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>
This commit is contained in:
Родитель
06c017fdd4
Коммит
0b5154fb90
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче