1 // SPDX-License-Identifier: GPL-2.0
3 * NTP state machine interfaces and logic.
5 * This code was mainly moved from kernel/timer.c and kernel/time.c
6 * Please see those files for relevant copyright info and historical
9 #include <linux/capability.h>
10 #include <linux/clocksource.h>
11 #include <linux/workqueue.h>
12 #include <linux/hrtimer.h>
13 #include <linux/jiffies.h>
14 #include <linux/math64.h>
15 #include <linux/timex.h>
16 #include <linux/time.h>
18 #include <linux/module.h>
19 #include <linux/rtc.h>
20 #include <linux/audit.h>
22 #include "ntp_internal.h"
23 #include "timekeeping_internal.h"
26 * struct ntp_data - Structure holding all NTP related state
27 * @tick_usec: USER_HZ period in microseconds
28 * @tick_length: Adjusted tick length
29 * @tick_length_base: Base value for @tick_length
30 * @time_state: State of the clock synchronization
31 * @time_status: Clock status bits
32 * @time_offset: Time adjustment in nanoseconds
33 * @time_constant: PLL time constant
34 * @time_maxerror: Maximum error in microseconds holding the NTP sync distance
35 * (NTP dispersion + delay / 2)
36 * @time_esterror: Estimated error in microseconds holding NTP dispersion
37 * @time_freq: Frequency offset scaled nsecs/secs
38 * @time_reftime: Time at last adjustment in seconds
39 * @time_adjust: Adjustment value
40 * @ntp_tick_adj: Constant boot-param configurable NTP tick adjustment (upscaled)
41 * @ntp_next_leap_sec: Second value of the next pending leapsecond, or TIME64_MAX if no leap
43 * @pps_valid: PPS signal watchdog counter
44 * @pps_tf: PPS phase median filter
45 * @pps_jitter: PPS current jitter in nanoseconds
46 * @pps_fbase: PPS beginning of the last freq interval
47 * @pps_shift: PPS current interval duration in seconds (shift value)
48 * @pps_intcnt: PPS interval counter
49 * @pps_freq: PPS frequency offset in scaled ns/s
50 * @pps_stabil: PPS current stability in scaled ns/s
51 * @pps_calcnt: PPS monitor: calibration intervals
52 * @pps_jitcnt: PPS monitor: jitter limit exceeded
53 * @pps_stbcnt: PPS monitor: stability limit exceeded
54 * @pps_errcnt: PPS monitor: calibration errors
56 * Protected by the timekeeping locks.
59 unsigned long tick_usec
;
69 time64_t time_reftime
;
72 time64_t ntp_next_leap_sec
;
77 struct timespec64 pps_fbase
;
89 static struct ntp_data tk_ntp_data
= {
90 .tick_usec
= USER_TICK_USEC
,
91 .time_state
= TIME_OK
,
92 .time_status
= STA_UNSYNC
,
94 .time_maxerror
= NTP_PHASE_LIMIT
,
95 .time_esterror
= NTP_PHASE_LIMIT
,
96 .ntp_next_leap_sec
= TIME64_MAX
,
99 #define SECS_PER_DAY 86400
100 #define MAX_TICKADJ 500LL /* usecs */
101 #define MAX_TICKADJ_SCALED \
102 (((MAX_TICKADJ * NSEC_PER_USEC) << NTP_SCALE_SHIFT) / NTP_INTERVAL_FREQ)
103 #define MAX_TAI_OFFSET 100000
105 #ifdef CONFIG_NTP_PPS
108 * The following variables are used when a pulse-per-second (PPS) signal
109 * is available. They establish the engineering parameters of the clock
110 * discipline loop when controlled by the PPS signal.
112 #define PPS_VALID 10 /* PPS signal watchdog max (s) */
113 #define PPS_POPCORN 4 /* popcorn spike threshold (shift) */
114 #define PPS_INTMIN 2 /* min freq interval (s) (shift) */
115 #define PPS_INTMAX 8 /* max freq interval (s) (shift) */
116 #define PPS_INTCOUNT 4 /* number of consecutive good intervals to
117 increase pps_shift or consecutive bad
118 intervals to decrease it */
119 #define PPS_MAXWANDER 100000 /* max PPS freq wander (ns/s) */
122 * PPS kernel consumer compensates the whole phase error immediately.
123 * Otherwise, reduce the offset by a fixed factor times the time constant.
125 static inline s64
ntp_offset_chunk(struct ntp_data
*ntpdata
, s64 offset
)
127 if (ntpdata
->time_status
& STA_PPSTIME
&& ntpdata
->time_status
& STA_PPSSIGNAL
)
130 return shift_right(offset
, SHIFT_PLL
+ ntpdata
->time_constant
);
133 static inline void pps_reset_freq_interval(struct ntp_data
*ntpdata
)
135 /* The PPS calibration interval may end surprisingly early */
136 ntpdata
->pps_shift
= PPS_INTMIN
;
137 ntpdata
->pps_intcnt
= 0;
141 * pps_clear - Clears the PPS state variables
142 * @ntpdata: Pointer to ntp data
144 static inline void pps_clear(struct ntp_data
*ntpdata
)
146 pps_reset_freq_interval(ntpdata
);
147 ntpdata
->pps_tf
[0] = 0;
148 ntpdata
->pps_tf
[1] = 0;
149 ntpdata
->pps_tf
[2] = 0;
150 ntpdata
->pps_fbase
.tv_sec
= ntpdata
->pps_fbase
.tv_nsec
= 0;
151 ntpdata
->pps_freq
= 0;
155 * Decrease pps_valid to indicate that another second has passed since the
156 * last PPS signal. When it reaches 0, indicate that PPS signal is missing.
158 static inline void pps_dec_valid(struct ntp_data
*ntpdata
)
160 if (ntpdata
->pps_valid
> 0) {
161 ntpdata
->pps_valid
--;
163 ntpdata
->time_status
&= ~(STA_PPSSIGNAL
| STA_PPSJITTER
|
164 STA_PPSWANDER
| STA_PPSERROR
);
169 static inline void pps_set_freq(struct ntp_data
*ntpdata
)
171 ntpdata
->pps_freq
= ntpdata
->time_freq
;
174 static inline bool is_error_status(int status
)
176 return (status
& (STA_UNSYNC
|STA_CLOCKERR
))
178 * PPS signal lost when either PPS time or PPS frequency
179 * synchronization requested
181 || ((status
& (STA_PPSFREQ
|STA_PPSTIME
))
182 && !(status
& STA_PPSSIGNAL
))
184 * PPS jitter exceeded when PPS time synchronization
187 || ((status
& (STA_PPSTIME
|STA_PPSJITTER
))
188 == (STA_PPSTIME
|STA_PPSJITTER
))
190 * PPS wander exceeded or calibration error when PPS
191 * frequency synchronization requested
193 || ((status
& STA_PPSFREQ
)
194 && (status
& (STA_PPSWANDER
|STA_PPSERROR
)));
197 static inline void pps_fill_timex(struct ntp_data
*ntpdata
, struct __kernel_timex
*txc
)
199 txc
->ppsfreq
= shift_right((ntpdata
->pps_freq
>> PPM_SCALE_INV_SHIFT
) *
200 PPM_SCALE_INV
, NTP_SCALE_SHIFT
);
201 txc
->jitter
= ntpdata
->pps_jitter
;
202 if (!(ntpdata
->time_status
& STA_NANO
))
203 txc
->jitter
= ntpdata
->pps_jitter
/ NSEC_PER_USEC
;
204 txc
->shift
= ntpdata
->pps_shift
;
205 txc
->stabil
= ntpdata
->pps_stabil
;
206 txc
->jitcnt
= ntpdata
->pps_jitcnt
;
207 txc
->calcnt
= ntpdata
->pps_calcnt
;
208 txc
->errcnt
= ntpdata
->pps_errcnt
;
209 txc
->stbcnt
= ntpdata
->pps_stbcnt
;
212 #else /* !CONFIG_NTP_PPS */
214 static inline s64
ntp_offset_chunk(struct ntp_data
*ntpdata
, s64 offset
)
216 return shift_right(offset
, SHIFT_PLL
+ ntpdata
->time_constant
);
219 static inline void pps_reset_freq_interval(struct ntp_data
*ntpdata
) {}
220 static inline void pps_clear(struct ntp_data
*ntpdata
) {}
221 static inline void pps_dec_valid(struct ntp_data
*ntpdata
) {}
222 static inline void pps_set_freq(struct ntp_data
*ntpdata
) {}
224 static inline bool is_error_status(int status
)
226 return status
& (STA_UNSYNC
|STA_CLOCKERR
);
229 static inline void pps_fill_timex(struct ntp_data
*ntpdata
, struct __kernel_timex
*txc
)
231 /* PPS is not implemented, so these are zero */
242 #endif /* CONFIG_NTP_PPS */
245 * Update tick_length and tick_length_base, based on tick_usec, ntp_tick_adj and
248 static void ntp_update_frequency(struct ntp_data
*ntpdata
)
250 u64 second_length
, new_base
, tick_usec
= (u64
)ntpdata
->tick_usec
;
252 second_length
= (u64
)(tick_usec
* NSEC_PER_USEC
* USER_HZ
) << NTP_SCALE_SHIFT
;
254 second_length
+= ntpdata
->ntp_tick_adj
;
255 second_length
+= ntpdata
->time_freq
;
257 new_base
= div_u64(second_length
, NTP_INTERVAL_FREQ
);
260 * Don't wait for the next second_overflow, apply the change to the
261 * tick length immediately:
263 ntpdata
->tick_length
+= new_base
- ntpdata
->tick_length_base
;
264 ntpdata
->tick_length_base
= new_base
;
267 static inline s64
ntp_update_offset_fll(struct ntp_data
*ntpdata
, s64 offset64
, long secs
)
269 ntpdata
->time_status
&= ~STA_MODE
;
274 if (!(ntpdata
->time_status
& STA_FLL
) && (secs
<= MAXSEC
))
277 ntpdata
->time_status
|= STA_MODE
;
279 return div64_long(offset64
<< (NTP_SCALE_SHIFT
- SHIFT_FLL
), secs
);
282 static void ntp_update_offset(struct ntp_data
*ntpdata
, long offset
)
284 s64 freq_adj
, offset64
;
285 long secs
, real_secs
;
287 if (!(ntpdata
->time_status
& STA_PLL
))
290 if (!(ntpdata
->time_status
& STA_NANO
)) {
291 /* Make sure the multiplication below won't overflow */
292 offset
= clamp(offset
, -USEC_PER_SEC
, USEC_PER_SEC
);
293 offset
*= NSEC_PER_USEC
;
296 /* Scale the phase adjustment and clamp to the operating range. */
297 offset
= clamp(offset
, -MAXPHASE
, MAXPHASE
);
300 * Select how the frequency is to be controlled
301 * and in which mode (PLL or FLL).
303 real_secs
= __ktime_get_real_seconds();
304 secs
= (long)(real_secs
- ntpdata
->time_reftime
);
305 if (unlikely(ntpdata
->time_status
& STA_FREQHOLD
))
308 ntpdata
->time_reftime
= real_secs
;
311 freq_adj
= ntp_update_offset_fll(ntpdata
, offset64
, secs
);
314 * Clamp update interval to reduce PLL gain with low
315 * sampling rate (e.g. intermittent network connection)
316 * to avoid instability.
318 if (unlikely(secs
> 1 << (SHIFT_PLL
+ 1 + ntpdata
->time_constant
)))
319 secs
= 1 << (SHIFT_PLL
+ 1 + ntpdata
->time_constant
);
321 freq_adj
+= (offset64
* secs
) <<
322 (NTP_SCALE_SHIFT
- 2 * (SHIFT_PLL
+ 2 + ntpdata
->time_constant
));
324 freq_adj
= min(freq_adj
+ ntpdata
->time_freq
, MAXFREQ_SCALED
);
326 ntpdata
->time_freq
= max(freq_adj
, -MAXFREQ_SCALED
);
328 ntpdata
->time_offset
= div_s64(offset64
<< NTP_SCALE_SHIFT
, NTP_INTERVAL_FREQ
);
331 static void __ntp_clear(struct ntp_data
*ntpdata
)
333 /* Stop active adjtime() */
334 ntpdata
->time_adjust
= 0;
335 ntpdata
->time_status
|= STA_UNSYNC
;
336 ntpdata
->time_maxerror
= NTP_PHASE_LIMIT
;
337 ntpdata
->time_esterror
= NTP_PHASE_LIMIT
;
339 ntp_update_frequency(ntpdata
);
341 ntpdata
->tick_length
= ntpdata
->tick_length_base
;
342 ntpdata
->time_offset
= 0;
344 ntpdata
->ntp_next_leap_sec
= TIME64_MAX
;
345 /* Clear PPS state variables */
350 * ntp_clear - Clears the NTP state variables
354 __ntp_clear(&tk_ntp_data
);
358 u64
ntp_tick_length(void)
360 return tk_ntp_data
.tick_length
;
364 * ntp_get_next_leap - Returns the next leapsecond in CLOCK_REALTIME ktime_t
366 * Provides the time of the next leapsecond against CLOCK_REALTIME in
367 * a ktime_t format. Returns KTIME_MAX if no leapsecond is pending.
369 ktime_t
ntp_get_next_leap(void)
371 struct ntp_data
*ntpdata
= &tk_ntp_data
;
374 if ((ntpdata
->time_state
== TIME_INS
) && (ntpdata
->time_status
& STA_INS
))
375 return ktime_set(ntpdata
->ntp_next_leap_sec
, 0);
381 * This routine handles the overflow of the microsecond field
383 * The tricky bits of code to handle the accurate clock support
384 * were provided by Dave Mills (Mills@UDEL.EDU) of NTP fame.
385 * They were originally developed for SUN and DEC kernels.
386 * All the kudos should go to Dave for this stuff.
388 * Also handles leap second processing, and returns leap offset
390 int second_overflow(time64_t secs
)
392 struct ntp_data
*ntpdata
= &tk_ntp_data
;
398 * Leap second processing. If in leap-insert state at the end of the
399 * day, the system clock is set back one second; if in leap-delete
400 * state, the system clock is set ahead one second.
402 switch (ntpdata
->time_state
) {
404 if (ntpdata
->time_status
& STA_INS
) {
405 ntpdata
->time_state
= TIME_INS
;
406 div_s64_rem(secs
, SECS_PER_DAY
, &rem
);
407 ntpdata
->ntp_next_leap_sec
= secs
+ SECS_PER_DAY
- rem
;
408 } else if (ntpdata
->time_status
& STA_DEL
) {
409 ntpdata
->time_state
= TIME_DEL
;
410 div_s64_rem(secs
+ 1, SECS_PER_DAY
, &rem
);
411 ntpdata
->ntp_next_leap_sec
= secs
+ SECS_PER_DAY
- rem
;
415 if (!(ntpdata
->time_status
& STA_INS
)) {
416 ntpdata
->ntp_next_leap_sec
= TIME64_MAX
;
417 ntpdata
->time_state
= TIME_OK
;
418 } else if (secs
== ntpdata
->ntp_next_leap_sec
) {
420 ntpdata
->time_state
= TIME_OOP
;
421 pr_notice("Clock: inserting leap second 23:59:60 UTC\n");
425 if (!(ntpdata
->time_status
& STA_DEL
)) {
426 ntpdata
->ntp_next_leap_sec
= TIME64_MAX
;
427 ntpdata
->time_state
= TIME_OK
;
428 } else if (secs
== ntpdata
->ntp_next_leap_sec
) {
430 ntpdata
->ntp_next_leap_sec
= TIME64_MAX
;
431 ntpdata
->time_state
= TIME_WAIT
;
432 pr_notice("Clock: deleting leap second 23:59:59 UTC\n");
436 ntpdata
->ntp_next_leap_sec
= TIME64_MAX
;
437 ntpdata
->time_state
= TIME_WAIT
;
440 if (!(ntpdata
->time_status
& (STA_INS
| STA_DEL
)))
441 ntpdata
->time_state
= TIME_OK
;
445 /* Bump the maxerror field */
446 ntpdata
->time_maxerror
+= MAXFREQ
/ NSEC_PER_USEC
;
447 if (ntpdata
->time_maxerror
> NTP_PHASE_LIMIT
) {
448 ntpdata
->time_maxerror
= NTP_PHASE_LIMIT
;
449 ntpdata
->time_status
|= STA_UNSYNC
;
452 /* Compute the phase adjustment for the next second */
453 ntpdata
->tick_length
= ntpdata
->tick_length_base
;
455 delta
= ntp_offset_chunk(ntpdata
, ntpdata
->time_offset
);
456 ntpdata
->time_offset
-= delta
;
457 ntpdata
->tick_length
+= delta
;
459 /* Check PPS signal */
460 pps_dec_valid(ntpdata
);
462 if (!ntpdata
->time_adjust
)
465 if (ntpdata
->time_adjust
> MAX_TICKADJ
) {
466 ntpdata
->time_adjust
-= MAX_TICKADJ
;
467 ntpdata
->tick_length
+= MAX_TICKADJ_SCALED
;
471 if (ntpdata
->time_adjust
< -MAX_TICKADJ
) {
472 ntpdata
->time_adjust
+= MAX_TICKADJ
;
473 ntpdata
->tick_length
-= MAX_TICKADJ_SCALED
;
477 ntpdata
->tick_length
+= (s64
)(ntpdata
->time_adjust
* NSEC_PER_USEC
/ NTP_INTERVAL_FREQ
)
479 ntpdata
->time_adjust
= 0;
485 #if defined(CONFIG_GENERIC_CMOS_UPDATE) || defined(CONFIG_RTC_SYSTOHC)
486 static void sync_hw_clock(struct work_struct
*work
);
487 static DECLARE_WORK(sync_work
, sync_hw_clock
);
488 static struct hrtimer sync_hrtimer
;
489 #define SYNC_PERIOD_NS (11ULL * 60 * NSEC_PER_SEC)
491 static enum hrtimer_restart
sync_timer_callback(struct hrtimer
*timer
)
493 queue_work(system_freezable_power_efficient_wq
, &sync_work
);
495 return HRTIMER_NORESTART
;
498 static void sched_sync_hw_clock(unsigned long offset_nsec
, bool retry
)
500 ktime_t exp
= ktime_set(ktime_get_real_seconds(), 0);
503 exp
= ktime_add_ns(exp
, 2ULL * NSEC_PER_SEC
- offset_nsec
);
505 exp
= ktime_add_ns(exp
, SYNC_PERIOD_NS
- offset_nsec
);
507 hrtimer_start(&sync_hrtimer
, exp
, HRTIMER_MODE_ABS
);
511 * Check whether @now is correct versus the required time to update the RTC
512 * and calculate the value which needs to be written to the RTC so that the
513 * next seconds increment of the RTC after the write is aligned with the next
514 * seconds increment of clock REALTIME.
516 * tsched t1 write(t2.tv_sec - 1sec)) t2 RTC increments seconds
519 * tsched = t2 - set_offset_nsec
520 * newval = t2 - NSEC_PER_SEC
522 * ==> neval = tsched + set_offset_nsec - NSEC_PER_SEC
524 * As the execution of this code is not guaranteed to happen exactly at
525 * tsched this allows it to happen within a fuzzy region:
527 * abs(now - tsched) < FUZZ
529 * If @now is not inside the allowed window the function returns false.
531 static inline bool rtc_tv_nsec_ok(unsigned long set_offset_nsec
,
532 struct timespec64
*to_set
,
533 const struct timespec64
*now
)
535 /* Allowed error in tv_nsec, arbitrarily set to 5 jiffies in ns. */
536 const unsigned long TIME_SET_NSEC_FUZZ
= TICK_NSEC
* 5;
537 struct timespec64 delay
= {.tv_sec
= -1,
538 .tv_nsec
= set_offset_nsec
};
540 *to_set
= timespec64_add(*now
, delay
);
542 if (to_set
->tv_nsec
< TIME_SET_NSEC_FUZZ
) {
547 if (to_set
->tv_nsec
> NSEC_PER_SEC
- TIME_SET_NSEC_FUZZ
) {
555 #ifdef CONFIG_GENERIC_CMOS_UPDATE
556 int __weak
update_persistent_clock64(struct timespec64 now64
)
561 static inline int update_persistent_clock64(struct timespec64 now64
)
567 #ifdef CONFIG_RTC_SYSTOHC
568 /* Save NTP synchronized time to the RTC */
569 static int update_rtc(struct timespec64
*to_set
, unsigned long *offset_nsec
)
571 struct rtc_device
*rtc
;
575 rtc
= rtc_class_open(CONFIG_RTC_SYSTOHC_DEVICE
);
579 if (!rtc
->ops
|| !rtc
->ops
->set_time
)
582 /* First call might not have the correct offset */
583 if (*offset_nsec
== rtc
->set_offset_nsec
) {
584 rtc_time64_to_tm(to_set
->tv_sec
, &tm
);
585 err
= rtc_set_time(rtc
, &tm
);
587 /* Store the update offset and let the caller try again */
588 *offset_nsec
= rtc
->set_offset_nsec
;
592 rtc_class_close(rtc
);
596 static inline int update_rtc(struct timespec64
*to_set
, unsigned long *offset_nsec
)
603 * ntp_synced - Tells whether the NTP status is not UNSYNC
604 * Returns: true if not UNSYNC, false otherwise
606 static inline bool ntp_synced(void)
608 return !(tk_ntp_data
.time_status
& STA_UNSYNC
);
612 * If we have an externally synchronized Linux clock, then update RTC clock
613 * accordingly every ~11 minutes. Generally RTCs can only store second
614 * precision, but many RTCs will adjust the phase of their second tick to
615 * match the moment of update. This infrastructure arranges to call to the RTC
616 * set at the correct moment to phase synchronize the RTC second tick over
617 * with the kernel clock.
619 static void sync_hw_clock(struct work_struct
*work
)
622 * The default synchronization offset is 500ms for the deprecated
623 * update_persistent_clock64() under the assumption that it uses
624 * the infamous CMOS clock (MC146818).
626 static unsigned long offset_nsec
= NSEC_PER_SEC
/ 2;
627 struct timespec64 now
, to_set
;
631 * Don't update if STA_UNSYNC is set and if ntp_notify_cmos_timer()
632 * managed to schedule the work between the timer firing and the
633 * work being able to rearm the timer. Wait for the timer to expire.
635 if (!ntp_synced() || hrtimer_is_queued(&sync_hrtimer
))
638 ktime_get_real_ts64(&now
);
639 /* If @now is not in the allowed window, try again */
640 if (!rtc_tv_nsec_ok(offset_nsec
, &to_set
, &now
))
643 /* Take timezone adjusted RTCs into account */
644 if (persistent_clock_is_local
)
645 to_set
.tv_sec
-= (sys_tz
.tz_minuteswest
* 60);
647 /* Try the legacy RTC first. */
648 res
= update_persistent_clock64(to_set
);
652 /* Try the RTC class */
653 res
= update_rtc(&to_set
, &offset_nsec
);
657 sched_sync_hw_clock(offset_nsec
, res
!= 0);
660 void ntp_notify_cmos_timer(bool offset_set
)
663 * If the time jumped (using ADJ_SETOFFSET) cancels sync timer,
664 * which may have been running if the time was synchronized
665 * prior to the ADJ_SETOFFSET call.
668 hrtimer_cancel(&sync_hrtimer
);
671 * When the work is currently executed but has not yet the timer
672 * rearmed this queues the work immediately again. No big issue,
673 * just a pointless work scheduled.
675 if (ntp_synced() && !hrtimer_is_queued(&sync_hrtimer
))
676 queue_work(system_freezable_power_efficient_wq
, &sync_work
);
679 static void __init
ntp_init_cmos_sync(void)
681 hrtimer_init(&sync_hrtimer
, CLOCK_REALTIME
, HRTIMER_MODE_ABS
);
682 sync_hrtimer
.function
= sync_timer_callback
;
684 #else /* CONFIG_GENERIC_CMOS_UPDATE) || defined(CONFIG_RTC_SYSTOHC) */
685 static inline void __init
ntp_init_cmos_sync(void) { }
686 #endif /* !CONFIG_GENERIC_CMOS_UPDATE) || defined(CONFIG_RTC_SYSTOHC) */
689 * Propagate a new txc->status value into the NTP state:
691 static inline void process_adj_status(struct ntp_data
*ntpdata
, const struct __kernel_timex
*txc
)
693 if ((ntpdata
->time_status
& STA_PLL
) && !(txc
->status
& STA_PLL
)) {
694 ntpdata
->time_state
= TIME_OK
;
695 ntpdata
->time_status
= STA_UNSYNC
;
696 ntpdata
->ntp_next_leap_sec
= TIME64_MAX
;
697 /* Restart PPS frequency calibration */
698 pps_reset_freq_interval(ntpdata
);
702 * If we turn on PLL adjustments then reset the
703 * reference time to current time.
705 if (!(ntpdata
->time_status
& STA_PLL
) && (txc
->status
& STA_PLL
))
706 ntpdata
->time_reftime
= __ktime_get_real_seconds();
708 /* only set allowed bits */
709 ntpdata
->time_status
&= STA_RONLY
;
710 ntpdata
->time_status
|= txc
->status
& ~STA_RONLY
;
713 static inline void process_adjtimex_modes(struct ntp_data
*ntpdata
, const struct __kernel_timex
*txc
,
716 if (txc
->modes
& ADJ_STATUS
)
717 process_adj_status(ntpdata
, txc
);
719 if (txc
->modes
& ADJ_NANO
)
720 ntpdata
->time_status
|= STA_NANO
;
722 if (txc
->modes
& ADJ_MICRO
)
723 ntpdata
->time_status
&= ~STA_NANO
;
725 if (txc
->modes
& ADJ_FREQUENCY
) {
726 ntpdata
->time_freq
= txc
->freq
* PPM_SCALE
;
727 ntpdata
->time_freq
= min(ntpdata
->time_freq
, MAXFREQ_SCALED
);
728 ntpdata
->time_freq
= max(ntpdata
->time_freq
, -MAXFREQ_SCALED
);
729 /* Update pps_freq */
730 pps_set_freq(ntpdata
);
733 if (txc
->modes
& ADJ_MAXERROR
)
734 ntpdata
->time_maxerror
= clamp(txc
->maxerror
, 0, NTP_PHASE_LIMIT
);
736 if (txc
->modes
& ADJ_ESTERROR
)
737 ntpdata
->time_esterror
= clamp(txc
->esterror
, 0, NTP_PHASE_LIMIT
);
739 if (txc
->modes
& ADJ_TIMECONST
) {
740 ntpdata
->time_constant
= clamp(txc
->constant
, 0, MAXTC
);
741 if (!(ntpdata
->time_status
& STA_NANO
))
742 ntpdata
->time_constant
+= 4;
743 ntpdata
->time_constant
= clamp(ntpdata
->time_constant
, 0, MAXTC
);
746 if (txc
->modes
& ADJ_TAI
&& txc
->constant
>= 0 && txc
->constant
<= MAX_TAI_OFFSET
)
747 *time_tai
= txc
->constant
;
749 if (txc
->modes
& ADJ_OFFSET
)
750 ntp_update_offset(ntpdata
, txc
->offset
);
752 if (txc
->modes
& ADJ_TICK
)
753 ntpdata
->tick_usec
= txc
->tick
;
755 if (txc
->modes
& (ADJ_TICK
|ADJ_FREQUENCY
|ADJ_OFFSET
))
756 ntp_update_frequency(ntpdata
);
760 * adjtimex() mainly allows reading (and writing, if superuser) of
761 * kernel time-keeping variables. used by xntpd.
763 int __do_adjtimex(struct __kernel_timex
*txc
, const struct timespec64
*ts
,
764 s32
*time_tai
, struct audit_ntp_data
*ad
)
766 struct ntp_data
*ntpdata
= &tk_ntp_data
;
769 if (txc
->modes
& ADJ_ADJTIME
) {
770 long save_adjust
= ntpdata
->time_adjust
;
772 if (!(txc
->modes
& ADJ_OFFSET_READONLY
)) {
773 /* adjtime() is independent from ntp_adjtime() */
774 ntpdata
->time_adjust
= txc
->offset
;
775 ntp_update_frequency(ntpdata
);
777 audit_ntp_set_old(ad
, AUDIT_NTP_ADJUST
, save_adjust
);
778 audit_ntp_set_new(ad
, AUDIT_NTP_ADJUST
, ntpdata
->time_adjust
);
780 txc
->offset
= save_adjust
;
782 /* If there are input parameters, then process them: */
784 audit_ntp_set_old(ad
, AUDIT_NTP_OFFSET
, ntpdata
->time_offset
);
785 audit_ntp_set_old(ad
, AUDIT_NTP_FREQ
, ntpdata
->time_freq
);
786 audit_ntp_set_old(ad
, AUDIT_NTP_STATUS
, ntpdata
->time_status
);
787 audit_ntp_set_old(ad
, AUDIT_NTP_TAI
, *time_tai
);
788 audit_ntp_set_old(ad
, AUDIT_NTP_TICK
, ntpdata
->tick_usec
);
790 process_adjtimex_modes(ntpdata
, txc
, time_tai
);
792 audit_ntp_set_new(ad
, AUDIT_NTP_OFFSET
, ntpdata
->time_offset
);
793 audit_ntp_set_new(ad
, AUDIT_NTP_FREQ
, ntpdata
->time_freq
);
794 audit_ntp_set_new(ad
, AUDIT_NTP_STATUS
, ntpdata
->time_status
);
795 audit_ntp_set_new(ad
, AUDIT_NTP_TAI
, *time_tai
);
796 audit_ntp_set_new(ad
, AUDIT_NTP_TICK
, ntpdata
->tick_usec
);
799 txc
->offset
= shift_right(ntpdata
->time_offset
* NTP_INTERVAL_FREQ
, NTP_SCALE_SHIFT
);
800 if (!(ntpdata
->time_status
& STA_NANO
))
801 txc
->offset
= div_s64(txc
->offset
, NSEC_PER_USEC
);
804 result
= ntpdata
->time_state
;
805 if (is_error_status(ntpdata
->time_status
))
808 txc
->freq
= shift_right((ntpdata
->time_freq
>> PPM_SCALE_INV_SHIFT
) *
809 PPM_SCALE_INV
, NTP_SCALE_SHIFT
);
810 txc
->maxerror
= ntpdata
->time_maxerror
;
811 txc
->esterror
= ntpdata
->time_esterror
;
812 txc
->status
= ntpdata
->time_status
;
813 txc
->constant
= ntpdata
->time_constant
;
815 txc
->tolerance
= MAXFREQ_SCALED
/ PPM_SCALE
;
816 txc
->tick
= ntpdata
->tick_usec
;
817 txc
->tai
= *time_tai
;
819 /* Fill PPS status fields */
820 pps_fill_timex(ntpdata
, txc
);
822 txc
->time
.tv_sec
= ts
->tv_sec
;
823 txc
->time
.tv_usec
= ts
->tv_nsec
;
824 if (!(ntpdata
->time_status
& STA_NANO
))
825 txc
->time
.tv_usec
= ts
->tv_nsec
/ NSEC_PER_USEC
;
827 /* Handle leapsec adjustments */
828 if (unlikely(ts
->tv_sec
>= ntpdata
->ntp_next_leap_sec
)) {
829 if ((ntpdata
->time_state
== TIME_INS
) && (ntpdata
->time_status
& STA_INS
)) {
834 if ((ntpdata
->time_state
== TIME_DEL
) && (ntpdata
->time_status
& STA_DEL
)) {
839 if ((ntpdata
->time_state
== TIME_OOP
) && (ts
->tv_sec
== ntpdata
->ntp_next_leap_sec
))
846 #ifdef CONFIG_NTP_PPS
849 * struct pps_normtime is basically a struct timespec, but it is
850 * semantically different (and it is the reason why it was invented):
851 * pps_normtime.nsec has a range of ( -NSEC_PER_SEC / 2, NSEC_PER_SEC / 2 ]
852 * while timespec.tv_nsec has a range of [0, NSEC_PER_SEC)
854 struct pps_normtime
{
855 s64 sec
; /* seconds */
856 long nsec
; /* nanoseconds */
860 * Normalize the timestamp so that nsec is in the
861 * [ -NSEC_PER_SEC / 2, NSEC_PER_SEC / 2 ] interval
863 static inline struct pps_normtime
pps_normalize_ts(struct timespec64 ts
)
865 struct pps_normtime norm
= {
870 if (norm
.nsec
> (NSEC_PER_SEC
>> 1)) {
871 norm
.nsec
-= NSEC_PER_SEC
;
878 /* Get current phase correction and jitter */
879 static inline long pps_phase_filter_get(struct ntp_data
*ntpdata
, long *jitter
)
881 *jitter
= ntpdata
->pps_tf
[0] - ntpdata
->pps_tf
[1];
885 /* TODO: test various filters */
886 return ntpdata
->pps_tf
[0];
889 /* Add the sample to the phase filter */
890 static inline void pps_phase_filter_add(struct ntp_data
*ntpdata
, long err
)
892 ntpdata
->pps_tf
[2] = ntpdata
->pps_tf
[1];
893 ntpdata
->pps_tf
[1] = ntpdata
->pps_tf
[0];
894 ntpdata
->pps_tf
[0] = err
;
898 * Decrease frequency calibration interval length. It is halved after four
899 * consecutive unstable intervals.
901 static inline void pps_dec_freq_interval(struct ntp_data
*ntpdata
)
903 if (--ntpdata
->pps_intcnt
<= -PPS_INTCOUNT
) {
904 ntpdata
->pps_intcnt
= -PPS_INTCOUNT
;
905 if (ntpdata
->pps_shift
> PPS_INTMIN
) {
906 ntpdata
->pps_shift
--;
907 ntpdata
->pps_intcnt
= 0;
913 * Increase frequency calibration interval length. It is doubled after
914 * four consecutive stable intervals.
916 static inline void pps_inc_freq_interval(struct ntp_data
*ntpdata
)
918 if (++ntpdata
->pps_intcnt
>= PPS_INTCOUNT
) {
919 ntpdata
->pps_intcnt
= PPS_INTCOUNT
;
920 if (ntpdata
->pps_shift
< PPS_INTMAX
) {
921 ntpdata
->pps_shift
++;
922 ntpdata
->pps_intcnt
= 0;
928 * Update clock frequency based on MONOTONIC_RAW clock PPS signal
931 * At the end of the calibration interval the difference between the
932 * first and last MONOTONIC_RAW clock timestamps divided by the length
933 * of the interval becomes the frequency update. If the interval was
934 * too long, the data are discarded.
935 * Returns the difference between old and new frequency values.
937 static long hardpps_update_freq(struct ntp_data
*ntpdata
, struct pps_normtime freq_norm
)
939 long delta
, delta_mod
;
942 /* Check if the frequency interval was too long */
943 if (freq_norm
.sec
> (2 << ntpdata
->pps_shift
)) {
944 ntpdata
->time_status
|= STA_PPSERROR
;
945 ntpdata
->pps_errcnt
++;
946 pps_dec_freq_interval(ntpdata
);
947 printk_deferred(KERN_ERR
"hardpps: PPSERROR: interval too long - %lld s\n",
953 * Here the raw frequency offset and wander (stability) is
954 * calculated. If the wander is less than the wander threshold the
955 * interval is increased; otherwise it is decreased.
957 ftemp
= div_s64(((s64
)(-freq_norm
.nsec
)) << NTP_SCALE_SHIFT
,
959 delta
= shift_right(ftemp
- ntpdata
->pps_freq
, NTP_SCALE_SHIFT
);
960 ntpdata
->pps_freq
= ftemp
;
961 if (delta
> PPS_MAXWANDER
|| delta
< -PPS_MAXWANDER
) {
962 printk_deferred(KERN_WARNING
"hardpps: PPSWANDER: change=%ld\n", delta
);
963 ntpdata
->time_status
|= STA_PPSWANDER
;
964 ntpdata
->pps_stbcnt
++;
965 pps_dec_freq_interval(ntpdata
);
968 pps_inc_freq_interval(ntpdata
);
972 * The stability metric is calculated as the average of recent
973 * frequency changes, but is used only for performance monitoring
977 delta_mod
= -delta_mod
;
978 ntpdata
->pps_stabil
+= (div_s64(((s64
)delta_mod
) << (NTP_SCALE_SHIFT
- SHIFT_USEC
),
979 NSEC_PER_USEC
) - ntpdata
->pps_stabil
) >> PPS_INTMIN
;
981 /* If enabled, the system clock frequency is updated */
982 if ((ntpdata
->time_status
& STA_PPSFREQ
) && !(ntpdata
->time_status
& STA_FREQHOLD
)) {
983 ntpdata
->time_freq
= ntpdata
->pps_freq
;
984 ntp_update_frequency(ntpdata
);
990 /* Correct REALTIME clock phase error against PPS signal */
991 static void hardpps_update_phase(struct ntp_data
*ntpdata
, long error
)
993 long correction
= -error
;
996 /* Add the sample to the median filter */
997 pps_phase_filter_add(ntpdata
, correction
);
998 correction
= pps_phase_filter_get(ntpdata
, &jitter
);
1001 * Nominal jitter is due to PPS signal noise. If it exceeds the
1002 * threshold, the sample is discarded; otherwise, if so enabled,
1003 * the time offset is updated.
1005 if (jitter
> (ntpdata
->pps_jitter
<< PPS_POPCORN
)) {
1006 printk_deferred(KERN_WARNING
"hardpps: PPSJITTER: jitter=%ld, limit=%ld\n",
1007 jitter
, (ntpdata
->pps_jitter
<< PPS_POPCORN
));
1008 ntpdata
->time_status
|= STA_PPSJITTER
;
1009 ntpdata
->pps_jitcnt
++;
1010 } else if (ntpdata
->time_status
& STA_PPSTIME
) {
1011 /* Correct the time using the phase offset */
1012 ntpdata
->time_offset
= div_s64(((s64
)correction
) << NTP_SCALE_SHIFT
,
1014 /* Cancel running adjtime() */
1015 ntpdata
->time_adjust
= 0;
1018 ntpdata
->pps_jitter
+= (jitter
- ntpdata
->pps_jitter
) >> PPS_INTMIN
;
1022 * __hardpps() - discipline CPU clock oscillator to external PPS signal
1024 * This routine is called at each PPS signal arrival in order to
1025 * discipline the CPU clock oscillator to the PPS signal. It takes two
1026 * parameters: REALTIME and MONOTONIC_RAW clock timestamps. The former
1027 * is used to correct clock phase error and the latter is used to
1028 * correct the frequency.
1030 * This code is based on David Mills's reference nanokernel
1031 * implementation. It was mostly rewritten but keeps the same idea.
1033 void __hardpps(const struct timespec64
*phase_ts
, const struct timespec64
*raw_ts
)
1035 struct pps_normtime pts_norm
, freq_norm
;
1036 struct ntp_data
*ntpdata
= &tk_ntp_data
;
1038 pts_norm
= pps_normalize_ts(*phase_ts
);
1040 /* Clear the error bits, they will be set again if needed */
1041 ntpdata
->time_status
&= ~(STA_PPSJITTER
| STA_PPSWANDER
| STA_PPSERROR
);
1043 /* indicate signal presence */
1044 ntpdata
->time_status
|= STA_PPSSIGNAL
;
1045 ntpdata
->pps_valid
= PPS_VALID
;
1048 * When called for the first time, just start the frequency
1051 if (unlikely(ntpdata
->pps_fbase
.tv_sec
== 0)) {
1052 ntpdata
->pps_fbase
= *raw_ts
;
1056 /* Ok, now we have a base for frequency calculation */
1057 freq_norm
= pps_normalize_ts(timespec64_sub(*raw_ts
, ntpdata
->pps_fbase
));
1060 * Check that the signal is in the range
1061 * [1s - MAXFREQ us, 1s + MAXFREQ us], otherwise reject it
1063 if ((freq_norm
.sec
== 0) || (freq_norm
.nsec
> MAXFREQ
* freq_norm
.sec
) ||
1064 (freq_norm
.nsec
< -MAXFREQ
* freq_norm
.sec
)) {
1065 ntpdata
->time_status
|= STA_PPSJITTER
;
1066 /* Restart the frequency calibration interval */
1067 ntpdata
->pps_fbase
= *raw_ts
;
1068 printk_deferred(KERN_ERR
"hardpps: PPSJITTER: bad pulse\n");
1072 /* Signal is ok. Check if the current frequency interval is finished */
1073 if (freq_norm
.sec
>= (1 << ntpdata
->pps_shift
)) {
1074 ntpdata
->pps_calcnt
++;
1075 /* Restart the frequency calibration interval */
1076 ntpdata
->pps_fbase
= *raw_ts
;
1077 hardpps_update_freq(ntpdata
, freq_norm
);
1080 hardpps_update_phase(ntpdata
, pts_norm
.nsec
);
1083 #endif /* CONFIG_NTP_PPS */
1085 static int __init
ntp_tick_adj_setup(char *str
)
1087 int rc
= kstrtos64(str
, 0, &tk_ntp_data
.ntp_tick_adj
);
1091 tk_ntp_data
.ntp_tick_adj
<<= NTP_SCALE_SHIFT
;
1095 __setup("ntp_tick_adj=", ntp_tick_adj_setup
);
1097 void __init
ntp_init(void)
1100 ntp_init_cmos_sync();