xref: /linux/kernel/time/ntp.c (revision b8bb76713ec50df2f11efee386e16f93d51e1076)
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 long				time_maxerror = NTP_PHASE_LIMIT;
62 
63 /* estimated error (usecs):						*/
64 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 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 = xtime.tv_sec - time_reftime;
146 	if (unlikely(time_status & STA_FREQHOLD))
147 		secs = 0;
148 
149 	time_reftime = xtime.tv_sec;
150 
151 	offset64    = offset;
152 	freq_adj    = (offset64 * secs) <<
153 			(NTP_SCALE_SHIFT - 2 * (SHIFT_PLL + 2 + time_constant));
154 
155 	freq_adj    += ntp_update_offset_fll(offset64, secs);
156 
157 	freq_adj    = min(freq_adj + time_freq, MAXFREQ_SCALED);
158 
159 	time_freq   = max(freq_adj, -MAXFREQ_SCALED);
160 
161 	time_offset = div_s64(offset64 << NTP_SCALE_SHIFT, NTP_INTERVAL_FREQ);
162 }
163 
164 /**
165  * ntp_clear - Clears the NTP state variables
166  *
167  * Must be called while holding a write on the xtime_lock
168  */
169 void ntp_clear(void)
170 {
171 	time_adjust	= 0;		/* stop active adjtime() */
172 	time_status	|= STA_UNSYNC;
173 	time_maxerror	= NTP_PHASE_LIMIT;
174 	time_esterror	= NTP_PHASE_LIMIT;
175 
176 	ntp_update_frequency();
177 
178 	tick_length	= tick_length_base;
179 	time_offset	= 0;
180 }
181 
182 /*
183  * Leap second processing. If in leap-insert state at the end of the
184  * day, the system clock is set back one second; if in leap-delete
185  * state, the system clock is set ahead one second.
186  */
187 static enum hrtimer_restart ntp_leap_second(struct hrtimer *timer)
188 {
189 	enum hrtimer_restart res = HRTIMER_NORESTART;
190 
191 	write_seqlock(&xtime_lock);
192 
193 	switch (time_state) {
194 	case TIME_OK:
195 		break;
196 	case TIME_INS:
197 		xtime.tv_sec--;
198 		wall_to_monotonic.tv_sec++;
199 		time_state = TIME_OOP;
200 		printk(KERN_NOTICE
201 			"Clock: inserting leap second 23:59:60 UTC\n");
202 		hrtimer_add_expires_ns(&leap_timer, NSEC_PER_SEC);
203 		res = HRTIMER_RESTART;
204 		break;
205 	case TIME_DEL:
206 		xtime.tv_sec++;
207 		time_tai--;
208 		wall_to_monotonic.tv_sec--;
209 		time_state = TIME_WAIT;
210 		printk(KERN_NOTICE
211 			"Clock: deleting leap second 23:59:59 UTC\n");
212 		break;
213 	case TIME_OOP:
214 		time_tai++;
215 		time_state = TIME_WAIT;
216 		/* fall through */
217 	case TIME_WAIT:
218 		if (!(time_status & (STA_INS | STA_DEL)))
219 			time_state = TIME_OK;
220 		break;
221 	}
222 	update_vsyscall(&xtime, clock);
223 
224 	write_sequnlock(&xtime_lock);
225 
226 	return res;
227 }
228 
229 /*
230  * this routine handles the overflow of the microsecond field
231  *
232  * The tricky bits of code to handle the accurate clock support
233  * were provided by Dave Mills (Mills@UDEL.EDU) of NTP fame.
234  * They were originally developed for SUN and DEC kernels.
235  * All the kudos should go to Dave for this stuff.
236  */
237 void second_overflow(void)
238 {
239 	s64 delta;
240 
241 	/* Bump the maxerror field */
242 	time_maxerror += MAXFREQ / NSEC_PER_USEC;
243 	if (time_maxerror > NTP_PHASE_LIMIT) {
244 		time_maxerror = NTP_PHASE_LIMIT;
245 		time_status |= STA_UNSYNC;
246 	}
247 
248 	/*
249 	 * Compute the phase adjustment for the next second. The offset is
250 	 * reduced by a fixed factor times the time constant.
251 	 */
252 	tick_length	 = tick_length_base;
253 
254 	delta		 = shift_right(time_offset, SHIFT_PLL + time_constant);
255 	time_offset	-= delta;
256 	tick_length	+= delta;
257 
258 	if (!time_adjust)
259 		return;
260 
261 	if (time_adjust > MAX_TICKADJ) {
262 		time_adjust -= MAX_TICKADJ;
263 		tick_length += MAX_TICKADJ_SCALED;
264 		return;
265 	}
266 
267 	if (time_adjust < -MAX_TICKADJ) {
268 		time_adjust += MAX_TICKADJ;
269 		tick_length -= MAX_TICKADJ_SCALED;
270 		return;
271 	}
272 
273 	tick_length += (s64)(time_adjust * NSEC_PER_USEC / NTP_INTERVAL_FREQ)
274 							 << NTP_SCALE_SHIFT;
275 	time_adjust = 0;
276 }
277 
278 #ifdef CONFIG_GENERIC_CMOS_UPDATE
279 
280 /* Disable the cmos update - used by virtualization and embedded */
281 int no_sync_cmos_clock  __read_mostly;
282 
283 static void sync_cmos_clock(struct work_struct *work);
284 
285 static DECLARE_DELAYED_WORK(sync_cmos_work, sync_cmos_clock);
286 
287 static void sync_cmos_clock(struct work_struct *work)
288 {
289 	struct timespec now, next;
290 	int fail = 1;
291 
292 	/*
293 	 * If we have an externally synchronized Linux clock, then update
294 	 * CMOS clock accordingly every ~11 minutes. Set_rtc_mmss() has to be
295 	 * called as close as possible to 500 ms before the new second starts.
296 	 * This code is run on a timer.  If the clock is set, that timer
297 	 * may not expire at the correct time.  Thus, we adjust...
298 	 */
299 	if (!ntp_synced()) {
300 		/*
301 		 * Not synced, exit, do not restart a timer (if one is
302 		 * running, let it run out).
303 		 */
304 		return;
305 	}
306 
307 	getnstimeofday(&now);
308 	if (abs(now.tv_nsec - (NSEC_PER_SEC / 2)) <= tick_nsec / 2)
309 		fail = update_persistent_clock(now);
310 
311 	next.tv_nsec = (NSEC_PER_SEC / 2) - now.tv_nsec - (TICK_NSEC / 2);
312 	if (next.tv_nsec <= 0)
313 		next.tv_nsec += NSEC_PER_SEC;
314 
315 	if (!fail)
316 		next.tv_sec = 659;
317 	else
318 		next.tv_sec = 0;
319 
320 	if (next.tv_nsec >= NSEC_PER_SEC) {
321 		next.tv_sec++;
322 		next.tv_nsec -= NSEC_PER_SEC;
323 	}
324 	schedule_delayed_work(&sync_cmos_work, timespec_to_jiffies(&next));
325 }
326 
327 static void notify_cmos_timer(void)
328 {
329 	if (!no_sync_cmos_clock)
330 		schedule_delayed_work(&sync_cmos_work, 0);
331 }
332 
333 #else
334 static inline void notify_cmos_timer(void) { }
335 #endif
336 
337 /*
338  * Start the leap seconds timer:
339  */
340 static inline void ntp_start_leap_timer(struct timespec *ts)
341 {
342 	long now = ts->tv_sec;
343 
344 	if (time_status & STA_INS) {
345 		time_state = TIME_INS;
346 		now += 86400 - now % 86400;
347 		hrtimer_start(&leap_timer, ktime_set(now, 0), HRTIMER_MODE_ABS);
348 
349 		return;
350 	}
351 
352 	if (time_status & STA_DEL) {
353 		time_state = TIME_DEL;
354 		now += 86400 - (now + 1) % 86400;
355 		hrtimer_start(&leap_timer, ktime_set(now, 0), HRTIMER_MODE_ABS);
356 	}
357 }
358 
359 /*
360  * Propagate a new txc->status value into the NTP state:
361  */
362 static inline void process_adj_status(struct timex *txc, struct timespec *ts)
363 {
364 	if ((time_status & STA_PLL) && !(txc->status & STA_PLL)) {
365 		time_state = TIME_OK;
366 		time_status = STA_UNSYNC;
367 	}
368 
369 	/*
370 	 * If we turn on PLL adjustments then reset the
371 	 * reference time to current time.
372 	 */
373 	if (!(time_status & STA_PLL) && (txc->status & STA_PLL))
374 		time_reftime = xtime.tv_sec;
375 
376 	/* only set allowed bits */
377 	time_status &= STA_RONLY;
378 	time_status |= txc->status & ~STA_RONLY;
379 
380 	switch (time_state) {
381 	case TIME_OK:
382 		ntp_start_leap_timer(ts);
383 		break;
384 	case TIME_INS:
385 	case TIME_DEL:
386 		time_state = TIME_OK;
387 		ntp_start_leap_timer(ts);
388 	case TIME_WAIT:
389 		if (!(time_status & (STA_INS | STA_DEL)))
390 			time_state = TIME_OK;
391 		break;
392 	case TIME_OOP:
393 		hrtimer_restart(&leap_timer);
394 		break;
395 	}
396 }
397 /*
398  * Called with the xtime lock held, so we can access and modify
399  * all the global NTP state:
400  */
401 static inline void process_adjtimex_modes(struct timex *txc, struct timespec *ts)
402 {
403 	if (txc->modes & ADJ_STATUS)
404 		process_adj_status(txc, ts);
405 
406 	if (txc->modes & ADJ_NANO)
407 		time_status |= STA_NANO;
408 
409 	if (txc->modes & ADJ_MICRO)
410 		time_status &= ~STA_NANO;
411 
412 	if (txc->modes & ADJ_FREQUENCY) {
413 		time_freq = txc->freq * PPM_SCALE;
414 		time_freq = min(time_freq, MAXFREQ_SCALED);
415 		time_freq = max(time_freq, -MAXFREQ_SCALED);
416 	}
417 
418 	if (txc->modes & ADJ_MAXERROR)
419 		time_maxerror = txc->maxerror;
420 
421 	if (txc->modes & ADJ_ESTERROR)
422 		time_esterror = txc->esterror;
423 
424 	if (txc->modes & ADJ_TIMECONST) {
425 		time_constant = txc->constant;
426 		if (!(time_status & STA_NANO))
427 			time_constant += 4;
428 		time_constant = min(time_constant, (long)MAXTC);
429 		time_constant = max(time_constant, 0l);
430 	}
431 
432 	if (txc->modes & ADJ_TAI && txc->constant > 0)
433 		time_tai = txc->constant;
434 
435 	if (txc->modes & ADJ_OFFSET)
436 		ntp_update_offset(txc->offset);
437 
438 	if (txc->modes & ADJ_TICK)
439 		tick_usec = txc->tick;
440 
441 	if (txc->modes & (ADJ_TICK|ADJ_FREQUENCY|ADJ_OFFSET))
442 		ntp_update_frequency();
443 }
444 
445 /*
446  * adjtimex mainly allows reading (and writing, if superuser) of
447  * kernel time-keeping variables. used by xntpd.
448  */
449 int do_adjtimex(struct timex *txc)
450 {
451 	struct timespec ts;
452 	int result;
453 
454 	/* Validate the data before disabling interrupts */
455 	if (txc->modes & ADJ_ADJTIME) {
456 		/* singleshot must not be used with any other mode bits */
457 		if (!(txc->modes & ADJ_OFFSET_SINGLESHOT))
458 			return -EINVAL;
459 		if (!(txc->modes & ADJ_OFFSET_READONLY) &&
460 		    !capable(CAP_SYS_TIME))
461 			return -EPERM;
462 	} else {
463 		/* In order to modify anything, you gotta be super-user! */
464 		 if (txc->modes && !capable(CAP_SYS_TIME))
465 			return -EPERM;
466 
467 		/*
468 		 * if the quartz is off by more than 10% then
469 		 * something is VERY wrong!
470 		 */
471 		if (txc->modes & ADJ_TICK &&
472 		    (txc->tick <  900000/USER_HZ ||
473 		     txc->tick > 1100000/USER_HZ))
474 			return -EINVAL;
475 
476 		if (txc->modes & ADJ_STATUS && time_state != TIME_OK)
477 			hrtimer_cancel(&leap_timer);
478 	}
479 
480 	getnstimeofday(&ts);
481 
482 	write_seqlock_irq(&xtime_lock);
483 
484 	if (txc->modes & ADJ_ADJTIME) {
485 		long save_adjust = time_adjust;
486 
487 		if (!(txc->modes & ADJ_OFFSET_READONLY)) {
488 			/* adjtime() is independent from ntp_adjtime() */
489 			time_adjust = txc->offset;
490 			ntp_update_frequency();
491 		}
492 		txc->offset = save_adjust;
493 	} else {
494 
495 		/* If there are input parameters, then process them: */
496 		if (txc->modes)
497 			process_adjtimex_modes(txc, &ts);
498 
499 		txc->offset = shift_right(time_offset * NTP_INTERVAL_FREQ,
500 				  NTP_SCALE_SHIFT);
501 		if (!(time_status & STA_NANO))
502 			txc->offset /= NSEC_PER_USEC;
503 	}
504 
505 	result = time_state;	/* mostly `TIME_OK' */
506 	if (time_status & (STA_UNSYNC|STA_CLOCKERR))
507 		result = TIME_ERROR;
508 
509 	txc->freq	   = shift_right((time_freq >> PPM_SCALE_INV_SHIFT) *
510 					 PPM_SCALE_INV, NTP_SCALE_SHIFT);
511 	txc->maxerror	   = time_maxerror;
512 	txc->esterror	   = time_esterror;
513 	txc->status	   = time_status;
514 	txc->constant	   = time_constant;
515 	txc->precision	   = 1;
516 	txc->tolerance	   = MAXFREQ_SCALED / PPM_SCALE;
517 	txc->tick	   = tick_usec;
518 	txc->tai	   = time_tai;
519 
520 	/* PPS is not implemented, so these are zero */
521 	txc->ppsfreq	   = 0;
522 	txc->jitter	   = 0;
523 	txc->shift	   = 0;
524 	txc->stabil	   = 0;
525 	txc->jitcnt	   = 0;
526 	txc->calcnt	   = 0;
527 	txc->errcnt	   = 0;
528 	txc->stbcnt	   = 0;
529 
530 	write_sequnlock_irq(&xtime_lock);
531 
532 	txc->time.tv_sec = ts.tv_sec;
533 	txc->time.tv_usec = ts.tv_nsec;
534 	if (!(time_status & STA_NANO))
535 		txc->time.tv_usec /= NSEC_PER_USEC;
536 
537 	notify_cmos_timer();
538 
539 	return result;
540 }
541 
542 static int __init ntp_tick_adj_setup(char *str)
543 {
544 	ntp_tick_adj = simple_strtol(str, NULL, 0);
545 	ntp_tick_adj <<= NTP_SCALE_SHIFT;
546 
547 	return 1;
548 }
549 
550 __setup("ntp_tick_adj=", ntp_tick_adj_setup);
551 
552 void __init ntp_init(void)
553 {
554 	ntp_clear();
555 	hrtimer_init(&leap_timer, CLOCK_REALTIME, HRTIMER_MODE_ABS);
556 	leap_timer.function = ntp_leap_second;
557 }
558