ntp: Change time_reftime to time64_t and utilize 64bit __ktime_get_real_seconds
[cascardo/linux.git] / kernel / time / ntp.c
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 #include <linux/module.h>
18 #include <linux/rtc.h>
19
20 #include "ntp_internal.h"
21 #include "timekeeping_internal.h"
22
23
24 /*
25  * NTP timekeeping variables:
26  *
27  * Note: All of the NTP state is protected by the timekeeping locks.
28  */
29
30
31 /* USER_HZ period (usecs): */
32 unsigned long                   tick_usec = TICK_USEC;
33
34 /* SHIFTED_HZ period (nsecs): */
35 unsigned long                   tick_nsec;
36
37 static u64                      tick_length;
38 static u64                      tick_length_base;
39
40 #define SECS_PER_DAY            86400
41 #define MAX_TICKADJ             500LL           /* usecs */
42 #define MAX_TICKADJ_SCALED \
43         (((MAX_TICKADJ * NSEC_PER_USEC) << NTP_SCALE_SHIFT) / NTP_INTERVAL_FREQ)
44
45 /*
46  * phase-lock loop variables
47  */
48
49 /*
50  * clock synchronization status
51  *
52  * (TIME_ERROR prevents overwriting the CMOS clock)
53  */
54 static int                      time_state = TIME_OK;
55
56 /* clock status bits:                                                   */
57 static int                      time_status = STA_UNSYNC;
58
59 /* time adjustment (nsecs):                                             */
60 static s64                      time_offset;
61
62 /* pll time constant:                                                   */
63 static long                     time_constant = 2;
64
65 /* maximum error (usecs):                                               */
66 static long                     time_maxerror = NTP_PHASE_LIMIT;
67
68 /* estimated error (usecs):                                             */
69 static long                     time_esterror = NTP_PHASE_LIMIT;
70
71 /* frequency offset (scaled nsecs/secs):                                */
72 static s64                      time_freq;
73
74 /* time at last adjustment (secs):                                      */
75 static time64_t         time_reftime;
76
77 static long                     time_adjust;
78
79 /* constant (boot-param configurable) NTP tick adjustment (upscaled)    */
80 static s64                      ntp_tick_adj;
81
82 /* second value of the next pending leapsecond, or TIME64_MAX if no leap */
83 static time64_t                 ntp_next_leap_sec = TIME64_MAX;
84
85 #ifdef CONFIG_NTP_PPS
86
87 /*
88  * The following variables are used when a pulse-per-second (PPS) signal
89  * is available. They establish the engineering parameters of the clock
90  * discipline loop when controlled by the PPS signal.
91  */
92 #define PPS_VALID       10      /* PPS signal watchdog max (s) */
93 #define PPS_POPCORN     4       /* popcorn spike threshold (shift) */
94 #define PPS_INTMIN      2       /* min freq interval (s) (shift) */
95 #define PPS_INTMAX      8       /* max freq interval (s) (shift) */
96 #define PPS_INTCOUNT    4       /* number of consecutive good intervals to
97                                    increase pps_shift or consecutive bad
98                                    intervals to decrease it */
99 #define PPS_MAXWANDER   100000  /* max PPS freq wander (ns/s) */
100
101 static int pps_valid;           /* signal watchdog counter */
102 static long pps_tf[3];          /* phase median filter */
103 static long pps_jitter;         /* current jitter (ns) */
104 static struct timespec64 pps_fbase; /* beginning of the last freq interval */
105 static int pps_shift;           /* current interval duration (s) (shift) */
106 static int pps_intcnt;          /* interval counter */
107 static s64 pps_freq;            /* frequency offset (scaled ns/s) */
108 static long pps_stabil;         /* current stability (scaled ns/s) */
109
110 /*
111  * PPS signal quality monitors
112  */
113 static long pps_calcnt;         /* calibration intervals */
114 static long pps_jitcnt;         /* jitter limit exceeded */
115 static long pps_stbcnt;         /* stability limit exceeded */
116 static long pps_errcnt;         /* calibration errors */
117
118
119 /* PPS kernel consumer compensates the whole phase error immediately.
120  * Otherwise, reduce the offset by a fixed factor times the time constant.
121  */
122 static inline s64 ntp_offset_chunk(s64 offset)
123 {
124         if (time_status & STA_PPSTIME && time_status & STA_PPSSIGNAL)
125                 return offset;
126         else
127                 return shift_right(offset, SHIFT_PLL + time_constant);
128 }
129
130 static inline void pps_reset_freq_interval(void)
131 {
132         /* the PPS calibration interval may end
133            surprisingly early */
134         pps_shift = PPS_INTMIN;
135         pps_intcnt = 0;
136 }
137
138 /**
139  * pps_clear - Clears the PPS state variables
140  */
141 static inline void pps_clear(void)
142 {
143         pps_reset_freq_interval();
144         pps_tf[0] = 0;
145         pps_tf[1] = 0;
146         pps_tf[2] = 0;
147         pps_fbase.tv_sec = pps_fbase.tv_nsec = 0;
148         pps_freq = 0;
149 }
150
151 /* Decrease pps_valid to indicate that another second has passed since
152  * the last PPS signal. When it reaches 0, indicate that PPS signal is
153  * missing.
154  */
155 static inline void pps_dec_valid(void)
156 {
157         if (pps_valid > 0)
158                 pps_valid--;
159         else {
160                 time_status &= ~(STA_PPSSIGNAL | STA_PPSJITTER |
161                                  STA_PPSWANDER | STA_PPSERROR);
162                 pps_clear();
163         }
164 }
165
166 static inline void pps_set_freq(s64 freq)
167 {
168         pps_freq = freq;
169 }
170
171 static inline int is_error_status(int status)
172 {
173         return (status & (STA_UNSYNC|STA_CLOCKERR))
174                 /* PPS signal lost when either PPS time or
175                  * PPS frequency synchronization requested
176                  */
177                 || ((status & (STA_PPSFREQ|STA_PPSTIME))
178                         && !(status & STA_PPSSIGNAL))
179                 /* PPS jitter exceeded when
180                  * PPS time synchronization requested */
181                 || ((status & (STA_PPSTIME|STA_PPSJITTER))
182                         == (STA_PPSTIME|STA_PPSJITTER))
183                 /* PPS wander exceeded or calibration error when
184                  * PPS frequency synchronization requested
185                  */
186                 || ((status & STA_PPSFREQ)
187                         && (status & (STA_PPSWANDER|STA_PPSERROR)));
188 }
189
190 static inline void pps_fill_timex(struct timex *txc)
191 {
192         txc->ppsfreq       = shift_right((pps_freq >> PPM_SCALE_INV_SHIFT) *
193                                          PPM_SCALE_INV, NTP_SCALE_SHIFT);
194         txc->jitter        = pps_jitter;
195         if (!(time_status & STA_NANO))
196                 txc->jitter /= NSEC_PER_USEC;
197         txc->shift         = pps_shift;
198         txc->stabil        = pps_stabil;
199         txc->jitcnt        = pps_jitcnt;
200         txc->calcnt        = pps_calcnt;
201         txc->errcnt        = pps_errcnt;
202         txc->stbcnt        = pps_stbcnt;
203 }
204
205 #else /* !CONFIG_NTP_PPS */
206
207 static inline s64 ntp_offset_chunk(s64 offset)
208 {
209         return shift_right(offset, SHIFT_PLL + time_constant);
210 }
211
212 static inline void pps_reset_freq_interval(void) {}
213 static inline void pps_clear(void) {}
214 static inline void pps_dec_valid(void) {}
215 static inline void pps_set_freq(s64 freq) {}
216
217 static inline int is_error_status(int status)
218 {
219         return status & (STA_UNSYNC|STA_CLOCKERR);
220 }
221
222 static inline void pps_fill_timex(struct timex *txc)
223 {
224         /* PPS is not implemented, so these are zero */
225         txc->ppsfreq       = 0;
226         txc->jitter        = 0;
227         txc->shift         = 0;
228         txc->stabil        = 0;
229         txc->jitcnt        = 0;
230         txc->calcnt        = 0;
231         txc->errcnt        = 0;
232         txc->stbcnt        = 0;
233 }
234
235 #endif /* CONFIG_NTP_PPS */
236
237
238 /**
239  * ntp_synced - Returns 1 if the NTP status is not UNSYNC
240  *
241  */
242 static inline int ntp_synced(void)
243 {
244         return !(time_status & STA_UNSYNC);
245 }
246
247
248 /*
249  * NTP methods:
250  */
251
252 /*
253  * Update (tick_length, tick_length_base, tick_nsec), based
254  * on (tick_usec, ntp_tick_adj, time_freq):
255  */
256 static void ntp_update_frequency(void)
257 {
258         u64 second_length;
259         u64 new_base;
260
261         second_length            = (u64)(tick_usec * NSEC_PER_USEC * USER_HZ)
262                                                 << NTP_SCALE_SHIFT;
263
264         second_length           += ntp_tick_adj;
265         second_length           += time_freq;
266
267         tick_nsec                = div_u64(second_length, HZ) >> NTP_SCALE_SHIFT;
268         new_base                 = div_u64(second_length, NTP_INTERVAL_FREQ);
269
270         /*
271          * Don't wait for the next second_overflow, apply
272          * the change to the tick length immediately:
273          */
274         tick_length             += new_base - tick_length_base;
275         tick_length_base         = new_base;
276 }
277
278 static inline s64 ntp_update_offset_fll(s64 offset64, long secs)
279 {
280         time_status &= ~STA_MODE;
281
282         if (secs < MINSEC)
283                 return 0;
284
285         if (!(time_status & STA_FLL) && (secs <= MAXSEC))
286                 return 0;
287
288         time_status |= STA_MODE;
289
290         return div64_long(offset64 << (NTP_SCALE_SHIFT - SHIFT_FLL), secs);
291 }
292
293 static void ntp_update_offset(long offset)
294 {
295         s64 freq_adj;
296         s64 offset64;
297         long secs;
298
299         if (!(time_status & STA_PLL))
300                 return;
301
302         if (!(time_status & STA_NANO)) {
303                 /* Make sure the multiplication below won't overflow */
304                 offset = clamp(offset, -USEC_PER_SEC, USEC_PER_SEC);
305                 offset *= NSEC_PER_USEC;
306         }
307
308         /*
309          * Scale the phase adjustment and
310          * clamp to the operating range.
311          */
312         offset = clamp(offset, -MAXPHASE, MAXPHASE);
313
314         /*
315          * Select how the frequency is to be controlled
316          * and in which mode (PLL or FLL).
317          */
318         secs = (long)(__ktime_get_real_seconds() - time_reftime);
319         if (unlikely(time_status & STA_FREQHOLD))
320                 secs = 0;
321
322         time_reftime = __ktime_get_real_seconds();
323
324         offset64    = offset;
325         freq_adj    = ntp_update_offset_fll(offset64, secs);
326
327         /*
328          * Clamp update interval to reduce PLL gain with low
329          * sampling rate (e.g. intermittent network connection)
330          * to avoid instability.
331          */
332         if (unlikely(secs > 1 << (SHIFT_PLL + 1 + time_constant)))
333                 secs = 1 << (SHIFT_PLL + 1 + time_constant);
334
335         freq_adj    += (offset64 * secs) <<
336                         (NTP_SCALE_SHIFT - 2 * (SHIFT_PLL + 2 + time_constant));
337
338         freq_adj    = min(freq_adj + time_freq, MAXFREQ_SCALED);
339
340         time_freq   = max(freq_adj, -MAXFREQ_SCALED);
341
342         time_offset = div_s64(offset64 << NTP_SCALE_SHIFT, NTP_INTERVAL_FREQ);
343 }
344
345 /**
346  * ntp_clear - Clears the NTP state variables
347  */
348 void ntp_clear(void)
349 {
350         time_adjust     = 0;            /* stop active adjtime() */
351         time_status     |= STA_UNSYNC;
352         time_maxerror   = NTP_PHASE_LIMIT;
353         time_esterror   = NTP_PHASE_LIMIT;
354
355         ntp_update_frequency();
356
357         tick_length     = tick_length_base;
358         time_offset     = 0;
359
360         ntp_next_leap_sec = TIME64_MAX;
361         /* Clear PPS state variables */
362         pps_clear();
363 }
364
365
366 u64 ntp_tick_length(void)
367 {
368         return tick_length;
369 }
370
371 /**
372  * ntp_get_next_leap - Returns the next leapsecond in CLOCK_REALTIME ktime_t
373  *
374  * Provides the time of the next leapsecond against CLOCK_REALTIME in
375  * a ktime_t format. Returns KTIME_MAX if no leapsecond is pending.
376  */
377 ktime_t ntp_get_next_leap(void)
378 {
379         ktime_t ret;
380
381         if ((time_state == TIME_INS) && (time_status & STA_INS))
382                 return ktime_set(ntp_next_leap_sec, 0);
383         ret.tv64 = KTIME_MAX;
384         return ret;
385 }
386
387 /*
388  * this routine handles the overflow of the microsecond field
389  *
390  * The tricky bits of code to handle the accurate clock support
391  * were provided by Dave Mills (Mills@UDEL.EDU) of NTP fame.
392  * They were originally developed for SUN and DEC kernels.
393  * All the kudos should go to Dave for this stuff.
394  *
395  * Also handles leap second processing, and returns leap offset
396  */
397 int second_overflow(unsigned long secs)
398 {
399         s64 delta;
400         int leap = 0;
401
402         /*
403          * Leap second processing. If in leap-insert state at the end of the
404          * day, the system clock is set back one second; if in leap-delete
405          * state, the system clock is set ahead one second.
406          */
407         switch (time_state) {
408         case TIME_OK:
409                 if (time_status & STA_INS) {
410                         time_state = TIME_INS;
411                         ntp_next_leap_sec = secs + SECS_PER_DAY -
412                                                 (secs % SECS_PER_DAY);
413                 } else if (time_status & STA_DEL) {
414                         time_state = TIME_DEL;
415                         ntp_next_leap_sec = secs + SECS_PER_DAY -
416                                                  ((secs+1) % SECS_PER_DAY);
417                 }
418                 break;
419         case TIME_INS:
420                 if (!(time_status & STA_INS)) {
421                         ntp_next_leap_sec = TIME64_MAX;
422                         time_state = TIME_OK;
423                 } else if (secs % SECS_PER_DAY == 0) {
424                         leap = -1;
425                         time_state = TIME_OOP;
426                         printk(KERN_NOTICE
427                                 "Clock: inserting leap second 23:59:60 UTC\n");
428                 }
429                 break;
430         case TIME_DEL:
431                 if (!(time_status & STA_DEL)) {
432                         ntp_next_leap_sec = TIME64_MAX;
433                         time_state = TIME_OK;
434                 } else if ((secs + 1) % SECS_PER_DAY == 0) {
435                         leap = 1;
436                         ntp_next_leap_sec = TIME64_MAX;
437                         time_state = TIME_WAIT;
438                         printk(KERN_NOTICE
439                                 "Clock: deleting leap second 23:59:59 UTC\n");
440                 }
441                 break;
442         case TIME_OOP:
443                 ntp_next_leap_sec = TIME64_MAX;
444                 time_state = TIME_WAIT;
445                 break;
446         case TIME_WAIT:
447                 if (!(time_status & (STA_INS | STA_DEL)))
448                         time_state = TIME_OK;
449                 break;
450         }
451
452
453         /* Bump the maxerror field */
454         time_maxerror += MAXFREQ / NSEC_PER_USEC;
455         if (time_maxerror > NTP_PHASE_LIMIT) {
456                 time_maxerror = NTP_PHASE_LIMIT;
457                 time_status |= STA_UNSYNC;
458         }
459
460         /* Compute the phase adjustment for the next second */
461         tick_length      = tick_length_base;
462
463         delta            = ntp_offset_chunk(time_offset);
464         time_offset     -= delta;
465         tick_length     += delta;
466
467         /* Check PPS signal */
468         pps_dec_valid();
469
470         if (!time_adjust)
471                 goto out;
472
473         if (time_adjust > MAX_TICKADJ) {
474                 time_adjust -= MAX_TICKADJ;
475                 tick_length += MAX_TICKADJ_SCALED;
476                 goto out;
477         }
478
479         if (time_adjust < -MAX_TICKADJ) {
480                 time_adjust += MAX_TICKADJ;
481                 tick_length -= MAX_TICKADJ_SCALED;
482                 goto out;
483         }
484
485         tick_length += (s64)(time_adjust * NSEC_PER_USEC / NTP_INTERVAL_FREQ)
486                                                          << NTP_SCALE_SHIFT;
487         time_adjust = 0;
488
489 out:
490         return leap;
491 }
492
493 #ifdef CONFIG_GENERIC_CMOS_UPDATE
494 int __weak update_persistent_clock(struct timespec now)
495 {
496         return -ENODEV;
497 }
498
499 int __weak update_persistent_clock64(struct timespec64 now64)
500 {
501         struct timespec now;
502
503         now = timespec64_to_timespec(now64);
504         return update_persistent_clock(now);
505 }
506 #endif
507
508 #if defined(CONFIG_GENERIC_CMOS_UPDATE) || defined(CONFIG_RTC_SYSTOHC)
509 static void sync_cmos_clock(struct work_struct *work);
510
511 static DECLARE_DELAYED_WORK(sync_cmos_work, sync_cmos_clock);
512
513 static void sync_cmos_clock(struct work_struct *work)
514 {
515         struct timespec64 now;
516         struct timespec64 next;
517         int fail = 1;
518
519         /*
520          * If we have an externally synchronized Linux clock, then update
521          * CMOS clock accordingly every ~11 minutes. Set_rtc_mmss() has to be
522          * called as close as possible to 500 ms before the new second starts.
523          * This code is run on a timer.  If the clock is set, that timer
524          * may not expire at the correct time.  Thus, we adjust...
525          * We want the clock to be within a couple of ticks from the target.
526          */
527         if (!ntp_synced()) {
528                 /*
529                  * Not synced, exit, do not restart a timer (if one is
530                  * running, let it run out).
531                  */
532                 return;
533         }
534
535         getnstimeofday64(&now);
536         if (abs(now.tv_nsec - (NSEC_PER_SEC / 2)) <= tick_nsec * 5) {
537                 struct timespec64 adjust = now;
538
539                 fail = -ENODEV;
540                 if (persistent_clock_is_local)
541                         adjust.tv_sec -= (sys_tz.tz_minuteswest * 60);
542 #ifdef CONFIG_GENERIC_CMOS_UPDATE
543                 fail = update_persistent_clock64(adjust);
544 #endif
545
546 #ifdef CONFIG_RTC_SYSTOHC
547                 if (fail == -ENODEV)
548                         fail = rtc_set_ntp_time(adjust);
549 #endif
550         }
551
552         next.tv_nsec = (NSEC_PER_SEC / 2) - now.tv_nsec - (TICK_NSEC / 2);
553         if (next.tv_nsec <= 0)
554                 next.tv_nsec += NSEC_PER_SEC;
555
556         if (!fail || fail == -ENODEV)
557                 next.tv_sec = 659;
558         else
559                 next.tv_sec = 0;
560
561         if (next.tv_nsec >= NSEC_PER_SEC) {
562                 next.tv_sec++;
563                 next.tv_nsec -= NSEC_PER_SEC;
564         }
565         queue_delayed_work(system_power_efficient_wq,
566                            &sync_cmos_work, timespec64_to_jiffies(&next));
567 }
568
569 void ntp_notify_cmos_timer(void)
570 {
571         queue_delayed_work(system_power_efficient_wq, &sync_cmos_work, 0);
572 }
573
574 #else
575 void ntp_notify_cmos_timer(void) { }
576 #endif
577
578
579 /*
580  * Propagate a new txc->status value into the NTP state:
581  */
582 static inline void process_adj_status(struct timex *txc, struct timespec64 *ts)
583 {
584         if ((time_status & STA_PLL) && !(txc->status & STA_PLL)) {
585                 time_state = TIME_OK;
586                 time_status = STA_UNSYNC;
587                 ntp_next_leap_sec = TIME64_MAX;
588                 /* restart PPS frequency calibration */
589                 pps_reset_freq_interval();
590         }
591
592         /*
593          * If we turn on PLL adjustments then reset the
594          * reference time to current time.
595          */
596         if (!(time_status & STA_PLL) && (txc->status & STA_PLL))
597                 time_reftime = __ktime_get_real_seconds();
598
599         /* only set allowed bits */
600         time_status &= STA_RONLY;
601         time_status |= txc->status & ~STA_RONLY;
602 }
603
604
605 static inline void process_adjtimex_modes(struct timex *txc,
606                                                 struct timespec64 *ts,
607                                                 s32 *time_tai)
608 {
609         if (txc->modes & ADJ_STATUS)
610                 process_adj_status(txc, ts);
611
612         if (txc->modes & ADJ_NANO)
613                 time_status |= STA_NANO;
614
615         if (txc->modes & ADJ_MICRO)
616                 time_status &= ~STA_NANO;
617
618         if (txc->modes & ADJ_FREQUENCY) {
619                 time_freq = txc->freq * PPM_SCALE;
620                 time_freq = min(time_freq, MAXFREQ_SCALED);
621                 time_freq = max(time_freq, -MAXFREQ_SCALED);
622                 /* update pps_freq */
623                 pps_set_freq(time_freq);
624         }
625
626         if (txc->modes & ADJ_MAXERROR)
627                 time_maxerror = txc->maxerror;
628
629         if (txc->modes & ADJ_ESTERROR)
630                 time_esterror = txc->esterror;
631
632         if (txc->modes & ADJ_TIMECONST) {
633                 time_constant = txc->constant;
634                 if (!(time_status & STA_NANO))
635                         time_constant += 4;
636                 time_constant = min(time_constant, (long)MAXTC);
637                 time_constant = max(time_constant, 0l);
638         }
639
640         if (txc->modes & ADJ_TAI && txc->constant > 0)
641                 *time_tai = txc->constant;
642
643         if (txc->modes & ADJ_OFFSET)
644                 ntp_update_offset(txc->offset);
645
646         if (txc->modes & ADJ_TICK)
647                 tick_usec = txc->tick;
648
649         if (txc->modes & (ADJ_TICK|ADJ_FREQUENCY|ADJ_OFFSET))
650                 ntp_update_frequency();
651 }
652
653
654
655 /**
656  * ntp_validate_timex - Ensures the timex is ok for use in do_adjtimex
657  */
658 int ntp_validate_timex(struct timex *txc)
659 {
660         if (txc->modes & ADJ_ADJTIME) {
661                 /* singleshot must not be used with any other mode bits */
662                 if (!(txc->modes & ADJ_OFFSET_SINGLESHOT))
663                         return -EINVAL;
664                 if (!(txc->modes & ADJ_OFFSET_READONLY) &&
665                     !capable(CAP_SYS_TIME))
666                         return -EPERM;
667         } else {
668                 /* In order to modify anything, you gotta be super-user! */
669                  if (txc->modes && !capable(CAP_SYS_TIME))
670                         return -EPERM;
671                 /*
672                  * if the quartz is off by more than 10% then
673                  * something is VERY wrong!
674                  */
675                 if (txc->modes & ADJ_TICK &&
676                     (txc->tick <  900000/USER_HZ ||
677                      txc->tick > 1100000/USER_HZ))
678                         return -EINVAL;
679         }
680
681         if (txc->modes & ADJ_SETOFFSET) {
682                 /* In order to inject time, you gotta be super-user! */
683                 if (!capable(CAP_SYS_TIME))
684                         return -EPERM;
685
686                 if (!timeval_inject_offset_valid(&txc->time))
687                         return -EINVAL;
688         }
689
690         /*
691          * Check for potential multiplication overflows that can
692          * only happen on 64-bit systems:
693          */
694         if ((txc->modes & ADJ_FREQUENCY) && (BITS_PER_LONG == 64)) {
695                 if (LLONG_MIN / PPM_SCALE > txc->freq)
696                         return -EINVAL;
697                 if (LLONG_MAX / PPM_SCALE < txc->freq)
698                         return -EINVAL;
699         }
700
701         return 0;
702 }
703
704
705 /*
706  * adjtimex mainly allows reading (and writing, if superuser) of
707  * kernel time-keeping variables. used by xntpd.
708  */
709 int __do_adjtimex(struct timex *txc, struct timespec64 *ts, s32 *time_tai)
710 {
711         int result;
712
713         if (txc->modes & ADJ_ADJTIME) {
714                 long save_adjust = time_adjust;
715
716                 if (!(txc->modes & ADJ_OFFSET_READONLY)) {
717                         /* adjtime() is independent from ntp_adjtime() */
718                         time_adjust = txc->offset;
719                         ntp_update_frequency();
720                 }
721                 txc->offset = save_adjust;
722         } else {
723
724                 /* If there are input parameters, then process them: */
725                 if (txc->modes)
726                         process_adjtimex_modes(txc, ts, time_tai);
727
728                 txc->offset = shift_right(time_offset * NTP_INTERVAL_FREQ,
729                                   NTP_SCALE_SHIFT);
730                 if (!(time_status & STA_NANO))
731                         txc->offset /= NSEC_PER_USEC;
732         }
733
734         result = time_state;    /* mostly `TIME_OK' */
735         /* check for errors */
736         if (is_error_status(time_status))
737                 result = TIME_ERROR;
738
739         txc->freq          = shift_right((time_freq >> PPM_SCALE_INV_SHIFT) *
740                                          PPM_SCALE_INV, NTP_SCALE_SHIFT);
741         txc->maxerror      = time_maxerror;
742         txc->esterror      = time_esterror;
743         txc->status        = time_status;
744         txc->constant      = time_constant;
745         txc->precision     = 1;
746         txc->tolerance     = MAXFREQ_SCALED / PPM_SCALE;
747         txc->tick          = tick_usec;
748         txc->tai           = *time_tai;
749
750         /* fill PPS status fields */
751         pps_fill_timex(txc);
752
753         txc->time.tv_sec = (time_t)ts->tv_sec;
754         txc->time.tv_usec = ts->tv_nsec;
755         if (!(time_status & STA_NANO))
756                 txc->time.tv_usec /= NSEC_PER_USEC;
757
758         /* Handle leapsec adjustments */
759         if (unlikely(ts->tv_sec >= ntp_next_leap_sec)) {
760                 if ((time_state == TIME_INS) && (time_status & STA_INS)) {
761                         result = TIME_OOP;
762                         txc->tai++;
763                         txc->time.tv_sec--;
764                 }
765                 if ((time_state == TIME_DEL) && (time_status & STA_DEL)) {
766                         result = TIME_WAIT;
767                         txc->tai--;
768                         txc->time.tv_sec++;
769                 }
770                 if ((time_state == TIME_OOP) &&
771                                         (ts->tv_sec == ntp_next_leap_sec)) {
772                         result = TIME_WAIT;
773                 }
774         }
775
776         return result;
777 }
778
779 #ifdef  CONFIG_NTP_PPS
780
781 /* actually struct pps_normtime is good old struct timespec, but it is
782  * semantically different (and it is the reason why it was invented):
783  * pps_normtime.nsec has a range of ( -NSEC_PER_SEC / 2, NSEC_PER_SEC / 2 ]
784  * while timespec.tv_nsec has a range of [0, NSEC_PER_SEC) */
785 struct pps_normtime {
786         s64             sec;    /* seconds */
787         long            nsec;   /* nanoseconds */
788 };
789
790 /* normalize the timestamp so that nsec is in the
791    ( -NSEC_PER_SEC / 2, NSEC_PER_SEC / 2 ] interval */
792 static inline struct pps_normtime pps_normalize_ts(struct timespec64 ts)
793 {
794         struct pps_normtime norm = {
795                 .sec = ts.tv_sec,
796                 .nsec = ts.tv_nsec
797         };
798
799         if (norm.nsec > (NSEC_PER_SEC >> 1)) {
800                 norm.nsec -= NSEC_PER_SEC;
801                 norm.sec++;
802         }
803
804         return norm;
805 }
806
807 /* get current phase correction and jitter */
808 static inline long pps_phase_filter_get(long *jitter)
809 {
810         *jitter = pps_tf[0] - pps_tf[1];
811         if (*jitter < 0)
812                 *jitter = -*jitter;
813
814         /* TODO: test various filters */
815         return pps_tf[0];
816 }
817
818 /* add the sample to the phase filter */
819 static inline void pps_phase_filter_add(long err)
820 {
821         pps_tf[2] = pps_tf[1];
822         pps_tf[1] = pps_tf[0];
823         pps_tf[0] = err;
824 }
825
826 /* decrease frequency calibration interval length.
827  * It is halved after four consecutive unstable intervals.
828  */
829 static inline void pps_dec_freq_interval(void)
830 {
831         if (--pps_intcnt <= -PPS_INTCOUNT) {
832                 pps_intcnt = -PPS_INTCOUNT;
833                 if (pps_shift > PPS_INTMIN) {
834                         pps_shift--;
835                         pps_intcnt = 0;
836                 }
837         }
838 }
839
840 /* increase frequency calibration interval length.
841  * It is doubled after four consecutive stable intervals.
842  */
843 static inline void pps_inc_freq_interval(void)
844 {
845         if (++pps_intcnt >= PPS_INTCOUNT) {
846                 pps_intcnt = PPS_INTCOUNT;
847                 if (pps_shift < PPS_INTMAX) {
848                         pps_shift++;
849                         pps_intcnt = 0;
850                 }
851         }
852 }
853
854 /* update clock frequency based on MONOTONIC_RAW clock PPS signal
855  * timestamps
856  *
857  * At the end of the calibration interval the difference between the
858  * first and last MONOTONIC_RAW clock timestamps divided by the length
859  * of the interval becomes the frequency update. If the interval was
860  * too long, the data are discarded.
861  * Returns the difference between old and new frequency values.
862  */
863 static long hardpps_update_freq(struct pps_normtime freq_norm)
864 {
865         long delta, delta_mod;
866         s64 ftemp;
867
868         /* check if the frequency interval was too long */
869         if (freq_norm.sec > (2 << pps_shift)) {
870                 time_status |= STA_PPSERROR;
871                 pps_errcnt++;
872                 pps_dec_freq_interval();
873                 printk_deferred(KERN_ERR
874                         "hardpps: PPSERROR: interval too long - %lld s\n",
875                         freq_norm.sec);
876                 return 0;
877         }
878
879         /* here the raw frequency offset and wander (stability) is
880          * calculated. If the wander is less than the wander threshold
881          * the interval is increased; otherwise it is decreased.
882          */
883         ftemp = div_s64(((s64)(-freq_norm.nsec)) << NTP_SCALE_SHIFT,
884                         freq_norm.sec);
885         delta = shift_right(ftemp - pps_freq, NTP_SCALE_SHIFT);
886         pps_freq = ftemp;
887         if (delta > PPS_MAXWANDER || delta < -PPS_MAXWANDER) {
888                 printk_deferred(KERN_WARNING
889                                 "hardpps: PPSWANDER: change=%ld\n", delta);
890                 time_status |= STA_PPSWANDER;
891                 pps_stbcnt++;
892                 pps_dec_freq_interval();
893         } else {        /* good sample */
894                 pps_inc_freq_interval();
895         }
896
897         /* the stability metric is calculated as the average of recent
898          * frequency changes, but is used only for performance
899          * monitoring
900          */
901         delta_mod = delta;
902         if (delta_mod < 0)
903                 delta_mod = -delta_mod;
904         pps_stabil += (div_s64(((s64)delta_mod) <<
905                                 (NTP_SCALE_SHIFT - SHIFT_USEC),
906                                 NSEC_PER_USEC) - pps_stabil) >> PPS_INTMIN;
907
908         /* if enabled, the system clock frequency is updated */
909         if ((time_status & STA_PPSFREQ) != 0 &&
910             (time_status & STA_FREQHOLD) == 0) {
911                 time_freq = pps_freq;
912                 ntp_update_frequency();
913         }
914
915         return delta;
916 }
917
918 /* correct REALTIME clock phase error against PPS signal */
919 static void hardpps_update_phase(long error)
920 {
921         long correction = -error;
922         long jitter;
923
924         /* add the sample to the median filter */
925         pps_phase_filter_add(correction);
926         correction = pps_phase_filter_get(&jitter);
927
928         /* Nominal jitter is due to PPS signal noise. If it exceeds the
929          * threshold, the sample is discarded; otherwise, if so enabled,
930          * the time offset is updated.
931          */
932         if (jitter > (pps_jitter << PPS_POPCORN)) {
933                 printk_deferred(KERN_WARNING
934                                 "hardpps: PPSJITTER: jitter=%ld, limit=%ld\n",
935                                 jitter, (pps_jitter << PPS_POPCORN));
936                 time_status |= STA_PPSJITTER;
937                 pps_jitcnt++;
938         } else if (time_status & STA_PPSTIME) {
939                 /* correct the time using the phase offset */
940                 time_offset = div_s64(((s64)correction) << NTP_SCALE_SHIFT,
941                                 NTP_INTERVAL_FREQ);
942                 /* cancel running adjtime() */
943                 time_adjust = 0;
944         }
945         /* update jitter */
946         pps_jitter += (jitter - pps_jitter) >> PPS_INTMIN;
947 }
948
949 /*
950  * __hardpps() - discipline CPU clock oscillator to external PPS signal
951  *
952  * This routine is called at each PPS signal arrival in order to
953  * discipline the CPU clock oscillator to the PPS signal. It takes two
954  * parameters: REALTIME and MONOTONIC_RAW clock timestamps. The former
955  * is used to correct clock phase error and the latter is used to
956  * correct the frequency.
957  *
958  * This code is based on David Mills's reference nanokernel
959  * implementation. It was mostly rewritten but keeps the same idea.
960  */
961 void __hardpps(const struct timespec64 *phase_ts, const struct timespec64 *raw_ts)
962 {
963         struct pps_normtime pts_norm, freq_norm;
964
965         pts_norm = pps_normalize_ts(*phase_ts);
966
967         /* clear the error bits, they will be set again if needed */
968         time_status &= ~(STA_PPSJITTER | STA_PPSWANDER | STA_PPSERROR);
969
970         /* indicate signal presence */
971         time_status |= STA_PPSSIGNAL;
972         pps_valid = PPS_VALID;
973
974         /* when called for the first time,
975          * just start the frequency interval */
976         if (unlikely(pps_fbase.tv_sec == 0)) {
977                 pps_fbase = *raw_ts;
978                 return;
979         }
980
981         /* ok, now we have a base for frequency calculation */
982         freq_norm = pps_normalize_ts(timespec64_sub(*raw_ts, pps_fbase));
983
984         /* check that the signal is in the range
985          * [1s - MAXFREQ us, 1s + MAXFREQ us], otherwise reject it */
986         if ((freq_norm.sec == 0) ||
987                         (freq_norm.nsec > MAXFREQ * freq_norm.sec) ||
988                         (freq_norm.nsec < -MAXFREQ * freq_norm.sec)) {
989                 time_status |= STA_PPSJITTER;
990                 /* restart the frequency calibration interval */
991                 pps_fbase = *raw_ts;
992                 printk_deferred(KERN_ERR "hardpps: PPSJITTER: bad pulse\n");
993                 return;
994         }
995
996         /* signal is ok */
997
998         /* check if the current frequency interval is finished */
999         if (freq_norm.sec >= (1 << pps_shift)) {
1000                 pps_calcnt++;
1001                 /* restart the frequency calibration interval */
1002                 pps_fbase = *raw_ts;
1003                 hardpps_update_freq(freq_norm);
1004         }
1005
1006         hardpps_update_phase(pts_norm.nsec);
1007
1008 }
1009 #endif  /* CONFIG_NTP_PPS */
1010
1011 static int __init ntp_tick_adj_setup(char *str)
1012 {
1013         int rc = kstrtol(str, 0, (long *)&ntp_tick_adj);
1014
1015         if (rc)
1016                 return rc;
1017         ntp_tick_adj <<= NTP_SCALE_SHIFT;
1018
1019         return 1;
1020 }
1021
1022 __setup("ntp_tick_adj=", ntp_tick_adj_setup);
1023
1024 void __init ntp_init(void)
1025 {
1026         ntp_clear();
1027 }