Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0b5154fb authored by John Stultz's avatar John Stultz
Browse files

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: default avatarJohn Stultz <john.stultz@linaro.org>
parent 06c017fd
Loading
Loading
Loading
Loading
+4 −5
Original line number Diff line number Diff line
@@ -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;
}