1
2
3
4
5
6
7
8
9
10
11#include <linux/module.h>
12#include <linux/interrupt.h>
13#include <linux/percpu.h>
14#include <linux/init.h>
15#include <linux/mm.h>
16#include <linux/sched.h>
17#include <linux/syscore_ops.h>
18#include <linux/clocksource.h>
19#include <linux/jiffies.h>
20#include <linux/time.h>
21#include <linux/tick.h>
22#include <linux/stop_machine.h>
23
24
25struct timekeeper {
26
27 struct clocksource *clock;
28
29 u32 mult;
30
31 u32 shift;
32
33 cycle_t cycle_interval;
34
35 u64 xtime_interval;
36
37 s64 xtime_remainder;
38
39 u32 raw_interval;
40
41
42 u64 xtime_sec;
43
44 u64 xtime_nsec;
45
46
47
48 s64 ntp_error;
49
50
51 u32 ntp_error_shift;
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67 struct timespec wall_to_monotonic;
68
69 ktime_t offs_real;
70
71 struct timespec total_sleep_time;
72
73 ktime_t offs_boot;
74
75 struct timespec raw_time;
76
77 seqlock_t lock;
78};
79
80static struct timekeeper timekeeper;
81
82
83
84
85
86__cacheline_aligned_in_smp DEFINE_SEQLOCK(xtime_lock);
87
88
89int __read_mostly timekeeping_suspended;
90
91static inline void tk_normalize_xtime(struct timekeeper *tk)
92{
93 while (tk->xtime_nsec >= ((u64)NSEC_PER_SEC << tk->shift)) {
94 tk->xtime_nsec -= (u64)NSEC_PER_SEC << tk->shift;
95 tk->xtime_sec++;
96 }
97}
98
99static struct timespec tk_xtime(struct timekeeper *tk)
100{
101 struct timespec ts;
102
103 ts.tv_sec = tk->xtime_sec;
104 ts.tv_nsec = (long)(tk->xtime_nsec >> tk->shift);
105 return ts;
106}
107
108static void tk_set_xtime(struct timekeeper *tk, const struct timespec *ts)
109{
110 tk->xtime_sec = ts->tv_sec;
111 tk->xtime_nsec = (u64)ts->tv_nsec << tk->shift;
112}
113
114static void tk_xtime_add(struct timekeeper *tk, const struct timespec *ts)
115{
116 tk->xtime_sec += ts->tv_sec;
117 tk->xtime_nsec += (u64)ts->tv_nsec << tk->shift;
118 tk_normalize_xtime(tk);
119}
120
121static void tk_set_wall_to_mono(struct timekeeper *tk, struct timespec wtm)
122{
123 struct timespec tmp;
124
125
126
127
128
129 set_normalized_timespec(&tmp, -tk->wall_to_monotonic.tv_sec,
130 -tk->wall_to_monotonic.tv_nsec);
131 WARN_ON_ONCE(tk->offs_real.tv64 != timespec_to_ktime(tmp).tv64);
132 tk->wall_to_monotonic = wtm;
133 set_normalized_timespec(&tmp, -wtm.tv_sec, -wtm.tv_nsec);
134 tk->offs_real = timespec_to_ktime(tmp);
135}
136
137static void tk_set_sleep_time(struct timekeeper *tk, struct timespec t)
138{
139
140 WARN_ON_ONCE(tk->offs_boot.tv64 != timespec_to_ktime(tk->total_sleep_time).tv64);
141
142 tk->total_sleep_time = t;
143 tk->offs_boot = timespec_to_ktime(t);
144}
145
146
147
148
149
150
151
152
153
154
155
156static void tk_setup_internals(struct timekeeper *tk, struct clocksource *clock)
157{
158 cycle_t interval;
159 u64 tmp, ntpinterval;
160 struct clocksource *old_clock;
161
162 old_clock = tk->clock;
163 tk->clock = clock;
164 clock->cycle_last = clock->read(clock);
165
166
167 tmp = NTP_INTERVAL_LENGTH;
168 tmp <<= clock->shift;
169 ntpinterval = tmp;
170 tmp += clock->mult/2;
171 do_div(tmp, clock->mult);
172 if (tmp == 0)
173 tmp = 1;
174
175 interval = (cycle_t) tmp;
176 tk->cycle_interval = interval;
177
178
179 tk->xtime_interval = (u64) interval * clock->mult;
180 tk->xtime_remainder = ntpinterval - tk->xtime_interval;
181 tk->raw_interval =
182 ((u64) interval * clock->mult) >> clock->shift;
183
184
185 if (old_clock) {
186 int shift_change = clock->shift - old_clock->shift;
187 if (shift_change < 0)
188 tk->xtime_nsec >>= -shift_change;
189 else
190 tk->xtime_nsec <<= shift_change;
191 }
192 tk->shift = clock->shift;
193
194 tk->ntp_error = 0;
195 tk->ntp_error_shift = NTP_SCALE_SHIFT - clock->shift;
196
197
198
199
200
201
202 tk->mult = clock->mult;
203}
204
205
206static inline s64 timekeeping_get_ns(struct timekeeper *tk)
207{
208 cycle_t cycle_now, cycle_delta;
209 struct clocksource *clock;
210 s64 nsec;
211
212
213 clock = tk->clock;
214 cycle_now = clock->read(clock);
215
216
217 cycle_delta = (cycle_now - clock->cycle_last) & clock->mask;
218
219 nsec = cycle_delta * tk->mult + tk->xtime_nsec;
220 nsec >>= tk->shift;
221
222
223 return nsec + arch_gettimeoffset();
224}
225
226static inline s64 timekeeping_get_ns_raw(struct timekeeper *tk)
227{
228 cycle_t cycle_now, cycle_delta;
229 struct clocksource *clock;
230 s64 nsec;
231
232
233 clock = tk->clock;
234 cycle_now = clock->read(clock);
235
236
237 cycle_delta = (cycle_now - clock->cycle_last) & clock->mask;
238
239
240 nsec = clocksource_cyc2ns(cycle_delta, clock->mult, clock->shift);
241
242
243 return nsec + arch_gettimeoffset();
244}
245
246
247static void timekeeping_update(struct timekeeper *tk, bool clearntp)
248{
249 struct timespec xt;
250
251 if (clearntp) {
252 tk->ntp_error = 0;
253 ntp_clear();
254 }
255 xt = tk_xtime(tk);
256 update_vsyscall(&xt, &tk->wall_to_monotonic, tk->clock, tk->mult);
257}
258
259
260
261
262
263
264
265
266static void timekeeping_forward_now(struct timekeeper *tk)
267{
268 cycle_t cycle_now, cycle_delta;
269 struct clocksource *clock;
270 s64 nsec;
271
272 clock = tk->clock;
273 cycle_now = clock->read(clock);
274 cycle_delta = (cycle_now - clock->cycle_last) & clock->mask;
275 clock->cycle_last = cycle_now;
276
277 tk->xtime_nsec += cycle_delta * tk->mult;
278
279
280 tk->xtime_nsec += (u64)arch_gettimeoffset() << tk->shift;
281
282 tk_normalize_xtime(tk);
283
284 nsec = clocksource_cyc2ns(cycle_delta, clock->mult, clock->shift);
285 timespec_add_ns(&tk->raw_time, nsec);
286}
287
288
289
290
291
292
293
294void getnstimeofday(struct timespec *ts)
295{
296 struct timekeeper *tk = &timekeeper;
297 unsigned long seq;
298 s64 nsecs = 0;
299
300 WARN_ON(timekeeping_suspended);
301
302 do {
303 seq = read_seqbegin(&tk->lock);
304
305 ts->tv_sec = tk->xtime_sec;
306 nsecs = timekeeping_get_ns(tk);
307
308 } while (read_seqretry(&tk->lock, seq));
309
310 ts->tv_nsec = 0;
311 timespec_add_ns(ts, nsecs);
312}
313EXPORT_SYMBOL(getnstimeofday);
314
315ktime_t ktime_get(void)
316{
317 struct timekeeper *tk = &timekeeper;
318 unsigned int seq;
319 s64 secs, nsecs;
320
321 WARN_ON(timekeeping_suspended);
322
323 do {
324 seq = read_seqbegin(&tk->lock);
325 secs = tk->xtime_sec + tk->wall_to_monotonic.tv_sec;
326 nsecs = timekeeping_get_ns(tk) + tk->wall_to_monotonic.tv_nsec;
327
328 } while (read_seqretry(&tk->lock, seq));
329
330
331
332
333 return ktime_add_ns(ktime_set(secs, 0), nsecs);
334}
335EXPORT_SYMBOL_GPL(ktime_get);
336
337
338
339
340
341
342
343
344
345void ktime_get_ts(struct timespec *ts)
346{
347 struct timekeeper *tk = &timekeeper;
348 struct timespec tomono;
349 s64 nsec;
350 unsigned int seq;
351
352 WARN_ON(timekeeping_suspended);
353
354 do {
355 seq = read_seqbegin(&tk->lock);
356 ts->tv_sec = tk->xtime_sec;
357 nsec = timekeeping_get_ns(tk);
358 tomono = tk->wall_to_monotonic;
359
360 } while (read_seqretry(&tk->lock, seq));
361
362 ts->tv_sec += tomono.tv_sec;
363 ts->tv_nsec = 0;
364 timespec_add_ns(ts, nsec + tomono.tv_nsec);
365}
366EXPORT_SYMBOL_GPL(ktime_get_ts);
367
368#ifdef CONFIG_NTP_PPS
369
370
371
372
373
374
375
376
377
378
379void getnstime_raw_and_real(struct timespec *ts_raw, struct timespec *ts_real)
380{
381 struct timekeeper *tk = &timekeeper;
382 unsigned long seq;
383 s64 nsecs_raw, nsecs_real;
384
385 WARN_ON_ONCE(timekeeping_suspended);
386
387 do {
388 seq = read_seqbegin(&tk->lock);
389
390 *ts_raw = tk->raw_time;
391 ts_real->tv_sec = tk->xtime_sec;
392 ts_real->tv_nsec = 0;
393
394 nsecs_raw = timekeeping_get_ns_raw(tk);
395 nsecs_real = timekeeping_get_ns(tk);
396
397 } while (read_seqretry(&tk->lock, seq));
398
399 timespec_add_ns(ts_raw, nsecs_raw);
400 timespec_add_ns(ts_real, nsecs_real);
401}
402EXPORT_SYMBOL(getnstime_raw_and_real);
403
404#endif
405
406
407
408
409
410
411
412void do_gettimeofday(struct timeval *tv)
413{
414 struct timespec now;
415
416 getnstimeofday(&now);
417 tv->tv_sec = now.tv_sec;
418 tv->tv_usec = now.tv_nsec/1000;
419}
420EXPORT_SYMBOL(do_gettimeofday);
421
422
423
424
425
426
427
428int do_settimeofday(const struct timespec *tv)
429{
430 struct timekeeper *tk = &timekeeper;
431 struct timespec ts_delta, xt;
432 unsigned long flags;
433
434 if (!timespec_valid_strict(tv))
435 return -EINVAL;
436
437 write_seqlock_irqsave(&tk->lock, flags);
438
439 timekeeping_forward_now(tk);
440
441 xt = tk_xtime(tk);
442 ts_delta.tv_sec = tv->tv_sec - xt.tv_sec;
443 ts_delta.tv_nsec = tv->tv_nsec - xt.tv_nsec;
444
445 tk_set_wall_to_mono(tk, timespec_sub(tk->wall_to_monotonic, ts_delta));
446
447 tk_set_xtime(tk, tv);
448
449 timekeeping_update(tk, true);
450
451 write_sequnlock_irqrestore(&tk->lock, flags);
452
453
454 clock_was_set();
455
456 return 0;
457}
458EXPORT_SYMBOL(do_settimeofday);
459
460
461
462
463
464
465
466int timekeeping_inject_offset(struct timespec *ts)
467{
468 struct timekeeper *tk = &timekeeper;
469 unsigned long flags;
470 struct timespec tmp;
471 int ret = 0;
472
473 if ((unsigned long)ts->tv_nsec >= NSEC_PER_SEC)
474 return -EINVAL;
475
476 write_seqlock_irqsave(&tk->lock, flags);
477
478 timekeeping_forward_now(tk);
479
480
481 tmp = timespec_add(tk_xtime(tk), *ts);
482 if (!timespec_valid_strict(&tmp)) {
483 ret = -EINVAL;
484 goto error;
485 }
486
487 tk_xtime_add(tk, ts);
488 tk_set_wall_to_mono(tk, timespec_sub(tk->wall_to_monotonic, *ts));
489
490error:
491 timekeeping_update(tk, true);
492
493 write_sequnlock_irqrestore(&tk->lock, flags);
494
495
496 clock_was_set();
497
498 return ret;
499}
500EXPORT_SYMBOL(timekeeping_inject_offset);
501
502
503
504
505
506
507static int change_clocksource(void *data)
508{
509 struct timekeeper *tk = &timekeeper;
510 struct clocksource *new, *old;
511 unsigned long flags;
512
513 new = (struct clocksource *) data;
514
515 write_seqlock_irqsave(&tk->lock, flags);
516
517 timekeeping_forward_now(tk);
518 if (!new->enable || new->enable(new) == 0) {
519 old = tk->clock;
520 tk_setup_internals(tk, new);
521 if (old->disable)
522 old->disable(old);
523 }
524 timekeeping_update(tk, true);
525
526 write_sequnlock_irqrestore(&tk->lock, flags);
527
528 return 0;
529}
530
531
532
533
534
535
536
537
538void timekeeping_notify(struct clocksource *clock)
539{
540 struct timekeeper *tk = &timekeeper;
541
542 if (tk->clock == clock)
543 return;
544 stop_machine(change_clocksource, clock, NULL);
545 tick_clock_notify();
546}
547
548
549
550
551
552
553ktime_t ktime_get_real(void)
554{
555 struct timespec now;
556
557 getnstimeofday(&now);
558
559 return timespec_to_ktime(now);
560}
561EXPORT_SYMBOL_GPL(ktime_get_real);
562
563
564
565
566
567
568
569void getrawmonotonic(struct timespec *ts)
570{
571 struct timekeeper *tk = &timekeeper;
572 unsigned long seq;
573 s64 nsecs;
574
575 do {
576 seq = read_seqbegin(&tk->lock);
577 nsecs = timekeeping_get_ns_raw(tk);
578 *ts = tk->raw_time;
579
580 } while (read_seqretry(&tk->lock, seq));
581
582 timespec_add_ns(ts, nsecs);
583}
584EXPORT_SYMBOL(getrawmonotonic);
585
586
587
588
589int timekeeping_valid_for_hres(void)
590{
591 struct timekeeper *tk = &timekeeper;
592 unsigned long seq;
593 int ret;
594
595 do {
596 seq = read_seqbegin(&tk->lock);
597
598 ret = tk->clock->flags & CLOCK_SOURCE_VALID_FOR_HRES;
599
600 } while (read_seqretry(&tk->lock, seq));
601
602 return ret;
603}
604
605
606
607
608u64 timekeeping_max_deferment(void)
609{
610 struct timekeeper *tk = &timekeeper;
611 unsigned long seq;
612 u64 ret;
613
614 do {
615 seq = read_seqbegin(&tk->lock);
616
617 ret = tk->clock->max_idle_ns;
618
619 } while (read_seqretry(&tk->lock, seq));
620
621 return ret;
622}
623
624
625
626
627
628
629
630
631
632
633void __attribute__((weak)) read_persistent_clock(struct timespec *ts)
634{
635 ts->tv_sec = 0;
636 ts->tv_nsec = 0;
637}
638
639
640
641
642
643
644
645
646
647
648void __attribute__((weak)) read_boot_clock(struct timespec *ts)
649{
650 ts->tv_sec = 0;
651 ts->tv_nsec = 0;
652}
653
654
655
656
657void __init timekeeping_init(void)
658{
659 struct timekeeper *tk = &timekeeper;
660 struct clocksource *clock;
661 unsigned long flags;
662 struct timespec now, boot, tmp;
663
664 read_persistent_clock(&now);
665 if (!timespec_valid_strict(&now)) {
666 pr_warn("WARNING: Persistent clock returned invalid value!\n"
667 " Check your CMOS/BIOS settings.\n");
668 now.tv_sec = 0;
669 now.tv_nsec = 0;
670 }
671
672 read_boot_clock(&boot);
673 if (!timespec_valid_strict(&boot)) {
674 pr_warn("WARNING: Boot clock returned invalid value!\n"
675 " Check your CMOS/BIOS settings.\n");
676 boot.tv_sec = 0;
677 boot.tv_nsec = 0;
678 }
679
680 seqlock_init(&tk->lock);
681
682 ntp_init();
683
684 write_seqlock_irqsave(&tk->lock, flags);
685 clock = clocksource_default_clock();
686 if (clock->enable)
687 clock->enable(clock);
688 tk_setup_internals(tk, clock);
689
690 tk_set_xtime(tk, &now);
691 tk->raw_time.tv_sec = 0;
692 tk->raw_time.tv_nsec = 0;
693 if (boot.tv_sec == 0 && boot.tv_nsec == 0)
694 boot = tk_xtime(tk);
695
696 set_normalized_timespec(&tmp, -boot.tv_sec, -boot.tv_nsec);
697 tk_set_wall_to_mono(tk, tmp);
698
699 tmp.tv_sec = 0;
700 tmp.tv_nsec = 0;
701 tk_set_sleep_time(tk, tmp);
702
703 write_sequnlock_irqrestore(&tk->lock, flags);
704}
705
706
707static struct timespec timekeeping_suspend_time;
708
709
710
711
712
713
714
715
716static void __timekeeping_inject_sleeptime(struct timekeeper *tk,
717 struct timespec *delta)
718{
719 if (!timespec_valid_strict(delta)) {
720 printk(KERN_WARNING "__timekeeping_inject_sleeptime: Invalid "
721 "sleep delta value!\n");
722 return;
723 }
724 tk_xtime_add(tk, delta);
725 tk_set_wall_to_mono(tk, timespec_sub(tk->wall_to_monotonic, *delta));
726 tk_set_sleep_time(tk, timespec_add(tk->total_sleep_time, *delta));
727}
728
729
730
731
732
733
734
735
736
737
738
739void timekeeping_inject_sleeptime(struct timespec *delta)
740{
741 struct timekeeper *tk = &timekeeper;
742 unsigned long flags;
743 struct timespec ts;
744
745
746 read_persistent_clock(&ts);
747 if (!(ts.tv_sec == 0 && ts.tv_nsec == 0))
748 return;
749
750 write_seqlock_irqsave(&tk->lock, flags);
751
752 timekeeping_forward_now(tk);
753
754 __timekeeping_inject_sleeptime(tk, delta);
755
756 timekeeping_update(tk, true);
757
758 write_sequnlock_irqrestore(&tk->lock, flags);
759
760
761 clock_was_set();
762}
763
764
765
766
767
768
769
770
771static void timekeeping_resume(void)
772{
773 struct timekeeper *tk = &timekeeper;
774 unsigned long flags;
775 struct timespec ts;
776
777 read_persistent_clock(&ts);
778
779 clocksource_resume();
780
781 write_seqlock_irqsave(&tk->lock, flags);
782
783 if (timespec_compare(&ts, &timekeeping_suspend_time) > 0) {
784 ts = timespec_sub(ts, timekeeping_suspend_time);
785 __timekeeping_inject_sleeptime(tk, &ts);
786 }
787
788 tk->clock->cycle_last = tk->clock->read(tk->clock);
789 tk->ntp_error = 0;
790 timekeeping_suspended = 0;
791 timekeeping_update(tk, false);
792 write_sequnlock_irqrestore(&tk->lock, flags);
793
794 touch_softlockup_watchdog();
795
796 clockevents_notify(CLOCK_EVT_NOTIFY_RESUME, NULL);
797
798
799 hrtimers_resume();
800}
801
802static int timekeeping_suspend(void)
803{
804 struct timekeeper *tk = &timekeeper;
805 unsigned long flags;
806 struct timespec delta, delta_delta;
807 static struct timespec old_delta;
808
809 read_persistent_clock(&timekeeping_suspend_time);
810
811 write_seqlock_irqsave(&tk->lock, flags);
812 timekeeping_forward_now(tk);
813 timekeeping_suspended = 1;
814
815
816
817
818
819
820
821 delta = timespec_sub(tk_xtime(tk), timekeeping_suspend_time);
822 delta_delta = timespec_sub(delta, old_delta);
823 if (abs(delta_delta.tv_sec) >= 2) {
824
825
826
827
828 old_delta = delta;
829 } else {
830
831 timekeeping_suspend_time =
832 timespec_add(timekeeping_suspend_time, delta_delta);
833 }
834 write_sequnlock_irqrestore(&tk->lock, flags);
835
836 clockevents_notify(CLOCK_EVT_NOTIFY_SUSPEND, NULL);
837 clocksource_suspend();
838
839 return 0;
840}
841
842
843static struct syscore_ops timekeeping_syscore_ops = {
844 .resume = timekeeping_resume,
845 .suspend = timekeeping_suspend,
846};
847
848static int __init timekeeping_init_ops(void)
849{
850 register_syscore_ops(&timekeeping_syscore_ops);
851 return 0;
852}
853
854device_initcall(timekeeping_init_ops);
855
856
857
858
859
860static __always_inline int timekeeping_bigadjust(struct timekeeper *tk,
861 s64 error, s64 *interval,
862 s64 *offset)
863{
864 s64 tick_error, i;
865 u32 look_ahead, adj;
866 s32 error2, mult;
867
868
869
870
871
872
873
874
875
876
877 error2 = tk->ntp_error >> (NTP_SCALE_SHIFT + 22 - 2 * SHIFT_HZ);
878 error2 = abs(error2);
879 for (look_ahead = 0; error2 > 0; look_ahead++)
880 error2 >>= 2;
881
882
883
884
885
886 tick_error = ntp_tick_length() >> (tk->ntp_error_shift + 1);
887 tick_error -= tk->xtime_interval >> 1;
888 error = ((error - tick_error) >> look_ahead) + tick_error;
889
890
891 i = *interval;
892 mult = 1;
893 if (error < 0) {
894 error = -error;
895 *interval = -*interval;
896 *offset = -*offset;
897 mult = -1;
898 }
899 for (adj = 0; error > i; adj++)
900 error >>= 1;
901
902 *interval <<= adj;
903 *offset <<= adj;
904 return mult << adj;
905}
906
907
908
909
910
911
912static void timekeeping_adjust(struct timekeeper *tk, s64 offset)
913{
914 s64 error, interval = tk->cycle_interval;
915 int adj;
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930 error = tk->ntp_error >> (tk->ntp_error_shift - 1);
931 if (error > interval) {
932
933
934
935
936
937
938 error >>= 2;
939
940
941
942
943
944
945
946
947
948
949 if (likely(error <= interval))
950 adj = 1;
951 else
952 adj = timekeeping_bigadjust(tk, error, &interval, &offset);
953 } else {
954 if (error < -interval) {
955
956 error >>= 2;
957 if (likely(error >= -interval)) {
958 adj = -1;
959 interval = -interval;
960 offset = -offset;
961 } else {
962 adj = timekeeping_bigadjust(tk, error, &interval, &offset);
963 }
964 } else {
965 goto out_adjust;
966 }
967 }
968
969 if (unlikely(tk->clock->maxadj &&
970 (tk->mult + adj > tk->clock->mult + tk->clock->maxadj))) {
971 printk_once(KERN_WARNING
972 "Adjusting %s more than 11%% (%ld vs %ld)\n",
973 tk->clock->name, (long)tk->mult + adj,
974 (long)tk->clock->mult + tk->clock->maxadj);
975 }
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025 tk->mult += adj;
1026 tk->xtime_interval += interval;
1027 tk->xtime_nsec -= offset;
1028 tk->ntp_error -= (interval - offset) << tk->ntp_error_shift;
1029
1030out_adjust:
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045 if (unlikely((s64)tk->xtime_nsec < 0)) {
1046 s64 neg = -(s64)tk->xtime_nsec;
1047 tk->xtime_nsec = 0;
1048 tk->ntp_error += neg << tk->ntp_error_shift;
1049 }
1050
1051}
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061static inline void accumulate_nsecs_to_secs(struct timekeeper *tk)
1062{
1063 u64 nsecps = (u64)NSEC_PER_SEC << tk->shift;
1064
1065 while (tk->xtime_nsec >= nsecps) {
1066 int leap;
1067
1068 tk->xtime_nsec -= nsecps;
1069 tk->xtime_sec++;
1070
1071
1072 leap = second_overflow(tk->xtime_sec);
1073 if (unlikely(leap)) {
1074 struct timespec ts;
1075
1076 tk->xtime_sec += leap;
1077
1078 ts.tv_sec = leap;
1079 ts.tv_nsec = 0;
1080 tk_set_wall_to_mono(tk,
1081 timespec_sub(tk->wall_to_monotonic, ts));
1082
1083 clock_was_set_delayed();
1084 }
1085 }
1086}
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097static cycle_t logarithmic_accumulation(struct timekeeper *tk, cycle_t offset,
1098 u32 shift)
1099{
1100 u64 raw_nsecs;
1101
1102
1103 if (offset < tk->cycle_interval<<shift)
1104 return offset;
1105
1106
1107 offset -= tk->cycle_interval << shift;
1108 tk->clock->cycle_last += tk->cycle_interval << shift;
1109
1110 tk->xtime_nsec += tk->xtime_interval << shift;
1111 accumulate_nsecs_to_secs(tk);
1112
1113
1114 raw_nsecs = (u64)tk->raw_interval << shift;
1115 raw_nsecs += tk->raw_time.tv_nsec;
1116 if (raw_nsecs >= NSEC_PER_SEC) {
1117 u64 raw_secs = raw_nsecs;
1118 raw_nsecs = do_div(raw_secs, NSEC_PER_SEC);
1119 tk->raw_time.tv_sec += raw_secs;
1120 }
1121 tk->raw_time.tv_nsec = raw_nsecs;
1122
1123
1124 tk->ntp_error += ntp_tick_length() << shift;
1125 tk->ntp_error -= (tk->xtime_interval + tk->xtime_remainder) <<
1126 (tk->ntp_error_shift + shift);
1127
1128 return offset;
1129}
1130
1131
1132
1133
1134
1135static void update_wall_time(void)
1136{
1137 struct clocksource *clock;
1138 struct timekeeper *tk = &timekeeper;
1139 cycle_t offset;
1140 int shift = 0, maxshift;
1141 unsigned long flags;
1142 s64 remainder;
1143
1144 write_seqlock_irqsave(&tk->lock, flags);
1145
1146
1147 if (unlikely(timekeeping_suspended))
1148 goto out;
1149
1150 clock = tk->clock;
1151
1152#ifdef CONFIG_ARCH_USES_GETTIMEOFFSET
1153 offset = tk->cycle_interval;
1154#else
1155 offset = (clock->read(clock) - clock->cycle_last) & clock->mask;
1156#endif
1157
1158
1159 if (offset < tk->cycle_interval)
1160 goto out;
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170 shift = ilog2(offset) - ilog2(tk->cycle_interval);
1171 shift = max(0, shift);
1172
1173 maxshift = (64 - (ilog2(ntp_tick_length())+1)) - 1;
1174 shift = min(shift, maxshift);
1175 while (offset >= tk->cycle_interval) {
1176 offset = logarithmic_accumulation(tk, offset, shift);
1177 if (offset < tk->cycle_interval<<shift)
1178 shift--;
1179 }
1180
1181
1182 timekeeping_adjust(tk, offset);
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194 remainder = tk->xtime_nsec & ((1ULL << tk->shift) - 1);
1195 tk->xtime_nsec -= remainder;
1196 tk->xtime_nsec += 1ULL << tk->shift;
1197 tk->ntp_error += remainder << tk->ntp_error_shift;
1198
1199
1200
1201
1202
1203 accumulate_nsecs_to_secs(tk);
1204
1205 timekeeping_update(tk, false);
1206
1207out:
1208 write_sequnlock_irqrestore(&tk->lock, flags);
1209
1210}
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223void getboottime(struct timespec *ts)
1224{
1225 struct timekeeper *tk = &timekeeper;
1226 struct timespec boottime = {
1227 .tv_sec = tk->wall_to_monotonic.tv_sec +
1228 tk->total_sleep_time.tv_sec,
1229 .tv_nsec = tk->wall_to_monotonic.tv_nsec +
1230 tk->total_sleep_time.tv_nsec
1231 };
1232
1233 set_normalized_timespec(ts, -boottime.tv_sec, -boottime.tv_nsec);
1234}
1235EXPORT_SYMBOL_GPL(getboottime);
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246void get_monotonic_boottime(struct timespec *ts)
1247{
1248 struct timekeeper *tk = &timekeeper;
1249 struct timespec tomono, sleep;
1250 s64 nsec;
1251 unsigned int seq;
1252
1253 WARN_ON(timekeeping_suspended);
1254
1255 do {
1256 seq = read_seqbegin(&tk->lock);
1257 ts->tv_sec = tk->xtime_sec;
1258 nsec = timekeeping_get_ns(tk);
1259 tomono = tk->wall_to_monotonic;
1260 sleep = tk->total_sleep_time;
1261
1262 } while (read_seqretry(&tk->lock, seq));
1263
1264 ts->tv_sec += tomono.tv_sec + sleep.tv_sec;
1265 ts->tv_nsec = 0;
1266 timespec_add_ns(ts, nsec + tomono.tv_nsec + sleep.tv_nsec);
1267}
1268EXPORT_SYMBOL_GPL(get_monotonic_boottime);
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278ktime_t ktime_get_boottime(void)
1279{
1280 struct timespec ts;
1281
1282 get_monotonic_boottime(&ts);
1283 return timespec_to_ktime(ts);
1284}
1285EXPORT_SYMBOL_GPL(ktime_get_boottime);
1286
1287
1288
1289
1290
1291void monotonic_to_bootbased(struct timespec *ts)
1292{
1293 struct timekeeper *tk = &timekeeper;
1294
1295 *ts = timespec_add(*ts, tk->total_sleep_time);
1296}
1297EXPORT_SYMBOL_GPL(monotonic_to_bootbased);
1298
1299unsigned long get_seconds(void)
1300{
1301 struct timekeeper *tk = &timekeeper;
1302
1303 return tk->xtime_sec;
1304}
1305EXPORT_SYMBOL(get_seconds);
1306
1307struct timespec __current_kernel_time(void)
1308{
1309 struct timekeeper *tk = &timekeeper;
1310
1311 return tk_xtime(tk);
1312}
1313
1314struct timespec current_kernel_time(void)
1315{
1316 struct timekeeper *tk = &timekeeper;
1317 struct timespec now;
1318 unsigned long seq;
1319
1320 do {
1321 seq = read_seqbegin(&tk->lock);
1322
1323 now = tk_xtime(tk);
1324 } while (read_seqretry(&tk->lock, seq));
1325
1326 return now;
1327}
1328EXPORT_SYMBOL(current_kernel_time);
1329
1330struct timespec get_monotonic_coarse(void)
1331{
1332 struct timekeeper *tk = &timekeeper;
1333 struct timespec now, mono;
1334 unsigned long seq;
1335
1336 do {
1337 seq = read_seqbegin(&tk->lock);
1338
1339 now = tk_xtime(tk);
1340 mono = tk->wall_to_monotonic;
1341 } while (read_seqretry(&tk->lock, seq));
1342
1343 set_normalized_timespec(&now, now.tv_sec + mono.tv_sec,
1344 now.tv_nsec + mono.tv_nsec);
1345 return now;
1346}
1347
1348
1349
1350
1351
1352
1353void do_timer(unsigned long ticks)
1354{
1355 jiffies_64 += ticks;
1356 update_wall_time();
1357 calc_global_load(ticks);
1358}
1359
1360
1361
1362
1363
1364
1365
1366
1367void get_xtime_and_monotonic_and_sleep_offset(struct timespec *xtim,
1368 struct timespec *wtom, struct timespec *sleep)
1369{
1370 struct timekeeper *tk = &timekeeper;
1371 unsigned long seq;
1372
1373 do {
1374 seq = read_seqbegin(&tk->lock);
1375 *xtim = tk_xtime(tk);
1376 *wtom = tk->wall_to_monotonic;
1377 *sleep = tk->total_sleep_time;
1378 } while (read_seqretry(&tk->lock, seq));
1379}
1380
1381#ifdef CONFIG_HIGH_RES_TIMERS
1382
1383
1384
1385
1386
1387
1388
1389
1390ktime_t ktime_get_update_offsets(ktime_t *offs_real, ktime_t *offs_boot)
1391{
1392 struct timekeeper *tk = &timekeeper;
1393 ktime_t now;
1394 unsigned int seq;
1395 u64 secs, nsecs;
1396
1397 do {
1398 seq = read_seqbegin(&tk->lock);
1399
1400 secs = tk->xtime_sec;
1401 nsecs = timekeeping_get_ns(tk);
1402
1403 *offs_real = tk->offs_real;
1404 *offs_boot = tk->offs_boot;
1405 } while (read_seqretry(&tk->lock, seq));
1406
1407 now = ktime_add_ns(ktime_set(secs, 0), nsecs);
1408 now = ktime_sub(now, *offs_real);
1409 return now;
1410}
1411#endif
1412
1413
1414
1415
1416ktime_t ktime_get_monotonic_offset(void)
1417{
1418 struct timekeeper *tk = &timekeeper;
1419 unsigned long seq;
1420 struct timespec wtom;
1421
1422 do {
1423 seq = read_seqbegin(&tk->lock);
1424 wtom = tk->wall_to_monotonic;
1425 } while (read_seqretry(&tk->lock, seq));
1426
1427 return timespec_to_ktime(wtom);
1428}
1429EXPORT_SYMBOL_GPL(ktime_get_monotonic_offset);
1430
1431
1432
1433
1434
1435
1436
1437void xtime_update(unsigned long ticks)
1438{
1439 write_seqlock(&xtime_lock);
1440 do_timer(ticks);
1441 write_sequnlock(&xtime_lock);
1442}
1443