xref: /linux/kernel/time/ntp.c (revision f43dc23d5ea91fca257be02138a255f02d98e806)
1 /*
2  * NTP state machine interfaces and logic.
3  *
4  * This code was mainly moved from kernel/timer.c and kernel/time.c
5  * Please see those files for relevant copyright info and historical
6  * changelogs.
7  */
8 #include <linux/capability.h>
9 #include <linux/clocksource.h>
10 #include <linux/workqueue.h>
11 #include <linux/hrtimer.h>
12 #include <linux/jiffies.h>
13 #include <linux/math64.h>
14 #include <linux/timex.h>
15 #include <linux/time.h>
16 #include <linux/mm.h>
17 
18 /*
19  * NTP timekeeping variables:
20  */
21 
22 /* USER_HZ period (usecs): */
23 unsigned long			tick_usec = TICK_USEC;
24 
25 /* ACTHZ period (nsecs): */
26 unsigned long			tick_nsec;
27 
28 u64				tick_length;
29 static u64			tick_length_base;
30 
31 static struct hrtimer		leap_timer;
32 
33 #define MAX_TICKADJ		500LL		/* usecs */
34 #define MAX_TICKADJ_SCALED \
35 	(((MAX_TICKADJ * NSEC_PER_USEC) << NTP_SCALE_SHIFT) / NTP_INTERVAL_FREQ)
36 
37 /*
38  * phase-lock loop variables
39  */
40 
41 /*
42  * clock synchronization status
43  *
44  * (TIME_ERROR prevents overwriting the CMOS clock)
45  */
46 static int			time_state = TIME_OK;
47 
48 /* clock status bits:							*/
49 int				time_status = STA_UNSYNC;
50 
51 /* TAI offset (secs):							*/
52 static long			time_tai;
53 
54 /* time adjustment (nsecs):						*/
55 static s64			time_offset;
56 
57 /* pll time constant:							*/
58 static long			time_constant = 2;
59 
60 /* maximum error (usecs):						*/
61 static long			time_maxerror = NTP_PHASE_LIMIT;
62 
63 /* estimated error (usecs):						*/
64 static long			time_esterror = NTP_PHASE_LIMIT;
65 
66 /* frequency offset (scaled nsecs/secs):				*/
67 static s64			time_freq;
68 
69 /* time at last adjustment (secs):					*/
70 static long			time_reftime;
71 
72 static long			time_adjust;
73 
74 /* constant (boot-param configurable) NTP tick adjustment (upscaled)	*/
75 static s64			ntp_tick_adj;
76 
77 /*
78  * NTP methods:
79  */
80 
81 /*
82  * Update (tick_length, tick_length_base, tick_nsec), based
83  * on (tick_usec, ntp_tick_adj, time_freq):
84  */
85 static void ntp_update_frequency(void)
86 {
87 	u64 second_length;
88 	u64 new_base;
89 
90 	second_length		 = (u64)(tick_usec * NSEC_PER_USEC * USER_HZ)
91 						<< NTP_SCALE_SHIFT;
92 
93 	second_length		+= ntp_tick_adj;
94 	second_length		+= time_freq;
95 
96 	tick_nsec		 = div_u64(second_length, HZ) >> NTP_SCALE_SHIFT;
97 	new_base		 = div_u64(second_length, NTP_INTERVAL_FREQ);
98 
99 	/*
100 	 * Don't wait for the next second_overflow, apply
101 	 * the change to the tick length immediately:
102 	 */
103 	tick_length		+= new_base - tick_length_base;
104 	tick_length_base	 = new_base;
105 }
106 
107 static inline s64 ntp_update_offset_fll(s64 offset64, long secs)
108 {
109 	time_status &= ~STA_MODE;
110 
111 	if (secs < MINSEC)
112 		return 0;
113 
114 	if (!(time_status & STA_FLL) && (secs <= MAXSEC))
115 		return 0;
116 
117 	time_status |= STA_MODE;
118 
119 	return div_s64(offset64 << (NTP_SCALE_SHIFT - SHIFT_FLL), secs);
120 }
121 
122 static void ntp_update_offset(long offset)
123 {
124 	s64 freq_adj;
125 	s64 offset64;
126 	long secs;
127 
128 	if (!(time_status & STA_PLL))
129 		return;
130 
131 	if (!(time_status & STA_NANO))
132 		offset *= NSEC_PER_USEC;
133 
134 	/*
135 	 * Scale the phase adjustment and
136 	 * clamp to the operating range.
137 	 */
138 	offset = min(offset, MAXPHASE);
139 	offset = max(offset, -MAXPHASE);
140 
141 	/*
142 	 * Select how the frequency is to be controlled
143 	 * and in which mode (PLL or FLL).
144 	 */
145 	secs = get_seconds() - time_reftime;
146 	if (unlikely(time_status & STA_FREQHOLD))
147 		secs = 0;
148 
149 	time_reftime = get_seconds();
150 
151 	offset64    = offset;
152 	freq_adj    = ntp_update_offset_fll(offset64, secs);
153 
154 	/*
155 	 * Clamp update interval to reduce PLL gain with low
156 	 * sampling rate (e.g. intermittent network connection)
157 	 * to avoid instability.
158 	 */
159 	if (unlikely(secs > 1 << (SHIFT_PLL + 1 + time_constant)))
160 		secs = 1 << (SHIFT_PLL + 1 + time_constant);
161 
162 	freq_adj    += (offset64 * secs) <<
163 			(NTP_SCALE_SHIFT - 2 * (SHIFT_PLL + 2 + time_constant));
164 
165 	freq_adj    = min(freq_adj + time_freq, MAXFREQ_SCALED);
166 
167 	time_freq   = max(freq_adj, -MAXFREQ_SCALED);
168 
169 	time_offset = div_s64(offset64 << NTP_SCALE_SHIFT, NTP_INTERVAL_FREQ);
170 }
171 
172 /**
173  * ntp_clear - Clears the NTP state variables
174  *
175  * Must be called while holding a write on the xtime_lock
176  */
177 void ntp_clear(void)
178 {
179 	time_adjust	= 0;		/* stop active adjtime() */
180 	time_status	|= STA_UNSYNC;
181 	time_maxerror	= NTP_PHASE_LIMIT;
182 	time_esterror	= NTP_PHASE_LIMIT;
183 
184 	ntp_update_frequency();
185 
186 	tick_length	= tick_length_base;
187 	time_offset	= 0;
188 }
189 
190 /*
191  * Leap second processing. If in leap-insert state at the end of the
192  * day, the system clock is set back one second; if in leap-delete
193  * state, the system clock is set ahead one second.
194  */
195 static enum hrtimer_restart ntp_leap_second(struct hrtimer *timer)
196 {
197 	enum hrtimer_restart res = HRTIMER_NORESTART;
198 
199 	write_seqlock(&xtime_lock);
200 
201 	switch (time_state) {
202 	case TIME_OK:
203 		break;
204 	case TIME_INS:
205 		timekeeping_leap_insert(-1);
206 		time_state = TIME_OOP;
207 		printk(KERN_NOTICE
208 			"Clock: inserting leap second 23:59:60 UTC\n");
209 		hrtimer_add_expires_ns(&leap_timer, NSEC_PER_SEC);
210 		res = HRTIMER_RESTART;
211 		break;
212 	case TIME_DEL:
213 		timekeeping_leap_insert(1);
214 		time_tai--;
215 		time_state = TIME_WAIT;
216 		printk(KERN_NOTICE
217 			"Clock: deleting leap second 23:59:59 UTC\n");
218 		break;
219 	case TIME_OOP:
220 		time_tai++;
221 		time_state = TIME_WAIT;
222 		/* fall through */
223 	case TIME_WAIT:
224 		if (!(time_status & (STA_INS | STA_DEL)))
225 			time_state = TIME_OK;
226 		break;
227 	}
228 
229 	write_sequnlock(&xtime_lock);
230 
231 	return res;
232 }
233 
234 /*
235  * this routine handles the overflow of the microsecond field
236  *
237  * The tricky bits of code to handle the accurate clock support
238  * were provided by Dave Mills (Mills@UDEL.EDU) of NTP fame.
239  * They were originally developed for SUN and DEC kernels.
240  * All the kudos should go to Dave for this stuff.
241  */
242 void second_overflow(void)
243 {
244 	s64 delta;
245 
246 	/* Bump the maxerror field */
247 	time_maxerror += MAXFREQ / NSEC_PER_USEC;
248 	if (time_maxerror > NTP_PHASE_LIMIT) {
249 		time_maxerror = NTP_PHASE_LIMIT;
250 		time_status |= STA_UNSYNC;
251 	}
252 
253 	/*
254 	 * Compute the phase adjustment for the next second. The offset is
255 	 * reduced by a fixed factor times the time constant.
256 	 */
257 	tick_length	 = tick_length_base;
258 
259 	delta		 = shift_right(time_offset, SHIFT_PLL + time_constant);
260 	time_offset	-= delta;
261 	tick_length	+= delta;
262 
263 	if (!time_adjust)
264 		return;
265 
266 	if (time_adjust > MAX_TICKADJ) {
267 		time_adjust -= MAX_TICKADJ;
268 		tick_length += MAX_TICKADJ_SCALED;
269 		return;
270 	}
271 
272 	if (time_adjust < -MAX_TICKADJ) {
273 		time_adjust += MAX_TICKADJ;
274 		tick_length -= MAX_TICKADJ_SCALED;
275 		return;
276 	}
277 
278 	tick_length += (s64)(time_adjust * NSEC_PER_USEC / NTP_INTERVAL_FREQ)
279 							 << NTP_SCALE_SHIFT;
280 	time_adjust = 0;
281 }
282 
283 #ifdef CONFIG_GENERIC_CMOS_UPDATE
284 
285 /* Disable the cmos update - used by virtualization and embedded */
286 int no_sync_cmos_clock  __read_mostly;
287 
288 static void sync_cmos_clock(struct work_struct *work);
289 
290 static DECLARE_DELAYED_WORK(sync_cmos_work, sync_cmos_clock);
291 
292 static void sync_cmos_clock(struct work_struct *work)
293 {
294 	struct timespec now, next;
295 	int fail = 1;
296 
297 	/*
298 	 * If we have an externally synchronized Linux clock, then update
299 	 * CMOS clock accordingly every ~11 minutes. Set_rtc_mmss() has to be
300 	 * called as close as possible to 500 ms before the new second starts.
301 	 * This code is run on a timer.  If the clock is set, that timer
302 	 * may not expire at the correct time.  Thus, we adjust...
303 	 */
304 	if (!ntp_synced()) {
305 		/*
306 		 * Not synced, exit, do not restart a timer (if one is
307 		 * running, let it run out).
308 		 */
309 		return;
310 	}
311 
312 	getnstimeofday(&now);
313 	if (abs(now.tv_nsec - (NSEC_PER_SEC / 2)) <= tick_nsec / 2)
314 		fail = update_persistent_clock(now);
315 
316 	next.tv_nsec = (NSEC_PER_SEC / 2) - now.tv_nsec - (TICK_NSEC / 2);
317 	if (next.tv_nsec <= 0)
318 		next.tv_nsec += NSEC_PER_SEC;
319 
320 	if (!fail)
321 		next.tv_sec = 659;
322 	else
323 		next.tv_sec = 0;
324 
325 	if (next.tv_nsec >= NSEC_PER_SEC) {
326 		next.tv_sec++;
327 		next.tv_nsec -= NSEC_PER_SEC;
328 	}
329 	schedule_delayed_work(&sync_cmos_work, timespec_to_jiffies(&next));
330 }
331 
332 static void notify_cmos_timer(void)
333 {
334 	if (!no_sync_cmos_clock)
335 		schedule_delayed_work(&sync_cmos_work, 0);
336 }
337 
338 #else
339 static inline void notify_cmos_timer(void) { }
340 #endif
341 
342 /*
343  * Start the leap seconds timer:
344  */
345 static inline void ntp_start_leap_timer(struct timespec *ts)
346 {
347 	long now = ts->tv_sec;
348 
349 	if (time_status & STA_INS) {
350 		time_state = TIME_INS;
351 		now += 86400 - now % 86400;
352 		hrtimer_start(&leap_timer, ktime_set(now, 0), HRTIMER_MODE_ABS);
353 
354 		return;
355 	}
356 
357 	if (time_status & STA_DEL) {
358 		time_state = TIME_DEL;
359 		now += 86400 - (now + 1) % 86400;
360 		hrtimer_start(&leap_timer, ktime_set(now, 0), HRTIMER_MODE_ABS);
361 	}
362 }
363 
364 /*
365  * Propagate a new txc->status value into the NTP state:
366  */
367 static inline void process_adj_status(struct timex *txc, struct timespec *ts)
368 {
369 	if ((time_status & STA_PLL) && !(txc->status & STA_PLL)) {
370 		time_state = TIME_OK;
371 		time_status = STA_UNSYNC;
372 	}
373 
374 	/*
375 	 * If we turn on PLL adjustments then reset the
376 	 * reference time to current time.
377 	 */
378 	if (!(time_status & STA_PLL) && (txc->status & STA_PLL))
379 		time_reftime = get_seconds();
380 
381 	/* only set allowed bits */
382 	time_status &= STA_RONLY;
383 	time_status |= txc->status & ~STA_RONLY;
384 
385 	switch (time_state) {
386 	case TIME_OK:
387 		ntp_start_leap_timer(ts);
388 		break;
389 	case TIME_INS:
390 	case TIME_DEL:
391 		time_state = TIME_OK;
392 		ntp_start_leap_timer(ts);
393 	case TIME_WAIT:
394 		if (!(time_status & (STA_INS | STA_DEL)))
395 			time_state = TIME_OK;
396 		break;
397 	case TIME_OOP:
398 		hrtimer_restart(&leap_timer);
399 		break;
400 	}
401 }
402 /*
403  * Called with the xtime lock held, so we can access and modify
404  * all the global NTP state:
405  */
406 static inline void process_adjtimex_modes(struct timex *txc, struct timespec *ts)
407 {
408 	if (txc->modes & ADJ_STATUS)
409 		process_adj_status(txc, ts);
410 
411 	if (txc->modes & ADJ_NANO)
412 		time_status |= STA_NANO;
413 
414 	if (txc->modes & ADJ_MICRO)
415 		time_status &= ~STA_NANO;
416 
417 	if (txc->modes & ADJ_FREQUENCY) {
418 		time_freq = txc->freq * PPM_SCALE;
419 		time_freq = min(time_freq, MAXFREQ_SCALED);
420 		time_freq = max(time_freq, -MAXFREQ_SCALED);
421 	}
422 
423 	if (txc->modes & ADJ_MAXERROR)
424 		time_maxerror = txc->maxerror;
425 
426 	if (txc->modes & ADJ_ESTERROR)
427 		time_esterror = txc->esterror;
428 
429 	if (txc->modes & ADJ_TIMECONST) {
430 		time_constant = txc->constant;
431 		if (!(time_status & STA_NANO))
432 			time_constant += 4;
433 		time_constant = min(time_constant, (long)MAXTC);
434 		time_constant = max(time_constant, 0l);
435 	}
436 
437 	if (txc->modes & ADJ_TAI && txc->constant > 0)
438 		time_tai = txc->constant;
439 
440 	if (txc->modes & ADJ_OFFSET)
441 		ntp_update_offset(txc->offset);
442 
443 	if (txc->modes & ADJ_TICK)
444 		tick_usec = txc->tick;
445 
446 	if (txc->modes & (ADJ_TICK|ADJ_FREQUENCY|ADJ_OFFSET))
447 		ntp_update_frequency();
448 }
449 
450 /*
451  * adjtimex mainly allows reading (and writing, if superuser) of
452  * kernel time-keeping variables. used by xntpd.
453  */
454 int do_adjtimex(struct timex *txc)
455 {
456 	struct timespec ts;
457 	int result;
458 
459 	/* Validate the data before disabling interrupts */
460 	if (txc->modes & ADJ_ADJTIME) {
461 		/* singleshot must not be used with any other mode bits */
462 		if (!(txc->modes & ADJ_OFFSET_SINGLESHOT))
463 			return -EINVAL;
464 		if (!(txc->modes & ADJ_OFFSET_READONLY) &&
465 		    !capable(CAP_SYS_TIME))
466 			return -EPERM;
467 	} else {
468 		/* In order to modify anything, you gotta be super-user! */
469 		 if (txc->modes && !capable(CAP_SYS_TIME))
470 			return -EPERM;
471 
472 		/*
473 		 * if the quartz is off by more than 10% then
474 		 * something is VERY wrong!
475 		 */
476 		if (txc->modes & ADJ_TICK &&
477 		    (txc->tick <  900000/USER_HZ ||
478 		     txc->tick > 1100000/USER_HZ))
479 			return -EINVAL;
480 
481 		if (txc->modes & ADJ_STATUS && time_state != TIME_OK)
482 			hrtimer_cancel(&leap_timer);
483 	}
484 
485 	getnstimeofday(&ts);
486 
487 	write_seqlock_irq(&xtime_lock);
488 
489 	if (txc->modes & ADJ_ADJTIME) {
490 		long save_adjust = time_adjust;
491 
492 		if (!(txc->modes & ADJ_OFFSET_READONLY)) {
493 			/* adjtime() is independent from ntp_adjtime() */
494 			time_adjust = txc->offset;
495 			ntp_update_frequency();
496 		}
497 		txc->offset = save_adjust;
498 	} else {
499 
500 		/* If there are input parameters, then process them: */
501 		if (txc->modes)
502 			process_adjtimex_modes(txc, &ts);
503 
504 		txc->offset = shift_right(time_offset * NTP_INTERVAL_FREQ,
505 				  NTP_SCALE_SHIFT);
506 		if (!(time_status & STA_NANO))
507 			txc->offset /= NSEC_PER_USEC;
508 	}
509 
510 	result = time_state;	/* mostly `TIME_OK' */
511 	if (time_status & (STA_UNSYNC|STA_CLOCKERR))
512 		result = TIME_ERROR;
513 
514 	txc->freq	   = shift_right((time_freq >> PPM_SCALE_INV_SHIFT) *
515 					 PPM_SCALE_INV, NTP_SCALE_SHIFT);
516 	txc->maxerror	   = time_maxerror;
517 	txc->esterror	   = time_esterror;
518 	txc->status	   = time_status;
519 	txc->constant	   = time_constant;
520 	txc->precision	   = 1;
521 	txc->tolerance	   = MAXFREQ_SCALED / PPM_SCALE;
522 	txc->tick	   = tick_usec;
523 	txc->tai	   = time_tai;
524 
525 	/* PPS is not implemented, so these are zero */
526 	txc->ppsfreq	   = 0;
527 	txc->jitter	   = 0;
528 	txc->shift	   = 0;
529 	txc->stabil	   = 0;
530 	txc->jitcnt	   = 0;
531 	txc->calcnt	   = 0;
532 	txc->errcnt	   = 0;
533 	txc->stbcnt	   = 0;
534 
535 	write_sequnlock_irq(&xtime_lock);
536 
537 	txc->time.tv_sec = ts.tv_sec;
538 	txc->time.tv_usec = ts.tv_nsec;
539 	if (!(time_status & STA_NANO))
540 		txc->time.tv_usec /= NSEC_PER_USEC;
541 
542 	notify_cmos_timer();
543 
544 	return result;
545 }
546 
547 static int __init ntp_tick_adj_setup(char *str)
548 {
549 	ntp_tick_adj = simple_strtol(str, NULL, 0);
550 	ntp_tick_adj <<= NTP_SCALE_SHIFT;
551 
552 	return 1;
553 }
554 
555 __setup("ntp_tick_adj=", ntp_tick_adj_setup);
556 
557 void __init ntp_init(void)
558 {
559 	ntp_clear();
560 	hrtimer_init(&leap_timer, CLOCK_REALTIME, HRTIMER_MODE_ABS);
561 	leap_timer.function = ntp_leap_second;
562 }
563