diff options
Diffstat (limited to 'kernel/time/timekeeping.c')
| -rw-r--r-- | kernel/time/timekeeping.c | 9 | 
1 files changed, 4 insertions, 5 deletions
| diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c index d10bd734b15..f93f60cd97a 100644 --- a/kernel/time/timekeeping.c +++ b/kernel/time/timekeeping.c @@ -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;  } |