1
2
3
4
5
6#include <linux/timekeeper_internal.h>
7#include <linux/module.h>
8#include <linux/interrupt.h>
9#include <linux/percpu.h>
10#include <linux/init.h>
11#include <linux/mm.h>
12#include <linux/nmi.h>
13#include <linux/sched.h>
14#include <linux/sched/loadavg.h>
15#include <linux/sched/clock.h>
16#include <linux/syscore_ops.h>
17#include <linux/clocksource.h>
18#include <linux/jiffies.h>
19#include <linux/time.h>
20#include <linux/tick.h>
21#include <linux/stop_machine.h>
22#include <linux/pvclock_gtod.h>
23#include <linux/compiler.h>
24#include <linux/audit.h>
25
26#include "tick-internal.h"
27#include "ntp_internal.h"
28#include "timekeeping_internal.h"
29
30#define TK_CLEAR_NTP (1 << 0)
31#define TK_MIRROR (1 << 1)
32#define TK_CLOCK_WAS_SET (1 << 2)
33
34enum timekeeping_adv_mode {
35
36 TK_ADV_TICK,
37
38
39 TK_ADV_FREQ
40};
41
42
43
44
45
46static struct {
47 seqcount_t seq;
48 struct timekeeper timekeeper;
49} tk_core ____cacheline_aligned = {
50 .seq = SEQCNT_ZERO(tk_core.seq),
51};
52
53static DEFINE_RAW_SPINLOCK(timekeeper_lock);
54static struct timekeeper shadow_timekeeper;
55
56
57
58
59
60
61
62
63
64
65struct tk_fast {
66 seqcount_t seq;
67 struct tk_read_base base[2];
68};
69
70
71static u64 cycles_at_suspend;
72
73static u64 dummy_clock_read(struct clocksource *cs)
74{
75 return cycles_at_suspend;
76}
77
78static struct clocksource dummy_clock = {
79 .read = dummy_clock_read,
80};
81
82static struct tk_fast tk_fast_mono ____cacheline_aligned = {
83 .base[0] = { .clock = &dummy_clock, },
84 .base[1] = { .clock = &dummy_clock, },
85};
86
87static struct tk_fast tk_fast_raw ____cacheline_aligned = {
88 .base[0] = { .clock = &dummy_clock, },
89 .base[1] = { .clock = &dummy_clock, },
90};
91
92
93int __read_mostly timekeeping_suspended;
94
95static inline void tk_normalize_xtime(struct timekeeper *tk)
96{
97 while (tk->tkr_mono.xtime_nsec >= ((u64)NSEC_PER_SEC << tk->tkr_mono.shift)) {
98 tk->tkr_mono.xtime_nsec -= (u64)NSEC_PER_SEC << tk->tkr_mono.shift;
99 tk->xtime_sec++;
100 }
101 while (tk->tkr_raw.xtime_nsec >= ((u64)NSEC_PER_SEC << tk->tkr_raw.shift)) {
102 tk->tkr_raw.xtime_nsec -= (u64)NSEC_PER_SEC << tk->tkr_raw.shift;
103 tk->raw_sec++;
104 }
105}
106
107static inline struct timespec64 tk_xtime(const struct timekeeper *tk)
108{
109 struct timespec64 ts;
110
111 ts.tv_sec = tk->xtime_sec;
112 ts.tv_nsec = (long)(tk->tkr_mono.xtime_nsec >> tk->tkr_mono.shift);
113 return ts;
114}
115
116static void tk_set_xtime(struct timekeeper *tk, const struct timespec64 *ts)
117{
118 tk->xtime_sec = ts->tv_sec;
119 tk->tkr_mono.xtime_nsec = (u64)ts->tv_nsec << tk->tkr_mono.shift;
120}
121
122static void tk_xtime_add(struct timekeeper *tk, const struct timespec64 *ts)
123{
124 tk->xtime_sec += ts->tv_sec;
125 tk->tkr_mono.xtime_nsec += (u64)ts->tv_nsec << tk->tkr_mono.shift;
126 tk_normalize_xtime(tk);
127}
128
129static void tk_set_wall_to_mono(struct timekeeper *tk, struct timespec64 wtm)
130{
131 struct timespec64 tmp;
132
133
134
135
136
137 set_normalized_timespec64(&tmp, -tk->wall_to_monotonic.tv_sec,
138 -tk->wall_to_monotonic.tv_nsec);
139 WARN_ON_ONCE(tk->offs_real != timespec64_to_ktime(tmp));
140 tk->wall_to_monotonic = wtm;
141 set_normalized_timespec64(&tmp, -wtm.tv_sec, -wtm.tv_nsec);
142 tk->offs_real = timespec64_to_ktime(tmp);
143 tk->offs_tai = ktime_add(tk->offs_real, ktime_set(tk->tai_offset, 0));
144}
145
146static inline void tk_update_sleep_time(struct timekeeper *tk, ktime_t delta)
147{
148 tk->offs_boot = ktime_add(tk->offs_boot, delta);
149
150
151
152
153 tk->monotonic_to_boot = ktime_to_timespec64(tk->offs_boot);
154}
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169static inline u64 tk_clock_read(const struct tk_read_base *tkr)
170{
171 struct clocksource *clock = READ_ONCE(tkr->clock);
172
173 return clock->read(clock);
174}
175
176#ifdef CONFIG_DEBUG_TIMEKEEPING
177#define WARNING_FREQ (HZ*300)
178
179static void timekeeping_check_update(struct timekeeper *tk, u64 offset)
180{
181
182 u64 max_cycles = tk->tkr_mono.clock->max_cycles;
183 const char *name = tk->tkr_mono.clock->name;
184
185 if (offset > max_cycles) {
186 printk_deferred("WARNING: timekeeping: Cycle offset (%lld) is larger than allowed by the '%s' clock's max_cycles value (%lld): time overflow danger\n",
187 offset, name, max_cycles);
188 printk_deferred(" timekeeping: Your kernel is sick, but tries to cope by capping time updates\n");
189 } else {
190 if (offset > (max_cycles >> 1)) {
191 printk_deferred("INFO: timekeeping: Cycle offset (%lld) is larger than the '%s' clock's 50%% safety margin (%lld)\n",
192 offset, name, max_cycles >> 1);
193 printk_deferred(" timekeeping: Your kernel is still fine, but is feeling a bit nervous\n");
194 }
195 }
196
197 if (tk->underflow_seen) {
198 if (jiffies - tk->last_warning > WARNING_FREQ) {
199 printk_deferred("WARNING: Underflow in clocksource '%s' observed, time update ignored.\n", name);
200 printk_deferred(" Please report this, consider using a different clocksource, if possible.\n");
201 printk_deferred(" Your kernel is probably still fine.\n");
202 tk->last_warning = jiffies;
203 }
204 tk->underflow_seen = 0;
205 }
206
207 if (tk->overflow_seen) {
208 if (jiffies - tk->last_warning > WARNING_FREQ) {
209 printk_deferred("WARNING: Overflow in clocksource '%s' observed, time update capped.\n", name);
210 printk_deferred(" Please report this, consider using a different clocksource, if possible.\n");
211 printk_deferred(" Your kernel is probably still fine.\n");
212 tk->last_warning = jiffies;
213 }
214 tk->overflow_seen = 0;
215 }
216}
217
218static inline u64 timekeeping_get_delta(const struct tk_read_base *tkr)
219{
220 struct timekeeper *tk = &tk_core.timekeeper;
221 u64 now, last, mask, max, delta;
222 unsigned int seq;
223
224
225
226
227
228
229
230
231 do {
232 seq = read_seqcount_begin(&tk_core.seq);
233 now = tk_clock_read(tkr);
234 last = tkr->cycle_last;
235 mask = tkr->mask;
236 max = tkr->clock->max_cycles;
237 } while (read_seqcount_retry(&tk_core.seq, seq));
238
239 delta = clocksource_delta(now, last, mask);
240
241
242
243
244
245 if (unlikely((~delta & mask) < (mask >> 3))) {
246 tk->underflow_seen = 1;
247 delta = 0;
248 }
249
250
251 if (unlikely(delta > max)) {
252 tk->overflow_seen = 1;
253 delta = tkr->clock->max_cycles;
254 }
255
256 return delta;
257}
258#else
259static inline void timekeeping_check_update(struct timekeeper *tk, u64 offset)
260{
261}
262static inline u64 timekeeping_get_delta(const struct tk_read_base *tkr)
263{
264 u64 cycle_now, delta;
265
266
267 cycle_now = tk_clock_read(tkr);
268
269
270 delta = clocksource_delta(cycle_now, tkr->cycle_last, tkr->mask);
271
272 return delta;
273}
274#endif
275
276
277
278
279
280
281
282
283
284
285
286
287static void tk_setup_internals(struct timekeeper *tk, struct clocksource *clock)
288{
289 u64 interval;
290 u64 tmp, ntpinterval;
291 struct clocksource *old_clock;
292
293 ++tk->cs_was_changed_seq;
294 old_clock = tk->tkr_mono.clock;
295 tk->tkr_mono.clock = clock;
296 tk->tkr_mono.mask = clock->mask;
297 tk->tkr_mono.cycle_last = tk_clock_read(&tk->tkr_mono);
298
299 tk->tkr_raw.clock = clock;
300 tk->tkr_raw.mask = clock->mask;
301 tk->tkr_raw.cycle_last = tk->tkr_mono.cycle_last;
302
303
304 tmp = NTP_INTERVAL_LENGTH;
305 tmp <<= clock->shift;
306 ntpinterval = tmp;
307 tmp += clock->mult/2;
308 do_div(tmp, clock->mult);
309 if (tmp == 0)
310 tmp = 1;
311
312 interval = (u64) tmp;
313 tk->cycle_interval = interval;
314
315
316 tk->xtime_interval = interval * clock->mult;
317 tk->xtime_remainder = ntpinterval - tk->xtime_interval;
318 tk->raw_interval = interval * clock->mult;
319
320
321 if (old_clock) {
322 int shift_change = clock->shift - old_clock->shift;
323 if (shift_change < 0) {
324 tk->tkr_mono.xtime_nsec >>= -shift_change;
325 tk->tkr_raw.xtime_nsec >>= -shift_change;
326 } else {
327 tk->tkr_mono.xtime_nsec <<= shift_change;
328 tk->tkr_raw.xtime_nsec <<= shift_change;
329 }
330 }
331
332 tk->tkr_mono.shift = clock->shift;
333 tk->tkr_raw.shift = clock->shift;
334
335 tk->ntp_error = 0;
336 tk->ntp_error_shift = NTP_SCALE_SHIFT - clock->shift;
337 tk->ntp_tick = ntpinterval << tk->ntp_error_shift;
338
339
340
341
342
343
344 tk->tkr_mono.mult = clock->mult;
345 tk->tkr_raw.mult = clock->mult;
346 tk->ntp_err_mult = 0;
347 tk->skip_second_overflow = 0;
348}
349
350
351
352#ifdef CONFIG_ARCH_USES_GETTIMEOFFSET
353static u32 default_arch_gettimeoffset(void) { return 0; }
354u32 (*arch_gettimeoffset)(void) = default_arch_gettimeoffset;
355#else
356static inline u32 arch_gettimeoffset(void) { return 0; }
357#endif
358
359static inline u64 timekeeping_delta_to_ns(const struct tk_read_base *tkr, u64 delta)
360{
361 u64 nsec;
362
363 nsec = delta * tkr->mult + tkr->xtime_nsec;
364 nsec >>= tkr->shift;
365
366
367 return nsec + arch_gettimeoffset();
368}
369
370static inline u64 timekeeping_get_ns(const struct tk_read_base *tkr)
371{
372 u64 delta;
373
374 delta = timekeeping_get_delta(tkr);
375 return timekeeping_delta_to_ns(tkr, delta);
376}
377
378static inline u64 timekeeping_cycles_to_ns(const struct tk_read_base *tkr, u64 cycles)
379{
380 u64 delta;
381
382
383 delta = clocksource_delta(cycles, tkr->cycle_last, tkr->mask);
384 return timekeeping_delta_to_ns(tkr, delta);
385}
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401static void update_fast_timekeeper(const struct tk_read_base *tkr,
402 struct tk_fast *tkf)
403{
404 struct tk_read_base *base = tkf->base;
405
406
407 raw_write_seqcount_latch(&tkf->seq);
408
409
410 memcpy(base, tkr, sizeof(*base));
411
412
413 raw_write_seqcount_latch(&tkf->seq);
414
415
416 memcpy(base + 1, base, sizeof(*base));
417}
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451static __always_inline u64 __ktime_get_fast_ns(struct tk_fast *tkf)
452{
453 struct tk_read_base *tkr;
454 unsigned int seq;
455 u64 now;
456
457 do {
458 seq = raw_read_seqcount_latch(&tkf->seq);
459 tkr = tkf->base + (seq & 0x01);
460 now = ktime_to_ns(tkr->base);
461
462 now += timekeeping_delta_to_ns(tkr,
463 clocksource_delta(
464 tk_clock_read(tkr),
465 tkr->cycle_last,
466 tkr->mask));
467 } while (read_seqcount_retry(&tkf->seq, seq));
468
469 return now;
470}
471
472u64 ktime_get_mono_fast_ns(void)
473{
474 return __ktime_get_fast_ns(&tk_fast_mono);
475}
476EXPORT_SYMBOL_GPL(ktime_get_mono_fast_ns);
477
478u64 ktime_get_raw_fast_ns(void)
479{
480 return __ktime_get_fast_ns(&tk_fast_raw);
481}
482EXPORT_SYMBOL_GPL(ktime_get_raw_fast_ns);
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505u64 notrace ktime_get_boot_fast_ns(void)
506{
507 struct timekeeper *tk = &tk_core.timekeeper;
508
509 return (ktime_get_mono_fast_ns() + ktime_to_ns(tk->offs_boot));
510}
511EXPORT_SYMBOL_GPL(ktime_get_boot_fast_ns);
512
513
514
515
516
517static __always_inline u64 __ktime_get_real_fast_ns(struct tk_fast *tkf)
518{
519 struct tk_read_base *tkr;
520 unsigned int seq;
521 u64 now;
522
523 do {
524 seq = raw_read_seqcount_latch(&tkf->seq);
525 tkr = tkf->base + (seq & 0x01);
526 now = ktime_to_ns(tkr->base_real);
527
528 now += timekeeping_delta_to_ns(tkr,
529 clocksource_delta(
530 tk_clock_read(tkr),
531 tkr->cycle_last,
532 tkr->mask));
533 } while (read_seqcount_retry(&tkf->seq, seq));
534
535 return now;
536}
537
538
539
540
541u64 ktime_get_real_fast_ns(void)
542{
543 return __ktime_get_real_fast_ns(&tk_fast_mono);
544}
545EXPORT_SYMBOL_GPL(ktime_get_real_fast_ns);
546
547
548
549
550
551
552
553
554
555
556
557static void halt_fast_timekeeper(const struct timekeeper *tk)
558{
559 static struct tk_read_base tkr_dummy;
560 const struct tk_read_base *tkr = &tk->tkr_mono;
561
562 memcpy(&tkr_dummy, tkr, sizeof(tkr_dummy));
563 cycles_at_suspend = tk_clock_read(tkr);
564 tkr_dummy.clock = &dummy_clock;
565 tkr_dummy.base_real = tkr->base + tk->offs_real;
566 update_fast_timekeeper(&tkr_dummy, &tk_fast_mono);
567
568 tkr = &tk->tkr_raw;
569 memcpy(&tkr_dummy, tkr, sizeof(tkr_dummy));
570 tkr_dummy.clock = &dummy_clock;
571 update_fast_timekeeper(&tkr_dummy, &tk_fast_raw);
572}
573
574static RAW_NOTIFIER_HEAD(pvclock_gtod_chain);
575
576static void update_pvclock_gtod(struct timekeeper *tk, bool was_set)
577{
578 raw_notifier_call_chain(&pvclock_gtod_chain, was_set, tk);
579}
580
581
582
583
584int pvclock_gtod_register_notifier(struct notifier_block *nb)
585{
586 struct timekeeper *tk = &tk_core.timekeeper;
587 unsigned long flags;
588 int ret;
589
590 raw_spin_lock_irqsave(&timekeeper_lock, flags);
591 ret = raw_notifier_chain_register(&pvclock_gtod_chain, nb);
592 update_pvclock_gtod(tk, true);
593 raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
594
595 return ret;
596}
597EXPORT_SYMBOL_GPL(pvclock_gtod_register_notifier);
598
599
600
601
602
603int pvclock_gtod_unregister_notifier(struct notifier_block *nb)
604{
605 unsigned long flags;
606 int ret;
607
608 raw_spin_lock_irqsave(&timekeeper_lock, flags);
609 ret = raw_notifier_chain_unregister(&pvclock_gtod_chain, nb);
610 raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
611
612 return ret;
613}
614EXPORT_SYMBOL_GPL(pvclock_gtod_unregister_notifier);
615
616
617
618
619static inline void tk_update_leap_state(struct timekeeper *tk)
620{
621 tk->next_leap_ktime = ntp_get_next_leap();
622 if (tk->next_leap_ktime != KTIME_MAX)
623
624 tk->next_leap_ktime = ktime_sub(tk->next_leap_ktime, tk->offs_real);
625}
626
627
628
629
630static inline void tk_update_ktime_data(struct timekeeper *tk)
631{
632 u64 seconds;
633 u32 nsec;
634
635
636
637
638
639
640
641
642 seconds = (u64)(tk->xtime_sec + tk->wall_to_monotonic.tv_sec);
643 nsec = (u32) tk->wall_to_monotonic.tv_nsec;
644 tk->tkr_mono.base = ns_to_ktime(seconds * NSEC_PER_SEC + nsec);
645
646
647
648
649
650
651 nsec += (u32)(tk->tkr_mono.xtime_nsec >> tk->tkr_mono.shift);
652 if (nsec >= NSEC_PER_SEC)
653 seconds++;
654 tk->ktime_sec = seconds;
655
656
657 tk->tkr_raw.base = ns_to_ktime(tk->raw_sec * NSEC_PER_SEC);
658}
659
660
661static void timekeeping_update(struct timekeeper *tk, unsigned int action)
662{
663 if (action & TK_CLEAR_NTP) {
664 tk->ntp_error = 0;
665 ntp_clear();
666 }
667
668 tk_update_leap_state(tk);
669 tk_update_ktime_data(tk);
670
671 update_vsyscall(tk);
672 update_pvclock_gtod(tk, action & TK_CLOCK_WAS_SET);
673
674 tk->tkr_mono.base_real = tk->tkr_mono.base + tk->offs_real;
675 update_fast_timekeeper(&tk->tkr_mono, &tk_fast_mono);
676 update_fast_timekeeper(&tk->tkr_raw, &tk_fast_raw);
677
678 if (action & TK_CLOCK_WAS_SET)
679 tk->clock_was_set_seq++;
680
681
682
683
684
685 if (action & TK_MIRROR)
686 memcpy(&shadow_timekeeper, &tk_core.timekeeper,
687 sizeof(tk_core.timekeeper));
688}
689
690
691
692
693
694
695
696
697static void timekeeping_forward_now(struct timekeeper *tk)
698{
699 u64 cycle_now, delta;
700
701 cycle_now = tk_clock_read(&tk->tkr_mono);
702 delta = clocksource_delta(cycle_now, tk->tkr_mono.cycle_last, tk->tkr_mono.mask);
703 tk->tkr_mono.cycle_last = cycle_now;
704 tk->tkr_raw.cycle_last = cycle_now;
705
706 tk->tkr_mono.xtime_nsec += delta * tk->tkr_mono.mult;
707
708
709 tk->tkr_mono.xtime_nsec += (u64)arch_gettimeoffset() << tk->tkr_mono.shift;
710
711
712 tk->tkr_raw.xtime_nsec += delta * tk->tkr_raw.mult;
713
714
715 tk->tkr_raw.xtime_nsec += (u64)arch_gettimeoffset() << tk->tkr_raw.shift;
716
717 tk_normalize_xtime(tk);
718}
719
720
721
722
723
724
725
726void ktime_get_real_ts64(struct timespec64 *ts)
727{
728 struct timekeeper *tk = &tk_core.timekeeper;
729 unsigned int seq;
730 u64 nsecs;
731
732 WARN_ON(timekeeping_suspended);
733
734 do {
735 seq = read_seqcount_begin(&tk_core.seq);
736
737 ts->tv_sec = tk->xtime_sec;
738 nsecs = timekeeping_get_ns(&tk->tkr_mono);
739
740 } while (read_seqcount_retry(&tk_core.seq, seq));
741
742 ts->tv_nsec = 0;
743 timespec64_add_ns(ts, nsecs);
744}
745EXPORT_SYMBOL(ktime_get_real_ts64);
746
747ktime_t ktime_get(void)
748{
749 struct timekeeper *tk = &tk_core.timekeeper;
750 unsigned int seq;
751 ktime_t base;
752 u64 nsecs;
753
754 WARN_ON(timekeeping_suspended);
755
756 do {
757 seq = read_seqcount_begin(&tk_core.seq);
758 base = tk->tkr_mono.base;
759 nsecs = timekeeping_get_ns(&tk->tkr_mono);
760
761 } while (read_seqcount_retry(&tk_core.seq, seq));
762
763 return ktime_add_ns(base, nsecs);
764}
765EXPORT_SYMBOL_GPL(ktime_get);
766
767u32 ktime_get_resolution_ns(void)
768{
769 struct timekeeper *tk = &tk_core.timekeeper;
770 unsigned int seq;
771 u32 nsecs;
772
773 WARN_ON(timekeeping_suspended);
774
775 do {
776 seq = read_seqcount_begin(&tk_core.seq);
777 nsecs = tk->tkr_mono.mult >> tk->tkr_mono.shift;
778 } while (read_seqcount_retry(&tk_core.seq, seq));
779
780 return nsecs;
781}
782EXPORT_SYMBOL_GPL(ktime_get_resolution_ns);
783
784static ktime_t *offsets[TK_OFFS_MAX] = {
785 [TK_OFFS_REAL] = &tk_core.timekeeper.offs_real,
786 [TK_OFFS_BOOT] = &tk_core.timekeeper.offs_boot,
787 [TK_OFFS_TAI] = &tk_core.timekeeper.offs_tai,
788};
789
790ktime_t ktime_get_with_offset(enum tk_offsets offs)
791{
792 struct timekeeper *tk = &tk_core.timekeeper;
793 unsigned int seq;
794 ktime_t base, *offset = offsets[offs];
795 u64 nsecs;
796
797 WARN_ON(timekeeping_suspended);
798
799 do {
800 seq = read_seqcount_begin(&tk_core.seq);
801 base = ktime_add(tk->tkr_mono.base, *offset);
802 nsecs = timekeeping_get_ns(&tk->tkr_mono);
803
804 } while (read_seqcount_retry(&tk_core.seq, seq));
805
806 return ktime_add_ns(base, nsecs);
807
808}
809EXPORT_SYMBOL_GPL(ktime_get_with_offset);
810
811ktime_t ktime_get_coarse_with_offset(enum tk_offsets offs)
812{
813 struct timekeeper *tk = &tk_core.timekeeper;
814 unsigned int seq;
815 ktime_t base, *offset = offsets[offs];
816 u64 nsecs;
817
818 WARN_ON(timekeeping_suspended);
819
820 do {
821 seq = read_seqcount_begin(&tk_core.seq);
822 base = ktime_add(tk->tkr_mono.base, *offset);
823 nsecs = tk->tkr_mono.xtime_nsec >> tk->tkr_mono.shift;
824
825 } while (read_seqcount_retry(&tk_core.seq, seq));
826
827 return ktime_add_ns(base, nsecs);
828}
829EXPORT_SYMBOL_GPL(ktime_get_coarse_with_offset);
830
831
832
833
834
835
836ktime_t ktime_mono_to_any(ktime_t tmono, enum tk_offsets offs)
837{
838 ktime_t *offset = offsets[offs];
839 unsigned int seq;
840 ktime_t tconv;
841
842 do {
843 seq = read_seqcount_begin(&tk_core.seq);
844 tconv = ktime_add(tmono, *offset);
845 } while (read_seqcount_retry(&tk_core.seq, seq));
846
847 return tconv;
848}
849EXPORT_SYMBOL_GPL(ktime_mono_to_any);
850
851
852
853
854ktime_t ktime_get_raw(void)
855{
856 struct timekeeper *tk = &tk_core.timekeeper;
857 unsigned int seq;
858 ktime_t base;
859 u64 nsecs;
860
861 do {
862 seq = read_seqcount_begin(&tk_core.seq);
863 base = tk->tkr_raw.base;
864 nsecs = timekeeping_get_ns(&tk->tkr_raw);
865
866 } while (read_seqcount_retry(&tk_core.seq, seq));
867
868 return ktime_add_ns(base, nsecs);
869}
870EXPORT_SYMBOL_GPL(ktime_get_raw);
871
872
873
874
875
876
877
878
879
880void ktime_get_ts64(struct timespec64 *ts)
881{
882 struct timekeeper *tk = &tk_core.timekeeper;
883 struct timespec64 tomono;
884 unsigned int seq;
885 u64 nsec;
886
887 WARN_ON(timekeeping_suspended);
888
889 do {
890 seq = read_seqcount_begin(&tk_core.seq);
891 ts->tv_sec = tk->xtime_sec;
892 nsec = timekeeping_get_ns(&tk->tkr_mono);
893 tomono = tk->wall_to_monotonic;
894
895 } while (read_seqcount_retry(&tk_core.seq, seq));
896
897 ts->tv_sec += tomono.tv_sec;
898 ts->tv_nsec = 0;
899 timespec64_add_ns(ts, nsec + tomono.tv_nsec);
900}
901EXPORT_SYMBOL_GPL(ktime_get_ts64);
902
903
904
905
906
907
908
909
910
911
912time64_t ktime_get_seconds(void)
913{
914 struct timekeeper *tk = &tk_core.timekeeper;
915
916 WARN_ON(timekeeping_suspended);
917 return tk->ktime_sec;
918}
919EXPORT_SYMBOL_GPL(ktime_get_seconds);
920
921
922
923
924
925
926
927
928
929
930
931
932time64_t ktime_get_real_seconds(void)
933{
934 struct timekeeper *tk = &tk_core.timekeeper;
935 time64_t seconds;
936 unsigned int seq;
937
938 if (IS_ENABLED(CONFIG_64BIT))
939 return tk->xtime_sec;
940
941 do {
942 seq = read_seqcount_begin(&tk_core.seq);
943 seconds = tk->xtime_sec;
944
945 } while (read_seqcount_retry(&tk_core.seq, seq));
946
947 return seconds;
948}
949EXPORT_SYMBOL_GPL(ktime_get_real_seconds);
950
951
952
953
954
955
956time64_t __ktime_get_real_seconds(void)
957{
958 struct timekeeper *tk = &tk_core.timekeeper;
959
960 return tk->xtime_sec;
961}
962
963
964
965
966
967void ktime_get_snapshot(struct system_time_snapshot *systime_snapshot)
968{
969 struct timekeeper *tk = &tk_core.timekeeper;
970 unsigned int seq;
971 ktime_t base_raw;
972 ktime_t base_real;
973 u64 nsec_raw;
974 u64 nsec_real;
975 u64 now;
976
977 WARN_ON_ONCE(timekeeping_suspended);
978
979 do {
980 seq = read_seqcount_begin(&tk_core.seq);
981 now = tk_clock_read(&tk->tkr_mono);
982 systime_snapshot->cs_was_changed_seq = tk->cs_was_changed_seq;
983 systime_snapshot->clock_was_set_seq = tk->clock_was_set_seq;
984 base_real = ktime_add(tk->tkr_mono.base,
985 tk_core.timekeeper.offs_real);
986 base_raw = tk->tkr_raw.base;
987 nsec_real = timekeeping_cycles_to_ns(&tk->tkr_mono, now);
988 nsec_raw = timekeeping_cycles_to_ns(&tk->tkr_raw, now);
989 } while (read_seqcount_retry(&tk_core.seq, seq));
990
991 systime_snapshot->cycles = now;
992 systime_snapshot->real = ktime_add_ns(base_real, nsec_real);
993 systime_snapshot->raw = ktime_add_ns(base_raw, nsec_raw);
994}
995EXPORT_SYMBOL_GPL(ktime_get_snapshot);
996
997
998static int scale64_check_overflow(u64 mult, u64 div, u64 *base)
999{
1000 u64 tmp, rem;
1001
1002 tmp = div64_u64_rem(*base, div, &rem);
1003
1004 if (((int)sizeof(u64)*8 - fls64(mult) < fls64(tmp)) ||
1005 ((int)sizeof(u64)*8 - fls64(mult) < fls64(rem)))
1006 return -EOVERFLOW;
1007 tmp *= mult;
1008
1009 rem = div64_u64(rem * mult, div);
1010 *base = tmp + rem;
1011 return 0;
1012}
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031static int adjust_historical_crosststamp(struct system_time_snapshot *history,
1032 u64 partial_history_cycles,
1033 u64 total_history_cycles,
1034 bool discontinuity,
1035 struct system_device_crosststamp *ts)
1036{
1037 struct timekeeper *tk = &tk_core.timekeeper;
1038 u64 corr_raw, corr_real;
1039 bool interp_forward;
1040 int ret;
1041
1042 if (total_history_cycles == 0 || partial_history_cycles == 0)
1043 return 0;
1044
1045
1046 interp_forward = partial_history_cycles > total_history_cycles / 2;
1047 partial_history_cycles = interp_forward ?
1048 total_history_cycles - partial_history_cycles :
1049 partial_history_cycles;
1050
1051
1052
1053
1054
1055 corr_raw = (u64)ktime_to_ns(
1056 ktime_sub(ts->sys_monoraw, history->raw));
1057 ret = scale64_check_overflow(partial_history_cycles,
1058 total_history_cycles, &corr_raw);
1059 if (ret)
1060 return ret;
1061
1062
1063
1064
1065
1066
1067
1068
1069 if (discontinuity) {
1070 corr_real = mul_u64_u32_div
1071 (corr_raw, tk->tkr_mono.mult, tk->tkr_raw.mult);
1072 } else {
1073 corr_real = (u64)ktime_to_ns(
1074 ktime_sub(ts->sys_realtime, history->real));
1075 ret = scale64_check_overflow(partial_history_cycles,
1076 total_history_cycles, &corr_real);
1077 if (ret)
1078 return ret;
1079 }
1080
1081
1082 if (interp_forward) {
1083 ts->sys_monoraw = ktime_add_ns(history->raw, corr_raw);
1084 ts->sys_realtime = ktime_add_ns(history->real, corr_real);
1085 } else {
1086 ts->sys_monoraw = ktime_sub_ns(ts->sys_monoraw, corr_raw);
1087 ts->sys_realtime = ktime_sub_ns(ts->sys_realtime, corr_real);
1088 }
1089
1090 return 0;
1091}
1092
1093
1094
1095
1096static bool cycle_between(u64 before, u64 test, u64 after)
1097{
1098 if (test > before && test < after)
1099 return true;
1100 if (test < before && before > after)
1101 return true;
1102 return false;
1103}
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116int get_device_system_crosststamp(int (*get_time_fn)
1117 (ktime_t *device_time,
1118 struct system_counterval_t *sys_counterval,
1119 void *ctx),
1120 void *ctx,
1121 struct system_time_snapshot *history_begin,
1122 struct system_device_crosststamp *xtstamp)
1123{
1124 struct system_counterval_t system_counterval;
1125 struct timekeeper *tk = &tk_core.timekeeper;
1126 u64 cycles, now, interval_start;
1127 unsigned int clock_was_set_seq = 0;
1128 ktime_t base_real, base_raw;
1129 u64 nsec_real, nsec_raw;
1130 u8 cs_was_changed_seq;
1131 unsigned int seq;
1132 bool do_interp;
1133 int ret;
1134
1135 do {
1136 seq = read_seqcount_begin(&tk_core.seq);
1137
1138
1139
1140
1141 ret = get_time_fn(&xtstamp->device, &system_counterval, ctx);
1142 if (ret)
1143 return ret;
1144
1145
1146
1147
1148
1149
1150 if (tk->tkr_mono.clock != system_counterval.cs)
1151 return -ENODEV;
1152 cycles = system_counterval.cycles;
1153
1154
1155
1156
1157
1158 now = tk_clock_read(&tk->tkr_mono);
1159 interval_start = tk->tkr_mono.cycle_last;
1160 if (!cycle_between(interval_start, cycles, now)) {
1161 clock_was_set_seq = tk->clock_was_set_seq;
1162 cs_was_changed_seq = tk->cs_was_changed_seq;
1163 cycles = interval_start;
1164 do_interp = true;
1165 } else {
1166 do_interp = false;
1167 }
1168
1169 base_real = ktime_add(tk->tkr_mono.base,
1170 tk_core.timekeeper.offs_real);
1171 base_raw = tk->tkr_raw.base;
1172
1173 nsec_real = timekeeping_cycles_to_ns(&tk->tkr_mono,
1174 system_counterval.cycles);
1175 nsec_raw = timekeeping_cycles_to_ns(&tk->tkr_raw,
1176 system_counterval.cycles);
1177 } while (read_seqcount_retry(&tk_core.seq, seq));
1178
1179 xtstamp->sys_realtime = ktime_add_ns(base_real, nsec_real);
1180 xtstamp->sys_monoraw = ktime_add_ns(base_raw, nsec_raw);
1181
1182
1183
1184
1185
1186 if (do_interp) {
1187 u64 partial_history_cycles, total_history_cycles;
1188 bool discontinuity;
1189
1190
1191
1192
1193
1194
1195 if (!history_begin ||
1196 !cycle_between(history_begin->cycles,
1197 system_counterval.cycles, cycles) ||
1198 history_begin->cs_was_changed_seq != cs_was_changed_seq)
1199 return -EINVAL;
1200 partial_history_cycles = cycles - system_counterval.cycles;
1201 total_history_cycles = cycles - history_begin->cycles;
1202 discontinuity =
1203 history_begin->clock_was_set_seq != clock_was_set_seq;
1204
1205 ret = adjust_historical_crosststamp(history_begin,
1206 partial_history_cycles,
1207 total_history_cycles,
1208 discontinuity, xtstamp);
1209 if (ret)
1210 return ret;
1211 }
1212
1213 return 0;
1214}
1215EXPORT_SYMBOL_GPL(get_device_system_crosststamp);
1216
1217
1218
1219
1220
1221
1222
1223int do_settimeofday64(const struct timespec64 *ts)
1224{
1225 struct timekeeper *tk = &tk_core.timekeeper;
1226 struct timespec64 ts_delta, xt;
1227 unsigned long flags;
1228 int ret = 0;
1229
1230 if (!timespec64_valid_settod(ts))
1231 return -EINVAL;
1232
1233 raw_spin_lock_irqsave(&timekeeper_lock, flags);
1234 write_seqcount_begin(&tk_core.seq);
1235
1236 timekeeping_forward_now(tk);
1237
1238 xt = tk_xtime(tk);
1239 ts_delta.tv_sec = ts->tv_sec - xt.tv_sec;
1240 ts_delta.tv_nsec = ts->tv_nsec - xt.tv_nsec;
1241
1242 if (timespec64_compare(&tk->wall_to_monotonic, &ts_delta) > 0) {
1243 ret = -EINVAL;
1244 goto out;
1245 }
1246
1247 tk_set_wall_to_mono(tk, timespec64_sub(tk->wall_to_monotonic, ts_delta));
1248
1249 tk_set_xtime(tk, ts);
1250out:
1251 timekeeping_update(tk, TK_CLEAR_NTP | TK_MIRROR | TK_CLOCK_WAS_SET);
1252
1253 write_seqcount_end(&tk_core.seq);
1254 raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
1255
1256
1257 clock_was_set();
1258
1259 if (!ret)
1260 audit_tk_injoffset(ts_delta);
1261
1262 return ret;
1263}
1264EXPORT_SYMBOL(do_settimeofday64);
1265
1266
1267
1268
1269
1270
1271
1272static int timekeeping_inject_offset(const struct timespec64 *ts)
1273{
1274 struct timekeeper *tk = &tk_core.timekeeper;
1275 unsigned long flags;
1276 struct timespec64 tmp;
1277 int ret = 0;
1278
1279 if (ts->tv_nsec < 0 || ts->tv_nsec >= NSEC_PER_SEC)
1280 return -EINVAL;
1281
1282 raw_spin_lock_irqsave(&timekeeper_lock, flags);
1283 write_seqcount_begin(&tk_core.seq);
1284
1285 timekeeping_forward_now(tk);
1286
1287
1288 tmp = timespec64_add(tk_xtime(tk), *ts);
1289 if (timespec64_compare(&tk->wall_to_monotonic, ts) > 0 ||
1290 !timespec64_valid_settod(&tmp)) {
1291 ret = -EINVAL;
1292 goto error;
1293 }
1294
1295 tk_xtime_add(tk, ts);
1296 tk_set_wall_to_mono(tk, timespec64_sub(tk->wall_to_monotonic, *ts));
1297
1298error:
1299 timekeeping_update(tk, TK_CLEAR_NTP | TK_MIRROR | TK_CLOCK_WAS_SET);
1300
1301 write_seqcount_end(&tk_core.seq);
1302 raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
1303
1304
1305 clock_was_set();
1306
1307 return ret;
1308}
1309
1310
1311
1312
1313
1314int persistent_clock_is_local;
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332void timekeeping_warp_clock(void)
1333{
1334 if (sys_tz.tz_minuteswest != 0) {
1335 struct timespec64 adjust;
1336
1337 persistent_clock_is_local = 1;
1338 adjust.tv_sec = sys_tz.tz_minuteswest * 60;
1339 adjust.tv_nsec = 0;
1340 timekeeping_inject_offset(&adjust);
1341 }
1342}
1343
1344
1345
1346
1347
1348static void __timekeeping_set_tai_offset(struct timekeeper *tk, s32 tai_offset)
1349{
1350 tk->tai_offset = tai_offset;
1351 tk->offs_tai = ktime_add(tk->offs_real, ktime_set(tai_offset, 0));
1352}
1353
1354
1355
1356
1357
1358
1359static int change_clocksource(void *data)
1360{
1361 struct timekeeper *tk = &tk_core.timekeeper;
1362 struct clocksource *new, *old;
1363 unsigned long flags;
1364
1365 new = (struct clocksource *) data;
1366
1367 raw_spin_lock_irqsave(&timekeeper_lock, flags);
1368 write_seqcount_begin(&tk_core.seq);
1369
1370 timekeeping_forward_now(tk);
1371
1372
1373
1374
1375 if (try_module_get(new->owner)) {
1376 if (!new->enable || new->enable(new) == 0) {
1377 old = tk->tkr_mono.clock;
1378 tk_setup_internals(tk, new);
1379 if (old->disable)
1380 old->disable(old);
1381 module_put(old->owner);
1382 } else {
1383 module_put(new->owner);
1384 }
1385 }
1386 timekeeping_update(tk, TK_CLEAR_NTP | TK_MIRROR | TK_CLOCK_WAS_SET);
1387
1388 write_seqcount_end(&tk_core.seq);
1389 raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
1390
1391 return 0;
1392}
1393
1394
1395
1396
1397
1398
1399
1400
1401int timekeeping_notify(struct clocksource *clock)
1402{
1403 struct timekeeper *tk = &tk_core.timekeeper;
1404
1405 if (tk->tkr_mono.clock == clock)
1406 return 0;
1407 stop_machine(change_clocksource, clock, NULL);
1408 tick_clock_notify();
1409 return tk->tkr_mono.clock == clock ? 0 : -1;
1410}
1411
1412
1413
1414
1415
1416
1417
1418void ktime_get_raw_ts64(struct timespec64 *ts)
1419{
1420 struct timekeeper *tk = &tk_core.timekeeper;
1421 unsigned int seq;
1422 u64 nsecs;
1423
1424 do {
1425 seq = read_seqcount_begin(&tk_core.seq);
1426 ts->tv_sec = tk->raw_sec;
1427 nsecs = timekeeping_get_ns(&tk->tkr_raw);
1428
1429 } while (read_seqcount_retry(&tk_core.seq, seq));
1430
1431 ts->tv_nsec = 0;
1432 timespec64_add_ns(ts, nsecs);
1433}
1434EXPORT_SYMBOL(ktime_get_raw_ts64);
1435
1436
1437
1438
1439
1440int timekeeping_valid_for_hres(void)
1441{
1442 struct timekeeper *tk = &tk_core.timekeeper;
1443 unsigned int seq;
1444 int ret;
1445
1446 do {
1447 seq = read_seqcount_begin(&tk_core.seq);
1448
1449 ret = tk->tkr_mono.clock->flags & CLOCK_SOURCE_VALID_FOR_HRES;
1450
1451 } while (read_seqcount_retry(&tk_core.seq, seq));
1452
1453 return ret;
1454}
1455
1456
1457
1458
1459u64 timekeeping_max_deferment(void)
1460{
1461 struct timekeeper *tk = &tk_core.timekeeper;
1462 unsigned int seq;
1463 u64 ret;
1464
1465 do {
1466 seq = read_seqcount_begin(&tk_core.seq);
1467
1468 ret = tk->tkr_mono.clock->max_idle_ns;
1469
1470 } while (read_seqcount_retry(&tk_core.seq, seq));
1471
1472 return ret;
1473}
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484void __weak read_persistent_clock64(struct timespec64 *ts)
1485{
1486 ts->tv_sec = 0;
1487 ts->tv_nsec = 0;
1488}
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502void __weak __init
1503read_persistent_wall_and_boot_offset(struct timespec64 *wall_time,
1504 struct timespec64 *boot_offset)
1505{
1506 read_persistent_clock64(wall_time);
1507 *boot_offset = ns_to_timespec64(local_clock());
1508}
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523static bool suspend_timing_needed;
1524
1525
1526static bool persistent_clock_exists;
1527
1528
1529
1530
1531void __init timekeeping_init(void)
1532{
1533 struct timespec64 wall_time, boot_offset, wall_to_mono;
1534 struct timekeeper *tk = &tk_core.timekeeper;
1535 struct clocksource *clock;
1536 unsigned long flags;
1537
1538 read_persistent_wall_and_boot_offset(&wall_time, &boot_offset);
1539 if (timespec64_valid_settod(&wall_time) &&
1540 timespec64_to_ns(&wall_time) > 0) {
1541 persistent_clock_exists = true;
1542 } else if (timespec64_to_ns(&wall_time) != 0) {
1543 pr_warn("Persistent clock returned invalid value");
1544 wall_time = (struct timespec64){0};
1545 }
1546
1547 if (timespec64_compare(&wall_time, &boot_offset) < 0)
1548 boot_offset = (struct timespec64){0};
1549
1550
1551
1552
1553
1554 wall_to_mono = timespec64_sub(boot_offset, wall_time);
1555
1556 raw_spin_lock_irqsave(&timekeeper_lock, flags);
1557 write_seqcount_begin(&tk_core.seq);
1558 ntp_init();
1559
1560 clock = clocksource_default_clock();
1561 if (clock->enable)
1562 clock->enable(clock);
1563 tk_setup_internals(tk, clock);
1564
1565 tk_set_xtime(tk, &wall_time);
1566 tk->raw_sec = 0;
1567
1568 tk_set_wall_to_mono(tk, wall_to_mono);
1569
1570 timekeeping_update(tk, TK_MIRROR | TK_CLOCK_WAS_SET);
1571
1572 write_seqcount_end(&tk_core.seq);
1573 raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
1574}
1575
1576
1577static struct timespec64 timekeeping_suspend_time;
1578
1579
1580
1581
1582
1583
1584
1585
1586static void __timekeeping_inject_sleeptime(struct timekeeper *tk,
1587 const struct timespec64 *delta)
1588{
1589 if (!timespec64_valid_strict(delta)) {
1590 printk_deferred(KERN_WARNING
1591 "__timekeeping_inject_sleeptime: Invalid "
1592 "sleep delta value!\n");
1593 return;
1594 }
1595 tk_xtime_add(tk, delta);
1596 tk_set_wall_to_mono(tk, timespec64_sub(tk->wall_to_monotonic, *delta));
1597 tk_update_sleep_time(tk, timespec64_to_ktime(*delta));
1598 tk_debug_account_sleep_time(delta);
1599}
1600
1601#if defined(CONFIG_PM_SLEEP) && defined(CONFIG_RTC_HCTOSYS_DEVICE)
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618bool timekeeping_rtc_skipresume(void)
1619{
1620 return !suspend_timing_needed;
1621}
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632bool timekeeping_rtc_skipsuspend(void)
1633{
1634 return persistent_clock_exists;
1635}
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648void timekeeping_inject_sleeptime64(const struct timespec64 *delta)
1649{
1650 struct timekeeper *tk = &tk_core.timekeeper;
1651 unsigned long flags;
1652
1653 raw_spin_lock_irqsave(&timekeeper_lock, flags);
1654 write_seqcount_begin(&tk_core.seq);
1655
1656 suspend_timing_needed = false;
1657
1658 timekeeping_forward_now(tk);
1659
1660 __timekeeping_inject_sleeptime(tk, delta);
1661
1662 timekeeping_update(tk, TK_CLEAR_NTP | TK_MIRROR | TK_CLOCK_WAS_SET);
1663
1664 write_seqcount_end(&tk_core.seq);
1665 raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
1666
1667
1668 clock_was_set();
1669}
1670#endif
1671
1672
1673
1674
1675void timekeeping_resume(void)
1676{
1677 struct timekeeper *tk = &tk_core.timekeeper;
1678 struct clocksource *clock = tk->tkr_mono.clock;
1679 unsigned long flags;
1680 struct timespec64 ts_new, ts_delta;
1681 u64 cycle_now, nsec;
1682 bool inject_sleeptime = false;
1683
1684 read_persistent_clock64(&ts_new);
1685
1686 clockevents_resume();
1687 clocksource_resume();
1688
1689 raw_spin_lock_irqsave(&timekeeper_lock, flags);
1690 write_seqcount_begin(&tk_core.seq);
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704 cycle_now = tk_clock_read(&tk->tkr_mono);
1705 nsec = clocksource_stop_suspend_timing(clock, cycle_now);
1706 if (nsec > 0) {
1707 ts_delta = ns_to_timespec64(nsec);
1708 inject_sleeptime = true;
1709 } else if (timespec64_compare(&ts_new, &timekeeping_suspend_time) > 0) {
1710 ts_delta = timespec64_sub(ts_new, timekeeping_suspend_time);
1711 inject_sleeptime = true;
1712 }
1713
1714 if (inject_sleeptime) {
1715 suspend_timing_needed = false;
1716 __timekeeping_inject_sleeptime(tk, &ts_delta);
1717 }
1718
1719
1720 tk->tkr_mono.cycle_last = cycle_now;
1721 tk->tkr_raw.cycle_last = cycle_now;
1722
1723 tk->ntp_error = 0;
1724 timekeeping_suspended = 0;
1725 timekeeping_update(tk, TK_MIRROR | TK_CLOCK_WAS_SET);
1726 write_seqcount_end(&tk_core.seq);
1727 raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
1728
1729 touch_softlockup_watchdog();
1730
1731 tick_resume();
1732 hrtimers_resume();
1733}
1734
1735int timekeeping_suspend(void)
1736{
1737 struct timekeeper *tk = &tk_core.timekeeper;
1738 unsigned long flags;
1739 struct timespec64 delta, delta_delta;
1740 static struct timespec64 old_delta;
1741 struct clocksource *curr_clock;
1742 u64 cycle_now;
1743
1744 read_persistent_clock64(&timekeeping_suspend_time);
1745
1746
1747
1748
1749
1750
1751 if (timekeeping_suspend_time.tv_sec || timekeeping_suspend_time.tv_nsec)
1752 persistent_clock_exists = true;
1753
1754 suspend_timing_needed = true;
1755
1756 raw_spin_lock_irqsave(&timekeeper_lock, flags);
1757 write_seqcount_begin(&tk_core.seq);
1758 timekeeping_forward_now(tk);
1759 timekeeping_suspended = 1;
1760
1761
1762
1763
1764
1765
1766 curr_clock = tk->tkr_mono.clock;
1767 cycle_now = tk->tkr_mono.cycle_last;
1768 clocksource_start_suspend_timing(curr_clock, cycle_now);
1769
1770 if (persistent_clock_exists) {
1771
1772
1773
1774
1775
1776
1777 delta = timespec64_sub(tk_xtime(tk), timekeeping_suspend_time);
1778 delta_delta = timespec64_sub(delta, old_delta);
1779 if (abs(delta_delta.tv_sec) >= 2) {
1780
1781
1782
1783
1784 old_delta = delta;
1785 } else {
1786
1787 timekeeping_suspend_time =
1788 timespec64_add(timekeeping_suspend_time, delta_delta);
1789 }
1790 }
1791
1792 timekeeping_update(tk, TK_MIRROR);
1793 halt_fast_timekeeper(tk);
1794 write_seqcount_end(&tk_core.seq);
1795 raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
1796
1797 tick_suspend();
1798 clocksource_suspend();
1799 clockevents_suspend();
1800
1801 return 0;
1802}
1803
1804
1805static struct syscore_ops timekeeping_syscore_ops = {
1806 .resume = timekeeping_resume,
1807 .suspend = timekeeping_suspend,
1808};
1809
1810static int __init timekeeping_init_ops(void)
1811{
1812 register_syscore_ops(&timekeeping_syscore_ops);
1813 return 0;
1814}
1815device_initcall(timekeeping_init_ops);
1816
1817
1818
1819
1820static __always_inline void timekeeping_apply_adjustment(struct timekeeper *tk,
1821 s64 offset,
1822 s32 mult_adj)
1823{
1824 s64 interval = tk->cycle_interval;
1825
1826 if (mult_adj == 0) {
1827 return;
1828 } else if (mult_adj == -1) {
1829 interval = -interval;
1830 offset = -offset;
1831 } else if (mult_adj != 1) {
1832 interval *= mult_adj;
1833 offset *= mult_adj;
1834 }
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883 if ((mult_adj > 0) && (tk->tkr_mono.mult + mult_adj < mult_adj)) {
1884
1885 WARN_ON_ONCE(1);
1886 return;
1887 }
1888
1889 tk->tkr_mono.mult += mult_adj;
1890 tk->xtime_interval += interval;
1891 tk->tkr_mono.xtime_nsec -= offset;
1892}
1893
1894
1895
1896
1897
1898static void timekeeping_adjust(struct timekeeper *tk, s64 offset)
1899{
1900 u32 mult;
1901
1902
1903
1904
1905
1906 if (likely(tk->ntp_tick == ntp_tick_length())) {
1907 mult = tk->tkr_mono.mult - tk->ntp_err_mult;
1908 } else {
1909 tk->ntp_tick = ntp_tick_length();
1910 mult = div64_u64((tk->ntp_tick >> tk->ntp_error_shift) -
1911 tk->xtime_remainder, tk->cycle_interval);
1912 }
1913
1914
1915
1916
1917
1918
1919
1920 tk->ntp_err_mult = tk->ntp_error > 0 ? 1 : 0;
1921 mult += tk->ntp_err_mult;
1922
1923 timekeeping_apply_adjustment(tk, offset, mult - tk->tkr_mono.mult);
1924
1925 if (unlikely(tk->tkr_mono.clock->maxadj &&
1926 (abs(tk->tkr_mono.mult - tk->tkr_mono.clock->mult)
1927 > tk->tkr_mono.clock->maxadj))) {
1928 printk_once(KERN_WARNING
1929 "Adjusting %s more than 11%% (%ld vs %ld)\n",
1930 tk->tkr_mono.clock->name, (long)tk->tkr_mono.mult,
1931 (long)tk->tkr_mono.clock->mult + tk->tkr_mono.clock->maxadj);
1932 }
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944 if (unlikely((s64)tk->tkr_mono.xtime_nsec < 0)) {
1945 tk->tkr_mono.xtime_nsec += (u64)NSEC_PER_SEC <<
1946 tk->tkr_mono.shift;
1947 tk->xtime_sec--;
1948 tk->skip_second_overflow = 1;
1949 }
1950}
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960static inline unsigned int accumulate_nsecs_to_secs(struct timekeeper *tk)
1961{
1962 u64 nsecps = (u64)NSEC_PER_SEC << tk->tkr_mono.shift;
1963 unsigned int clock_set = 0;
1964
1965 while (tk->tkr_mono.xtime_nsec >= nsecps) {
1966 int leap;
1967
1968 tk->tkr_mono.xtime_nsec -= nsecps;
1969 tk->xtime_sec++;
1970
1971
1972
1973
1974
1975 if (unlikely(tk->skip_second_overflow)) {
1976 tk->skip_second_overflow = 0;
1977 continue;
1978 }
1979
1980
1981 leap = second_overflow(tk->xtime_sec);
1982 if (unlikely(leap)) {
1983 struct timespec64 ts;
1984
1985 tk->xtime_sec += leap;
1986
1987 ts.tv_sec = leap;
1988 ts.tv_nsec = 0;
1989 tk_set_wall_to_mono(tk,
1990 timespec64_sub(tk->wall_to_monotonic, ts));
1991
1992 __timekeeping_set_tai_offset(tk, tk->tai_offset - leap);
1993
1994 clock_set = TK_CLOCK_WAS_SET;
1995 }
1996 }
1997 return clock_set;
1998}
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009static u64 logarithmic_accumulation(struct timekeeper *tk, u64 offset,
2010 u32 shift, unsigned int *clock_set)
2011{
2012 u64 interval = tk->cycle_interval << shift;
2013 u64 snsec_per_sec;
2014
2015
2016 if (offset < interval)
2017 return offset;
2018
2019
2020 offset -= interval;
2021 tk->tkr_mono.cycle_last += interval;
2022 tk->tkr_raw.cycle_last += interval;
2023
2024 tk->tkr_mono.xtime_nsec += tk->xtime_interval << shift;
2025 *clock_set |= accumulate_nsecs_to_secs(tk);
2026
2027
2028 tk->tkr_raw.xtime_nsec += tk->raw_interval << shift;
2029 snsec_per_sec = (u64)NSEC_PER_SEC << tk->tkr_raw.shift;
2030 while (tk->tkr_raw.xtime_nsec >= snsec_per_sec) {
2031 tk->tkr_raw.xtime_nsec -= snsec_per_sec;
2032 tk->raw_sec++;
2033 }
2034
2035
2036 tk->ntp_error += tk->ntp_tick << shift;
2037 tk->ntp_error -= (tk->xtime_interval + tk->xtime_remainder) <<
2038 (tk->ntp_error_shift + shift);
2039
2040 return offset;
2041}
2042
2043
2044
2045
2046
2047static void timekeeping_advance(enum timekeeping_adv_mode mode)
2048{
2049 struct timekeeper *real_tk = &tk_core.timekeeper;
2050 struct timekeeper *tk = &shadow_timekeeper;
2051 u64 offset;
2052 int shift = 0, maxshift;
2053 unsigned int clock_set = 0;
2054 unsigned long flags;
2055
2056 raw_spin_lock_irqsave(&timekeeper_lock, flags);
2057
2058
2059 if (unlikely(timekeeping_suspended))
2060 goto out;
2061
2062#ifdef CONFIG_ARCH_USES_GETTIMEOFFSET
2063 offset = real_tk->cycle_interval;
2064
2065 if (mode != TK_ADV_TICK)
2066 goto out;
2067#else
2068 offset = clocksource_delta(tk_clock_read(&tk->tkr_mono),
2069 tk->tkr_mono.cycle_last, tk->tkr_mono.mask);
2070
2071
2072 if (offset < real_tk->cycle_interval && mode == TK_ADV_TICK)
2073 goto out;
2074#endif
2075
2076
2077 timekeeping_check_update(tk, offset);
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087 shift = ilog2(offset) - ilog2(tk->cycle_interval);
2088 shift = max(0, shift);
2089
2090 maxshift = (64 - (ilog2(ntp_tick_length())+1)) - 1;
2091 shift = min(shift, maxshift);
2092 while (offset >= tk->cycle_interval) {
2093 offset = logarithmic_accumulation(tk, offset, shift,
2094 &clock_set);
2095 if (offset < tk->cycle_interval<<shift)
2096 shift--;
2097 }
2098
2099
2100 timekeeping_adjust(tk, offset);
2101
2102
2103
2104
2105
2106 clock_set |= accumulate_nsecs_to_secs(tk);
2107
2108 write_seqcount_begin(&tk_core.seq);
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119 timekeeping_update(tk, clock_set);
2120 memcpy(real_tk, tk, sizeof(*tk));
2121
2122 write_seqcount_end(&tk_core.seq);
2123out:
2124 raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
2125 if (clock_set)
2126
2127 clock_was_set_delayed();
2128}
2129
2130
2131
2132
2133
2134void update_wall_time(void)
2135{
2136 timekeeping_advance(TK_ADV_TICK);
2137}
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150void getboottime64(struct timespec64 *ts)
2151{
2152 struct timekeeper *tk = &tk_core.timekeeper;
2153 ktime_t t = ktime_sub(tk->offs_real, tk->offs_boot);
2154
2155 *ts = ktime_to_timespec64(t);
2156}
2157EXPORT_SYMBOL_GPL(getboottime64);
2158
2159void ktime_get_coarse_real_ts64(struct timespec64 *ts)
2160{
2161 struct timekeeper *tk = &tk_core.timekeeper;
2162 unsigned int seq;
2163
2164 do {
2165 seq = read_seqcount_begin(&tk_core.seq);
2166
2167 *ts = tk_xtime(tk);
2168 } while (read_seqcount_retry(&tk_core.seq, seq));
2169}
2170EXPORT_SYMBOL(ktime_get_coarse_real_ts64);
2171
2172void ktime_get_coarse_ts64(struct timespec64 *ts)
2173{
2174 struct timekeeper *tk = &tk_core.timekeeper;
2175 struct timespec64 now, mono;
2176 unsigned int seq;
2177
2178 do {
2179 seq = read_seqcount_begin(&tk_core.seq);
2180
2181 now = tk_xtime(tk);
2182 mono = tk->wall_to_monotonic;
2183 } while (read_seqcount_retry(&tk_core.seq, seq));
2184
2185 set_normalized_timespec64(ts, now.tv_sec + mono.tv_sec,
2186 now.tv_nsec + mono.tv_nsec);
2187}
2188EXPORT_SYMBOL(ktime_get_coarse_ts64);
2189
2190
2191
2192
2193void do_timer(unsigned long ticks)
2194{
2195 jiffies_64 += ticks;
2196 calc_global_load(ticks);
2197}
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212ktime_t ktime_get_update_offsets_now(unsigned int *cwsseq, ktime_t *offs_real,
2213 ktime_t *offs_boot, ktime_t *offs_tai)
2214{
2215 struct timekeeper *tk = &tk_core.timekeeper;
2216 unsigned int seq;
2217 ktime_t base;
2218 u64 nsecs;
2219
2220 do {
2221 seq = read_seqcount_begin(&tk_core.seq);
2222
2223 base = tk->tkr_mono.base;
2224 nsecs = timekeeping_get_ns(&tk->tkr_mono);
2225 base = ktime_add_ns(base, nsecs);
2226
2227 if (*cwsseq != tk->clock_was_set_seq) {
2228 *cwsseq = tk->clock_was_set_seq;
2229 *offs_real = tk->offs_real;
2230 *offs_boot = tk->offs_boot;
2231 *offs_tai = tk->offs_tai;
2232 }
2233
2234
2235 if (unlikely(base >= tk->next_leap_ktime))
2236 *offs_real = ktime_sub(tk->offs_real, ktime_set(1, 0));
2237
2238 } while (read_seqcount_retry(&tk_core.seq, seq));
2239
2240 return base;
2241}
2242
2243
2244
2245
2246static int timekeeping_validate_timex(const struct __kernel_timex *txc)
2247{
2248 if (txc->modes & ADJ_ADJTIME) {
2249
2250 if (!(txc->modes & ADJ_OFFSET_SINGLESHOT))
2251 return -EINVAL;
2252 if (!(txc->modes & ADJ_OFFSET_READONLY) &&
2253 !capable(CAP_SYS_TIME))
2254 return -EPERM;
2255 } else {
2256
2257 if (txc->modes && !capable(CAP_SYS_TIME))
2258 return -EPERM;
2259
2260
2261
2262
2263 if (txc->modes & ADJ_TICK &&
2264 (txc->tick < 900000/USER_HZ ||
2265 txc->tick > 1100000/USER_HZ))
2266 return -EINVAL;
2267 }
2268
2269 if (txc->modes & ADJ_SETOFFSET) {
2270
2271 if (!capable(CAP_SYS_TIME))
2272 return -EPERM;
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282 if (txc->time.tv_usec < 0)
2283 return -EINVAL;
2284
2285 if (txc->modes & ADJ_NANO) {
2286 if (txc->time.tv_usec >= NSEC_PER_SEC)
2287 return -EINVAL;
2288 } else {
2289 if (txc->time.tv_usec >= USEC_PER_SEC)
2290 return -EINVAL;
2291 }
2292 }
2293
2294
2295
2296
2297
2298 if ((txc->modes & ADJ_FREQUENCY) && (BITS_PER_LONG == 64)) {
2299 if (LLONG_MIN / PPM_SCALE > txc->freq)
2300 return -EINVAL;
2301 if (LLONG_MAX / PPM_SCALE < txc->freq)
2302 return -EINVAL;
2303 }
2304
2305 return 0;
2306}
2307
2308
2309
2310
2311
2312int do_adjtimex(struct __kernel_timex *txc)
2313{
2314 struct timekeeper *tk = &tk_core.timekeeper;
2315 struct audit_ntp_data ad;
2316 unsigned long flags;
2317 struct timespec64 ts;
2318 s32 orig_tai, tai;
2319 int ret;
2320
2321
2322 ret = timekeeping_validate_timex(txc);
2323 if (ret)
2324 return ret;
2325
2326 if (txc->modes & ADJ_SETOFFSET) {
2327 struct timespec64 delta;
2328 delta.tv_sec = txc->time.tv_sec;
2329 delta.tv_nsec = txc->time.tv_usec;
2330 if (!(txc->modes & ADJ_NANO))
2331 delta.tv_nsec *= 1000;
2332 ret = timekeeping_inject_offset(&delta);
2333 if (ret)
2334 return ret;
2335
2336 audit_tk_injoffset(delta);
2337 }
2338
2339 audit_ntp_init(&ad);
2340
2341 ktime_get_real_ts64(&ts);
2342
2343 raw_spin_lock_irqsave(&timekeeper_lock, flags);
2344 write_seqcount_begin(&tk_core.seq);
2345
2346 orig_tai = tai = tk->tai_offset;
2347 ret = __do_adjtimex(txc, &ts, &tai, &ad);
2348
2349 if (tai != orig_tai) {
2350 __timekeeping_set_tai_offset(tk, tai);
2351 timekeeping_update(tk, TK_MIRROR | TK_CLOCK_WAS_SET);
2352 }
2353 tk_update_leap_state(tk);
2354
2355 write_seqcount_end(&tk_core.seq);
2356 raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
2357
2358 audit_ntp_log(&ad);
2359
2360
2361 if (txc->modes & (ADJ_FREQUENCY | ADJ_TICK))
2362 timekeeping_advance(TK_ADV_FREQ);
2363
2364 if (tai != orig_tai)
2365 clock_was_set();
2366
2367 ntp_notify_cmos_timer();
2368
2369 return ret;
2370}
2371
2372#ifdef CONFIG_NTP_PPS
2373
2374
2375
2376void hardpps(const struct timespec64 *phase_ts, const struct timespec64 *raw_ts)
2377{
2378 unsigned long flags;
2379
2380 raw_spin_lock_irqsave(&timekeeper_lock, flags);
2381 write_seqcount_begin(&tk_core.seq);
2382
2383 __hardpps(phase_ts, raw_ts);
2384
2385 write_seqcount_end(&tk_core.seq);
2386 raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
2387}
2388EXPORT_SYMBOL(hardpps);
2389#endif
2390
2391
2392
2393
2394
2395
2396
2397void xtime_update(unsigned long ticks)
2398{
2399 raw_spin_lock(&jiffies_lock);
2400 write_seqcount_begin(&jiffies_seq);
2401 do_timer(ticks);
2402 write_seqcount_end(&jiffies_seq);
2403 raw_spin_unlock(&jiffies_lock);
2404 update_wall_time();
2405}
2406