0001
0002
0003
0004
0005
0006 #include <linux/timekeeper_internal.h>
0007 #include <linux/module.h>
0008 #include <linux/interrupt.h>
0009 #include <linux/percpu.h>
0010 #include <linux/init.h>
0011 #include <linux/mm.h>
0012 #include <linux/nmi.h>
0013 #include <linux/sched.h>
0014 #include <linux/sched/loadavg.h>
0015 #include <linux/sched/clock.h>
0016 #include <linux/syscore_ops.h>
0017 #include <linux/clocksource.h>
0018 #include <linux/jiffies.h>
0019 #include <linux/time.h>
0020 #include <linux/timex.h>
0021 #include <linux/tick.h>
0022 #include <linux/stop_machine.h>
0023 #include <linux/pvclock_gtod.h>
0024 #include <linux/compiler.h>
0025 #include <linux/audit.h>
0026 #include <linux/random.h>
0027
0028 #include "tick-internal.h"
0029 #include "ntp_internal.h"
0030 #include "timekeeping_internal.h"
0031
0032 #define TK_CLEAR_NTP (1 << 0)
0033 #define TK_MIRROR (1 << 1)
0034 #define TK_CLOCK_WAS_SET (1 << 2)
0035
0036 enum timekeeping_adv_mode {
0037
0038 TK_ADV_TICK,
0039
0040
0041 TK_ADV_FREQ
0042 };
0043
0044 DEFINE_RAW_SPINLOCK(timekeeper_lock);
0045
0046
0047
0048
0049
0050 static struct {
0051 seqcount_raw_spinlock_t seq;
0052 struct timekeeper timekeeper;
0053 } tk_core ____cacheline_aligned = {
0054 .seq = SEQCNT_RAW_SPINLOCK_ZERO(tk_core.seq, &timekeeper_lock),
0055 };
0056
0057 static struct timekeeper shadow_timekeeper;
0058
0059
0060 int __read_mostly timekeeping_suspended;
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071 struct tk_fast {
0072 seqcount_latch_t seq;
0073 struct tk_read_base base[2];
0074 };
0075
0076
0077 static u64 cycles_at_suspend;
0078
0079 static u64 dummy_clock_read(struct clocksource *cs)
0080 {
0081 if (timekeeping_suspended)
0082 return cycles_at_suspend;
0083 return local_clock();
0084 }
0085
0086 static struct clocksource dummy_clock = {
0087 .read = dummy_clock_read,
0088 };
0089
0090
0091
0092
0093
0094
0095
0096
0097 #define FAST_TK_INIT \
0098 { \
0099 .clock = &dummy_clock, \
0100 .mask = CLOCKSOURCE_MASK(64), \
0101 .mult = 1, \
0102 .shift = 0, \
0103 }
0104
0105 static struct tk_fast tk_fast_mono ____cacheline_aligned = {
0106 .seq = SEQCNT_LATCH_ZERO(tk_fast_mono.seq),
0107 .base[0] = FAST_TK_INIT,
0108 .base[1] = FAST_TK_INIT,
0109 };
0110
0111 static struct tk_fast tk_fast_raw ____cacheline_aligned = {
0112 .seq = SEQCNT_LATCH_ZERO(tk_fast_raw.seq),
0113 .base[0] = FAST_TK_INIT,
0114 .base[1] = FAST_TK_INIT,
0115 };
0116
0117 static inline void tk_normalize_xtime(struct timekeeper *tk)
0118 {
0119 while (tk->tkr_mono.xtime_nsec >= ((u64)NSEC_PER_SEC << tk->tkr_mono.shift)) {
0120 tk->tkr_mono.xtime_nsec -= (u64)NSEC_PER_SEC << tk->tkr_mono.shift;
0121 tk->xtime_sec++;
0122 }
0123 while (tk->tkr_raw.xtime_nsec >= ((u64)NSEC_PER_SEC << tk->tkr_raw.shift)) {
0124 tk->tkr_raw.xtime_nsec -= (u64)NSEC_PER_SEC << tk->tkr_raw.shift;
0125 tk->raw_sec++;
0126 }
0127 }
0128
0129 static inline struct timespec64 tk_xtime(const struct timekeeper *tk)
0130 {
0131 struct timespec64 ts;
0132
0133 ts.tv_sec = tk->xtime_sec;
0134 ts.tv_nsec = (long)(tk->tkr_mono.xtime_nsec >> tk->tkr_mono.shift);
0135 return ts;
0136 }
0137
0138 static void tk_set_xtime(struct timekeeper *tk, const struct timespec64 *ts)
0139 {
0140 tk->xtime_sec = ts->tv_sec;
0141 tk->tkr_mono.xtime_nsec = (u64)ts->tv_nsec << tk->tkr_mono.shift;
0142 }
0143
0144 static void tk_xtime_add(struct timekeeper *tk, const struct timespec64 *ts)
0145 {
0146 tk->xtime_sec += ts->tv_sec;
0147 tk->tkr_mono.xtime_nsec += (u64)ts->tv_nsec << tk->tkr_mono.shift;
0148 tk_normalize_xtime(tk);
0149 }
0150
0151 static void tk_set_wall_to_mono(struct timekeeper *tk, struct timespec64 wtm)
0152 {
0153 struct timespec64 tmp;
0154
0155
0156
0157
0158
0159 set_normalized_timespec64(&tmp, -tk->wall_to_monotonic.tv_sec,
0160 -tk->wall_to_monotonic.tv_nsec);
0161 WARN_ON_ONCE(tk->offs_real != timespec64_to_ktime(tmp));
0162 tk->wall_to_monotonic = wtm;
0163 set_normalized_timespec64(&tmp, -wtm.tv_sec, -wtm.tv_nsec);
0164 tk->offs_real = timespec64_to_ktime(tmp);
0165 tk->offs_tai = ktime_add(tk->offs_real, ktime_set(tk->tai_offset, 0));
0166 }
0167
0168 static inline void tk_update_sleep_time(struct timekeeper *tk, ktime_t delta)
0169 {
0170 tk->offs_boot = ktime_add(tk->offs_boot, delta);
0171
0172
0173
0174
0175 tk->monotonic_to_boot = ktime_to_timespec64(tk->offs_boot);
0176 }
0177
0178
0179
0180
0181
0182
0183
0184
0185
0186
0187
0188
0189
0190
0191 static inline u64 tk_clock_read(const struct tk_read_base *tkr)
0192 {
0193 struct clocksource *clock = READ_ONCE(tkr->clock);
0194
0195 return clock->read(clock);
0196 }
0197
0198 #ifdef CONFIG_DEBUG_TIMEKEEPING
0199 #define WARNING_FREQ (HZ*300)
0200
0201 static void timekeeping_check_update(struct timekeeper *tk, u64 offset)
0202 {
0203
0204 u64 max_cycles = tk->tkr_mono.clock->max_cycles;
0205 const char *name = tk->tkr_mono.clock->name;
0206
0207 if (offset > max_cycles) {
0208 printk_deferred("WARNING: timekeeping: Cycle offset (%lld) is larger than allowed by the '%s' clock's max_cycles value (%lld): time overflow danger\n",
0209 offset, name, max_cycles);
0210 printk_deferred(" timekeeping: Your kernel is sick, but tries to cope by capping time updates\n");
0211 } else {
0212 if (offset > (max_cycles >> 1)) {
0213 printk_deferred("INFO: timekeeping: Cycle offset (%lld) is larger than the '%s' clock's 50%% safety margin (%lld)\n",
0214 offset, name, max_cycles >> 1);
0215 printk_deferred(" timekeeping: Your kernel is still fine, but is feeling a bit nervous\n");
0216 }
0217 }
0218
0219 if (tk->underflow_seen) {
0220 if (jiffies - tk->last_warning > WARNING_FREQ) {
0221 printk_deferred("WARNING: Underflow in clocksource '%s' observed, time update ignored.\n", name);
0222 printk_deferred(" Please report this, consider using a different clocksource, if possible.\n");
0223 printk_deferred(" Your kernel is probably still fine.\n");
0224 tk->last_warning = jiffies;
0225 }
0226 tk->underflow_seen = 0;
0227 }
0228
0229 if (tk->overflow_seen) {
0230 if (jiffies - tk->last_warning > WARNING_FREQ) {
0231 printk_deferred("WARNING: Overflow in clocksource '%s' observed, time update capped.\n", name);
0232 printk_deferred(" Please report this, consider using a different clocksource, if possible.\n");
0233 printk_deferred(" Your kernel is probably still fine.\n");
0234 tk->last_warning = jiffies;
0235 }
0236 tk->overflow_seen = 0;
0237 }
0238 }
0239
0240 static inline u64 timekeeping_get_delta(const struct tk_read_base *tkr)
0241 {
0242 struct timekeeper *tk = &tk_core.timekeeper;
0243 u64 now, last, mask, max, delta;
0244 unsigned int seq;
0245
0246
0247
0248
0249
0250
0251
0252
0253 do {
0254 seq = read_seqcount_begin(&tk_core.seq);
0255 now = tk_clock_read(tkr);
0256 last = tkr->cycle_last;
0257 mask = tkr->mask;
0258 max = tkr->clock->max_cycles;
0259 } while (read_seqcount_retry(&tk_core.seq, seq));
0260
0261 delta = clocksource_delta(now, last, mask);
0262
0263
0264
0265
0266
0267 if (unlikely((~delta & mask) < (mask >> 3))) {
0268 tk->underflow_seen = 1;
0269 delta = 0;
0270 }
0271
0272
0273 if (unlikely(delta > max)) {
0274 tk->overflow_seen = 1;
0275 delta = tkr->clock->max_cycles;
0276 }
0277
0278 return delta;
0279 }
0280 #else
0281 static inline void timekeeping_check_update(struct timekeeper *tk, u64 offset)
0282 {
0283 }
0284 static inline u64 timekeeping_get_delta(const struct tk_read_base *tkr)
0285 {
0286 u64 cycle_now, delta;
0287
0288
0289 cycle_now = tk_clock_read(tkr);
0290
0291
0292 delta = clocksource_delta(cycle_now, tkr->cycle_last, tkr->mask);
0293
0294 return delta;
0295 }
0296 #endif
0297
0298
0299
0300
0301
0302
0303
0304
0305
0306
0307
0308
0309 static void tk_setup_internals(struct timekeeper *tk, struct clocksource *clock)
0310 {
0311 u64 interval;
0312 u64 tmp, ntpinterval;
0313 struct clocksource *old_clock;
0314
0315 ++tk->cs_was_changed_seq;
0316 old_clock = tk->tkr_mono.clock;
0317 tk->tkr_mono.clock = clock;
0318 tk->tkr_mono.mask = clock->mask;
0319 tk->tkr_mono.cycle_last = tk_clock_read(&tk->tkr_mono);
0320
0321 tk->tkr_raw.clock = clock;
0322 tk->tkr_raw.mask = clock->mask;
0323 tk->tkr_raw.cycle_last = tk->tkr_mono.cycle_last;
0324
0325
0326 tmp = NTP_INTERVAL_LENGTH;
0327 tmp <<= clock->shift;
0328 ntpinterval = tmp;
0329 tmp += clock->mult/2;
0330 do_div(tmp, clock->mult);
0331 if (tmp == 0)
0332 tmp = 1;
0333
0334 interval = (u64) tmp;
0335 tk->cycle_interval = interval;
0336
0337
0338 tk->xtime_interval = interval * clock->mult;
0339 tk->xtime_remainder = ntpinterval - tk->xtime_interval;
0340 tk->raw_interval = interval * clock->mult;
0341
0342
0343 if (old_clock) {
0344 int shift_change = clock->shift - old_clock->shift;
0345 if (shift_change < 0) {
0346 tk->tkr_mono.xtime_nsec >>= -shift_change;
0347 tk->tkr_raw.xtime_nsec >>= -shift_change;
0348 } else {
0349 tk->tkr_mono.xtime_nsec <<= shift_change;
0350 tk->tkr_raw.xtime_nsec <<= shift_change;
0351 }
0352 }
0353
0354 tk->tkr_mono.shift = clock->shift;
0355 tk->tkr_raw.shift = clock->shift;
0356
0357 tk->ntp_error = 0;
0358 tk->ntp_error_shift = NTP_SCALE_SHIFT - clock->shift;
0359 tk->ntp_tick = ntpinterval << tk->ntp_error_shift;
0360
0361
0362
0363
0364
0365
0366 tk->tkr_mono.mult = clock->mult;
0367 tk->tkr_raw.mult = clock->mult;
0368 tk->ntp_err_mult = 0;
0369 tk->skip_second_overflow = 0;
0370 }
0371
0372
0373
0374 static inline u64 timekeeping_delta_to_ns(const struct tk_read_base *tkr, u64 delta)
0375 {
0376 u64 nsec;
0377
0378 nsec = delta * tkr->mult + tkr->xtime_nsec;
0379 nsec >>= tkr->shift;
0380
0381 return nsec;
0382 }
0383
0384 static inline u64 timekeeping_get_ns(const struct tk_read_base *tkr)
0385 {
0386 u64 delta;
0387
0388 delta = timekeeping_get_delta(tkr);
0389 return timekeeping_delta_to_ns(tkr, delta);
0390 }
0391
0392 static inline u64 timekeeping_cycles_to_ns(const struct tk_read_base *tkr, u64 cycles)
0393 {
0394 u64 delta;
0395
0396
0397 delta = clocksource_delta(cycles, tkr->cycle_last, tkr->mask);
0398 return timekeeping_delta_to_ns(tkr, delta);
0399 }
0400
0401
0402
0403
0404
0405
0406
0407
0408
0409
0410
0411
0412
0413
0414
0415
0416 static void update_fast_timekeeper(const struct tk_read_base *tkr,
0417 struct tk_fast *tkf)
0418 {
0419 struct tk_read_base *base = tkf->base;
0420
0421
0422 raw_write_seqcount_latch(&tkf->seq);
0423
0424
0425 memcpy(base, tkr, sizeof(*base));
0426
0427
0428 raw_write_seqcount_latch(&tkf->seq);
0429
0430
0431 memcpy(base + 1, base, sizeof(*base));
0432 }
0433
0434 static __always_inline u64 fast_tk_get_delta_ns(struct tk_read_base *tkr)
0435 {
0436 u64 delta, cycles = tk_clock_read(tkr);
0437
0438 delta = clocksource_delta(cycles, tkr->cycle_last, tkr->mask);
0439 return timekeeping_delta_to_ns(tkr, delta);
0440 }
0441
0442 static __always_inline u64 __ktime_get_fast_ns(struct tk_fast *tkf)
0443 {
0444 struct tk_read_base *tkr;
0445 unsigned int seq;
0446 u64 now;
0447
0448 do {
0449 seq = raw_read_seqcount_latch(&tkf->seq);
0450 tkr = tkf->base + (seq & 0x01);
0451 now = ktime_to_ns(tkr->base);
0452 now += fast_tk_get_delta_ns(tkr);
0453 } while (read_seqcount_latch_retry(&tkf->seq, seq));
0454
0455 return now;
0456 }
0457
0458
0459
0460
0461
0462
0463
0464
0465
0466
0467
0468
0469
0470
0471
0472
0473
0474
0475
0476
0477
0478
0479
0480
0481
0482
0483
0484
0485
0486
0487
0488
0489
0490 u64 notrace ktime_get_mono_fast_ns(void)
0491 {
0492 return __ktime_get_fast_ns(&tk_fast_mono);
0493 }
0494 EXPORT_SYMBOL_GPL(ktime_get_mono_fast_ns);
0495
0496
0497
0498
0499
0500
0501
0502 u64 notrace ktime_get_raw_fast_ns(void)
0503 {
0504 return __ktime_get_fast_ns(&tk_fast_raw);
0505 }
0506 EXPORT_SYMBOL_GPL(ktime_get_raw_fast_ns);
0507
0508
0509
0510
0511
0512
0513
0514
0515
0516
0517
0518
0519
0520
0521
0522
0523
0524
0525
0526
0527
0528
0529
0530
0531
0532 u64 notrace ktime_get_boot_fast_ns(void)
0533 {
0534 struct timekeeper *tk = &tk_core.timekeeper;
0535
0536 return (ktime_get_mono_fast_ns() + ktime_to_ns(data_race(tk->offs_boot)));
0537 }
0538 EXPORT_SYMBOL_GPL(ktime_get_boot_fast_ns);
0539
0540
0541
0542
0543
0544
0545
0546
0547
0548
0549 u64 notrace ktime_get_tai_fast_ns(void)
0550 {
0551 struct timekeeper *tk = &tk_core.timekeeper;
0552
0553 return (ktime_get_mono_fast_ns() + ktime_to_ns(data_race(tk->offs_tai)));
0554 }
0555 EXPORT_SYMBOL_GPL(ktime_get_tai_fast_ns);
0556
0557 static __always_inline u64 __ktime_get_real_fast(struct tk_fast *tkf, u64 *mono)
0558 {
0559 struct tk_read_base *tkr;
0560 u64 basem, baser, delta;
0561 unsigned int seq;
0562
0563 do {
0564 seq = raw_read_seqcount_latch(&tkf->seq);
0565 tkr = tkf->base + (seq & 0x01);
0566 basem = ktime_to_ns(tkr->base);
0567 baser = ktime_to_ns(tkr->base_real);
0568 delta = fast_tk_get_delta_ns(tkr);
0569 } while (read_seqcount_latch_retry(&tkf->seq, seq));
0570
0571 if (mono)
0572 *mono = basem + delta;
0573 return baser + delta;
0574 }
0575
0576
0577
0578
0579
0580
0581 u64 ktime_get_real_fast_ns(void)
0582 {
0583 return __ktime_get_real_fast(&tk_fast_mono, NULL);
0584 }
0585 EXPORT_SYMBOL_GPL(ktime_get_real_fast_ns);
0586
0587
0588
0589
0590
0591
0592
0593
0594
0595
0596
0597
0598
0599
0600
0601
0602
0603
0604
0605
0606
0607
0608
0609
0610
0611
0612
0613
0614
0615
0616
0617
0618
0619
0620
0621
0622
0623
0624
0625
0626
0627
0628
0629
0630
0631
0632
0633 void ktime_get_fast_timestamps(struct ktime_timestamps *snapshot)
0634 {
0635 struct timekeeper *tk = &tk_core.timekeeper;
0636
0637 snapshot->real = __ktime_get_real_fast(&tk_fast_mono, &snapshot->mono);
0638 snapshot->boot = snapshot->mono + ktime_to_ns(data_race(tk->offs_boot));
0639 }
0640
0641
0642
0643
0644
0645
0646
0647
0648
0649
0650
0651 static void halt_fast_timekeeper(const struct timekeeper *tk)
0652 {
0653 static struct tk_read_base tkr_dummy;
0654 const struct tk_read_base *tkr = &tk->tkr_mono;
0655
0656 memcpy(&tkr_dummy, tkr, sizeof(tkr_dummy));
0657 cycles_at_suspend = tk_clock_read(tkr);
0658 tkr_dummy.clock = &dummy_clock;
0659 tkr_dummy.base_real = tkr->base + tk->offs_real;
0660 update_fast_timekeeper(&tkr_dummy, &tk_fast_mono);
0661
0662 tkr = &tk->tkr_raw;
0663 memcpy(&tkr_dummy, tkr, sizeof(tkr_dummy));
0664 tkr_dummy.clock = &dummy_clock;
0665 update_fast_timekeeper(&tkr_dummy, &tk_fast_raw);
0666 }
0667
0668 static RAW_NOTIFIER_HEAD(pvclock_gtod_chain);
0669
0670 static void update_pvclock_gtod(struct timekeeper *tk, bool was_set)
0671 {
0672 raw_notifier_call_chain(&pvclock_gtod_chain, was_set, tk);
0673 }
0674
0675
0676
0677
0678
0679 int pvclock_gtod_register_notifier(struct notifier_block *nb)
0680 {
0681 struct timekeeper *tk = &tk_core.timekeeper;
0682 unsigned long flags;
0683 int ret;
0684
0685 raw_spin_lock_irqsave(&timekeeper_lock, flags);
0686 ret = raw_notifier_chain_register(&pvclock_gtod_chain, nb);
0687 update_pvclock_gtod(tk, true);
0688 raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
0689
0690 return ret;
0691 }
0692 EXPORT_SYMBOL_GPL(pvclock_gtod_register_notifier);
0693
0694
0695
0696
0697
0698
0699 int pvclock_gtod_unregister_notifier(struct notifier_block *nb)
0700 {
0701 unsigned long flags;
0702 int ret;
0703
0704 raw_spin_lock_irqsave(&timekeeper_lock, flags);
0705 ret = raw_notifier_chain_unregister(&pvclock_gtod_chain, nb);
0706 raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
0707
0708 return ret;
0709 }
0710 EXPORT_SYMBOL_GPL(pvclock_gtod_unregister_notifier);
0711
0712
0713
0714
0715 static inline void tk_update_leap_state(struct timekeeper *tk)
0716 {
0717 tk->next_leap_ktime = ntp_get_next_leap();
0718 if (tk->next_leap_ktime != KTIME_MAX)
0719
0720 tk->next_leap_ktime = ktime_sub(tk->next_leap_ktime, tk->offs_real);
0721 }
0722
0723
0724
0725
0726 static inline void tk_update_ktime_data(struct timekeeper *tk)
0727 {
0728 u64 seconds;
0729 u32 nsec;
0730
0731
0732
0733
0734
0735
0736
0737
0738 seconds = (u64)(tk->xtime_sec + tk->wall_to_monotonic.tv_sec);
0739 nsec = (u32) tk->wall_to_monotonic.tv_nsec;
0740 tk->tkr_mono.base = ns_to_ktime(seconds * NSEC_PER_SEC + nsec);
0741
0742
0743
0744
0745
0746
0747 nsec += (u32)(tk->tkr_mono.xtime_nsec >> tk->tkr_mono.shift);
0748 if (nsec >= NSEC_PER_SEC)
0749 seconds++;
0750 tk->ktime_sec = seconds;
0751
0752
0753 tk->tkr_raw.base = ns_to_ktime(tk->raw_sec * NSEC_PER_SEC);
0754 }
0755
0756
0757 static void timekeeping_update(struct timekeeper *tk, unsigned int action)
0758 {
0759 if (action & TK_CLEAR_NTP) {
0760 tk->ntp_error = 0;
0761 ntp_clear();
0762 }
0763
0764 tk_update_leap_state(tk);
0765 tk_update_ktime_data(tk);
0766
0767 update_vsyscall(tk);
0768 update_pvclock_gtod(tk, action & TK_CLOCK_WAS_SET);
0769
0770 tk->tkr_mono.base_real = tk->tkr_mono.base + tk->offs_real;
0771 update_fast_timekeeper(&tk->tkr_mono, &tk_fast_mono);
0772 update_fast_timekeeper(&tk->tkr_raw, &tk_fast_raw);
0773
0774 if (action & TK_CLOCK_WAS_SET)
0775 tk->clock_was_set_seq++;
0776
0777
0778
0779
0780
0781 if (action & TK_MIRROR)
0782 memcpy(&shadow_timekeeper, &tk_core.timekeeper,
0783 sizeof(tk_core.timekeeper));
0784 }
0785
0786
0787
0788
0789
0790
0791
0792
0793
0794 static void timekeeping_forward_now(struct timekeeper *tk)
0795 {
0796 u64 cycle_now, delta;
0797
0798 cycle_now = tk_clock_read(&tk->tkr_mono);
0799 delta = clocksource_delta(cycle_now, tk->tkr_mono.cycle_last, tk->tkr_mono.mask);
0800 tk->tkr_mono.cycle_last = cycle_now;
0801 tk->tkr_raw.cycle_last = cycle_now;
0802
0803 tk->tkr_mono.xtime_nsec += delta * tk->tkr_mono.mult;
0804 tk->tkr_raw.xtime_nsec += delta * tk->tkr_raw.mult;
0805
0806 tk_normalize_xtime(tk);
0807 }
0808
0809
0810
0811
0812
0813
0814
0815 void ktime_get_real_ts64(struct timespec64 *ts)
0816 {
0817 struct timekeeper *tk = &tk_core.timekeeper;
0818 unsigned int seq;
0819 u64 nsecs;
0820
0821 WARN_ON(timekeeping_suspended);
0822
0823 do {
0824 seq = read_seqcount_begin(&tk_core.seq);
0825
0826 ts->tv_sec = tk->xtime_sec;
0827 nsecs = timekeeping_get_ns(&tk->tkr_mono);
0828
0829 } while (read_seqcount_retry(&tk_core.seq, seq));
0830
0831 ts->tv_nsec = 0;
0832 timespec64_add_ns(ts, nsecs);
0833 }
0834 EXPORT_SYMBOL(ktime_get_real_ts64);
0835
0836 ktime_t ktime_get(void)
0837 {
0838 struct timekeeper *tk = &tk_core.timekeeper;
0839 unsigned int seq;
0840 ktime_t base;
0841 u64 nsecs;
0842
0843 WARN_ON(timekeeping_suspended);
0844
0845 do {
0846 seq = read_seqcount_begin(&tk_core.seq);
0847 base = tk->tkr_mono.base;
0848 nsecs = timekeeping_get_ns(&tk->tkr_mono);
0849
0850 } while (read_seqcount_retry(&tk_core.seq, seq));
0851
0852 return ktime_add_ns(base, nsecs);
0853 }
0854 EXPORT_SYMBOL_GPL(ktime_get);
0855
0856 u32 ktime_get_resolution_ns(void)
0857 {
0858 struct timekeeper *tk = &tk_core.timekeeper;
0859 unsigned int seq;
0860 u32 nsecs;
0861
0862 WARN_ON(timekeeping_suspended);
0863
0864 do {
0865 seq = read_seqcount_begin(&tk_core.seq);
0866 nsecs = tk->tkr_mono.mult >> tk->tkr_mono.shift;
0867 } while (read_seqcount_retry(&tk_core.seq, seq));
0868
0869 return nsecs;
0870 }
0871 EXPORT_SYMBOL_GPL(ktime_get_resolution_ns);
0872
0873 static ktime_t *offsets[TK_OFFS_MAX] = {
0874 [TK_OFFS_REAL] = &tk_core.timekeeper.offs_real,
0875 [TK_OFFS_BOOT] = &tk_core.timekeeper.offs_boot,
0876 [TK_OFFS_TAI] = &tk_core.timekeeper.offs_tai,
0877 };
0878
0879 ktime_t ktime_get_with_offset(enum tk_offsets offs)
0880 {
0881 struct timekeeper *tk = &tk_core.timekeeper;
0882 unsigned int seq;
0883 ktime_t base, *offset = offsets[offs];
0884 u64 nsecs;
0885
0886 WARN_ON(timekeeping_suspended);
0887
0888 do {
0889 seq = read_seqcount_begin(&tk_core.seq);
0890 base = ktime_add(tk->tkr_mono.base, *offset);
0891 nsecs = timekeeping_get_ns(&tk->tkr_mono);
0892
0893 } while (read_seqcount_retry(&tk_core.seq, seq));
0894
0895 return ktime_add_ns(base, nsecs);
0896
0897 }
0898 EXPORT_SYMBOL_GPL(ktime_get_with_offset);
0899
0900 ktime_t ktime_get_coarse_with_offset(enum tk_offsets offs)
0901 {
0902 struct timekeeper *tk = &tk_core.timekeeper;
0903 unsigned int seq;
0904 ktime_t base, *offset = offsets[offs];
0905 u64 nsecs;
0906
0907 WARN_ON(timekeeping_suspended);
0908
0909 do {
0910 seq = read_seqcount_begin(&tk_core.seq);
0911 base = ktime_add(tk->tkr_mono.base, *offset);
0912 nsecs = tk->tkr_mono.xtime_nsec >> tk->tkr_mono.shift;
0913
0914 } while (read_seqcount_retry(&tk_core.seq, seq));
0915
0916 return ktime_add_ns(base, nsecs);
0917 }
0918 EXPORT_SYMBOL_GPL(ktime_get_coarse_with_offset);
0919
0920
0921
0922
0923
0924
0925 ktime_t ktime_mono_to_any(ktime_t tmono, enum tk_offsets offs)
0926 {
0927 ktime_t *offset = offsets[offs];
0928 unsigned int seq;
0929 ktime_t tconv;
0930
0931 do {
0932 seq = read_seqcount_begin(&tk_core.seq);
0933 tconv = ktime_add(tmono, *offset);
0934 } while (read_seqcount_retry(&tk_core.seq, seq));
0935
0936 return tconv;
0937 }
0938 EXPORT_SYMBOL_GPL(ktime_mono_to_any);
0939
0940
0941
0942
0943 ktime_t ktime_get_raw(void)
0944 {
0945 struct timekeeper *tk = &tk_core.timekeeper;
0946 unsigned int seq;
0947 ktime_t base;
0948 u64 nsecs;
0949
0950 do {
0951 seq = read_seqcount_begin(&tk_core.seq);
0952 base = tk->tkr_raw.base;
0953 nsecs = timekeeping_get_ns(&tk->tkr_raw);
0954
0955 } while (read_seqcount_retry(&tk_core.seq, seq));
0956
0957 return ktime_add_ns(base, nsecs);
0958 }
0959 EXPORT_SYMBOL_GPL(ktime_get_raw);
0960
0961
0962
0963
0964
0965
0966
0967
0968
0969 void ktime_get_ts64(struct timespec64 *ts)
0970 {
0971 struct timekeeper *tk = &tk_core.timekeeper;
0972 struct timespec64 tomono;
0973 unsigned int seq;
0974 u64 nsec;
0975
0976 WARN_ON(timekeeping_suspended);
0977
0978 do {
0979 seq = read_seqcount_begin(&tk_core.seq);
0980 ts->tv_sec = tk->xtime_sec;
0981 nsec = timekeeping_get_ns(&tk->tkr_mono);
0982 tomono = tk->wall_to_monotonic;
0983
0984 } while (read_seqcount_retry(&tk_core.seq, seq));
0985
0986 ts->tv_sec += tomono.tv_sec;
0987 ts->tv_nsec = 0;
0988 timespec64_add_ns(ts, nsec + tomono.tv_nsec);
0989 }
0990 EXPORT_SYMBOL_GPL(ktime_get_ts64);
0991
0992
0993
0994
0995
0996
0997
0998
0999
1000
1001 time64_t ktime_get_seconds(void)
1002 {
1003 struct timekeeper *tk = &tk_core.timekeeper;
1004
1005 WARN_ON(timekeeping_suspended);
1006 return tk->ktime_sec;
1007 }
1008 EXPORT_SYMBOL_GPL(ktime_get_seconds);
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020 time64_t ktime_get_real_seconds(void)
1021 {
1022 struct timekeeper *tk = &tk_core.timekeeper;
1023 time64_t seconds;
1024 unsigned int seq;
1025
1026 if (IS_ENABLED(CONFIG_64BIT))
1027 return tk->xtime_sec;
1028
1029 do {
1030 seq = read_seqcount_begin(&tk_core.seq);
1031 seconds = tk->xtime_sec;
1032
1033 } while (read_seqcount_retry(&tk_core.seq, seq));
1034
1035 return seconds;
1036 }
1037 EXPORT_SYMBOL_GPL(ktime_get_real_seconds);
1038
1039
1040
1041
1042
1043
1044 noinstr time64_t __ktime_get_real_seconds(void)
1045 {
1046 struct timekeeper *tk = &tk_core.timekeeper;
1047
1048 return tk->xtime_sec;
1049 }
1050
1051
1052
1053
1054
1055 void ktime_get_snapshot(struct system_time_snapshot *systime_snapshot)
1056 {
1057 struct timekeeper *tk = &tk_core.timekeeper;
1058 unsigned int seq;
1059 ktime_t base_raw;
1060 ktime_t base_real;
1061 u64 nsec_raw;
1062 u64 nsec_real;
1063 u64 now;
1064
1065 WARN_ON_ONCE(timekeeping_suspended);
1066
1067 do {
1068 seq = read_seqcount_begin(&tk_core.seq);
1069 now = tk_clock_read(&tk->tkr_mono);
1070 systime_snapshot->cs_id = tk->tkr_mono.clock->id;
1071 systime_snapshot->cs_was_changed_seq = tk->cs_was_changed_seq;
1072 systime_snapshot->clock_was_set_seq = tk->clock_was_set_seq;
1073 base_real = ktime_add(tk->tkr_mono.base,
1074 tk_core.timekeeper.offs_real);
1075 base_raw = tk->tkr_raw.base;
1076 nsec_real = timekeeping_cycles_to_ns(&tk->tkr_mono, now);
1077 nsec_raw = timekeeping_cycles_to_ns(&tk->tkr_raw, now);
1078 } while (read_seqcount_retry(&tk_core.seq, seq));
1079
1080 systime_snapshot->cycles = now;
1081 systime_snapshot->real = ktime_add_ns(base_real, nsec_real);
1082 systime_snapshot->raw = ktime_add_ns(base_raw, nsec_raw);
1083 }
1084 EXPORT_SYMBOL_GPL(ktime_get_snapshot);
1085
1086
1087 static int scale64_check_overflow(u64 mult, u64 div, u64 *base)
1088 {
1089 u64 tmp, rem;
1090
1091 tmp = div64_u64_rem(*base, div, &rem);
1092
1093 if (((int)sizeof(u64)*8 - fls64(mult) < fls64(tmp)) ||
1094 ((int)sizeof(u64)*8 - fls64(mult) < fls64(rem)))
1095 return -EOVERFLOW;
1096 tmp *= mult;
1097
1098 rem = div64_u64(rem * mult, div);
1099 *base = tmp + rem;
1100 return 0;
1101 }
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120 static int adjust_historical_crosststamp(struct system_time_snapshot *history,
1121 u64 partial_history_cycles,
1122 u64 total_history_cycles,
1123 bool discontinuity,
1124 struct system_device_crosststamp *ts)
1125 {
1126 struct timekeeper *tk = &tk_core.timekeeper;
1127 u64 corr_raw, corr_real;
1128 bool interp_forward;
1129 int ret;
1130
1131 if (total_history_cycles == 0 || partial_history_cycles == 0)
1132 return 0;
1133
1134
1135 interp_forward = partial_history_cycles > total_history_cycles / 2;
1136 partial_history_cycles = interp_forward ?
1137 total_history_cycles - partial_history_cycles :
1138 partial_history_cycles;
1139
1140
1141
1142
1143
1144 corr_raw = (u64)ktime_to_ns(
1145 ktime_sub(ts->sys_monoraw, history->raw));
1146 ret = scale64_check_overflow(partial_history_cycles,
1147 total_history_cycles, &corr_raw);
1148 if (ret)
1149 return ret;
1150
1151
1152
1153
1154
1155
1156
1157
1158 if (discontinuity) {
1159 corr_real = mul_u64_u32_div
1160 (corr_raw, tk->tkr_mono.mult, tk->tkr_raw.mult);
1161 } else {
1162 corr_real = (u64)ktime_to_ns(
1163 ktime_sub(ts->sys_realtime, history->real));
1164 ret = scale64_check_overflow(partial_history_cycles,
1165 total_history_cycles, &corr_real);
1166 if (ret)
1167 return ret;
1168 }
1169
1170
1171 if (interp_forward) {
1172 ts->sys_monoraw = ktime_add_ns(history->raw, corr_raw);
1173 ts->sys_realtime = ktime_add_ns(history->real, corr_real);
1174 } else {
1175 ts->sys_monoraw = ktime_sub_ns(ts->sys_monoraw, corr_raw);
1176 ts->sys_realtime = ktime_sub_ns(ts->sys_realtime, corr_real);
1177 }
1178
1179 return 0;
1180 }
1181
1182
1183
1184
1185 static bool cycle_between(u64 before, u64 test, u64 after)
1186 {
1187 if (test > before && test < after)
1188 return true;
1189 if (test < before && before > after)
1190 return true;
1191 return false;
1192 }
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205 int get_device_system_crosststamp(int (*get_time_fn)
1206 (ktime_t *device_time,
1207 struct system_counterval_t *sys_counterval,
1208 void *ctx),
1209 void *ctx,
1210 struct system_time_snapshot *history_begin,
1211 struct system_device_crosststamp *xtstamp)
1212 {
1213 struct system_counterval_t system_counterval;
1214 struct timekeeper *tk = &tk_core.timekeeper;
1215 u64 cycles, now, interval_start;
1216 unsigned int clock_was_set_seq = 0;
1217 ktime_t base_real, base_raw;
1218 u64 nsec_real, nsec_raw;
1219 u8 cs_was_changed_seq;
1220 unsigned int seq;
1221 bool do_interp;
1222 int ret;
1223
1224 do {
1225 seq = read_seqcount_begin(&tk_core.seq);
1226
1227
1228
1229
1230 ret = get_time_fn(&xtstamp->device, &system_counterval, ctx);
1231 if (ret)
1232 return ret;
1233
1234
1235
1236
1237
1238
1239 if (tk->tkr_mono.clock != system_counterval.cs)
1240 return -ENODEV;
1241 cycles = system_counterval.cycles;
1242
1243
1244
1245
1246
1247 now = tk_clock_read(&tk->tkr_mono);
1248 interval_start = tk->tkr_mono.cycle_last;
1249 if (!cycle_between(interval_start, cycles, now)) {
1250 clock_was_set_seq = tk->clock_was_set_seq;
1251 cs_was_changed_seq = tk->cs_was_changed_seq;
1252 cycles = interval_start;
1253 do_interp = true;
1254 } else {
1255 do_interp = false;
1256 }
1257
1258 base_real = ktime_add(tk->tkr_mono.base,
1259 tk_core.timekeeper.offs_real);
1260 base_raw = tk->tkr_raw.base;
1261
1262 nsec_real = timekeeping_cycles_to_ns(&tk->tkr_mono,
1263 system_counterval.cycles);
1264 nsec_raw = timekeeping_cycles_to_ns(&tk->tkr_raw,
1265 system_counterval.cycles);
1266 } while (read_seqcount_retry(&tk_core.seq, seq));
1267
1268 xtstamp->sys_realtime = ktime_add_ns(base_real, nsec_real);
1269 xtstamp->sys_monoraw = ktime_add_ns(base_raw, nsec_raw);
1270
1271
1272
1273
1274
1275 if (do_interp) {
1276 u64 partial_history_cycles, total_history_cycles;
1277 bool discontinuity;
1278
1279
1280
1281
1282
1283
1284 if (!history_begin ||
1285 !cycle_between(history_begin->cycles,
1286 system_counterval.cycles, cycles) ||
1287 history_begin->cs_was_changed_seq != cs_was_changed_seq)
1288 return -EINVAL;
1289 partial_history_cycles = cycles - system_counterval.cycles;
1290 total_history_cycles = cycles - history_begin->cycles;
1291 discontinuity =
1292 history_begin->clock_was_set_seq != clock_was_set_seq;
1293
1294 ret = adjust_historical_crosststamp(history_begin,
1295 partial_history_cycles,
1296 total_history_cycles,
1297 discontinuity, xtstamp);
1298 if (ret)
1299 return ret;
1300 }
1301
1302 return 0;
1303 }
1304 EXPORT_SYMBOL_GPL(get_device_system_crosststamp);
1305
1306
1307
1308
1309
1310
1311
1312 int do_settimeofday64(const struct timespec64 *ts)
1313 {
1314 struct timekeeper *tk = &tk_core.timekeeper;
1315 struct timespec64 ts_delta, xt;
1316 unsigned long flags;
1317 int ret = 0;
1318
1319 if (!timespec64_valid_settod(ts))
1320 return -EINVAL;
1321
1322 raw_spin_lock_irqsave(&timekeeper_lock, flags);
1323 write_seqcount_begin(&tk_core.seq);
1324
1325 timekeeping_forward_now(tk);
1326
1327 xt = tk_xtime(tk);
1328 ts_delta = timespec64_sub(*ts, xt);
1329
1330 if (timespec64_compare(&tk->wall_to_monotonic, &ts_delta) > 0) {
1331 ret = -EINVAL;
1332 goto out;
1333 }
1334
1335 tk_set_wall_to_mono(tk, timespec64_sub(tk->wall_to_monotonic, ts_delta));
1336
1337 tk_set_xtime(tk, ts);
1338 out:
1339 timekeeping_update(tk, TK_CLEAR_NTP | TK_MIRROR | TK_CLOCK_WAS_SET);
1340
1341 write_seqcount_end(&tk_core.seq);
1342 raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
1343
1344
1345 clock_was_set(CLOCK_SET_WALL);
1346
1347 if (!ret) {
1348 audit_tk_injoffset(ts_delta);
1349 add_device_randomness(ts, sizeof(*ts));
1350 }
1351
1352 return ret;
1353 }
1354 EXPORT_SYMBOL(do_settimeofday64);
1355
1356
1357
1358
1359
1360
1361
1362 static int timekeeping_inject_offset(const struct timespec64 *ts)
1363 {
1364 struct timekeeper *tk = &tk_core.timekeeper;
1365 unsigned long flags;
1366 struct timespec64 tmp;
1367 int ret = 0;
1368
1369 if (ts->tv_nsec < 0 || ts->tv_nsec >= NSEC_PER_SEC)
1370 return -EINVAL;
1371
1372 raw_spin_lock_irqsave(&timekeeper_lock, flags);
1373 write_seqcount_begin(&tk_core.seq);
1374
1375 timekeeping_forward_now(tk);
1376
1377
1378 tmp = timespec64_add(tk_xtime(tk), *ts);
1379 if (timespec64_compare(&tk->wall_to_monotonic, ts) > 0 ||
1380 !timespec64_valid_settod(&tmp)) {
1381 ret = -EINVAL;
1382 goto error;
1383 }
1384
1385 tk_xtime_add(tk, ts);
1386 tk_set_wall_to_mono(tk, timespec64_sub(tk->wall_to_monotonic, *ts));
1387
1388 error:
1389 timekeeping_update(tk, TK_CLEAR_NTP | TK_MIRROR | TK_CLOCK_WAS_SET);
1390
1391 write_seqcount_end(&tk_core.seq);
1392 raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
1393
1394
1395 clock_was_set(CLOCK_SET_WALL);
1396
1397 return ret;
1398 }
1399
1400
1401
1402
1403
1404 int persistent_clock_is_local;
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422 void timekeeping_warp_clock(void)
1423 {
1424 if (sys_tz.tz_minuteswest != 0) {
1425 struct timespec64 adjust;
1426
1427 persistent_clock_is_local = 1;
1428 adjust.tv_sec = sys_tz.tz_minuteswest * 60;
1429 adjust.tv_nsec = 0;
1430 timekeeping_inject_offset(&adjust);
1431 }
1432 }
1433
1434
1435
1436
1437 static void __timekeeping_set_tai_offset(struct timekeeper *tk, s32 tai_offset)
1438 {
1439 tk->tai_offset = tai_offset;
1440 tk->offs_tai = ktime_add(tk->offs_real, ktime_set(tai_offset, 0));
1441 }
1442
1443
1444
1445
1446
1447
1448 static int change_clocksource(void *data)
1449 {
1450 struct timekeeper *tk = &tk_core.timekeeper;
1451 struct clocksource *new, *old = NULL;
1452 unsigned long flags;
1453 bool change = false;
1454
1455 new = (struct clocksource *) data;
1456
1457
1458
1459
1460
1461 if (try_module_get(new->owner)) {
1462 if (!new->enable || new->enable(new) == 0)
1463 change = true;
1464 else
1465 module_put(new->owner);
1466 }
1467
1468 raw_spin_lock_irqsave(&timekeeper_lock, flags);
1469 write_seqcount_begin(&tk_core.seq);
1470
1471 timekeeping_forward_now(tk);
1472
1473 if (change) {
1474 old = tk->tkr_mono.clock;
1475 tk_setup_internals(tk, new);
1476 }
1477
1478 timekeeping_update(tk, TK_CLEAR_NTP | TK_MIRROR | TK_CLOCK_WAS_SET);
1479
1480 write_seqcount_end(&tk_core.seq);
1481 raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
1482
1483 if (old) {
1484 if (old->disable)
1485 old->disable(old);
1486
1487 module_put(old->owner);
1488 }
1489
1490 return 0;
1491 }
1492
1493
1494
1495
1496
1497
1498
1499
1500 int timekeeping_notify(struct clocksource *clock)
1501 {
1502 struct timekeeper *tk = &tk_core.timekeeper;
1503
1504 if (tk->tkr_mono.clock == clock)
1505 return 0;
1506 stop_machine(change_clocksource, clock, NULL);
1507 tick_clock_notify();
1508 return tk->tkr_mono.clock == clock ? 0 : -1;
1509 }
1510
1511
1512
1513
1514
1515
1516
1517 void ktime_get_raw_ts64(struct timespec64 *ts)
1518 {
1519 struct timekeeper *tk = &tk_core.timekeeper;
1520 unsigned int seq;
1521 u64 nsecs;
1522
1523 do {
1524 seq = read_seqcount_begin(&tk_core.seq);
1525 ts->tv_sec = tk->raw_sec;
1526 nsecs = timekeeping_get_ns(&tk->tkr_raw);
1527
1528 } while (read_seqcount_retry(&tk_core.seq, seq));
1529
1530 ts->tv_nsec = 0;
1531 timespec64_add_ns(ts, nsecs);
1532 }
1533 EXPORT_SYMBOL(ktime_get_raw_ts64);
1534
1535
1536
1537
1538
1539 int timekeeping_valid_for_hres(void)
1540 {
1541 struct timekeeper *tk = &tk_core.timekeeper;
1542 unsigned int seq;
1543 int ret;
1544
1545 do {
1546 seq = read_seqcount_begin(&tk_core.seq);
1547
1548 ret = tk->tkr_mono.clock->flags & CLOCK_SOURCE_VALID_FOR_HRES;
1549
1550 } while (read_seqcount_retry(&tk_core.seq, seq));
1551
1552 return ret;
1553 }
1554
1555
1556
1557
1558 u64 timekeeping_max_deferment(void)
1559 {
1560 struct timekeeper *tk = &tk_core.timekeeper;
1561 unsigned int seq;
1562 u64 ret;
1563
1564 do {
1565 seq = read_seqcount_begin(&tk_core.seq);
1566
1567 ret = tk->tkr_mono.clock->max_idle_ns;
1568
1569 } while (read_seqcount_retry(&tk_core.seq, seq));
1570
1571 return ret;
1572 }
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584 void __weak read_persistent_clock64(struct timespec64 *ts)
1585 {
1586 ts->tv_sec = 0;
1587 ts->tv_nsec = 0;
1588 }
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603 void __weak __init
1604 read_persistent_wall_and_boot_offset(struct timespec64 *wall_time,
1605 struct timespec64 *boot_offset)
1606 {
1607 read_persistent_clock64(wall_time);
1608 *boot_offset = ns_to_timespec64(local_clock());
1609 }
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624 static bool suspend_timing_needed;
1625
1626
1627 static bool persistent_clock_exists;
1628
1629
1630
1631
1632 void __init timekeeping_init(void)
1633 {
1634 struct timespec64 wall_time, boot_offset, wall_to_mono;
1635 struct timekeeper *tk = &tk_core.timekeeper;
1636 struct clocksource *clock;
1637 unsigned long flags;
1638
1639 read_persistent_wall_and_boot_offset(&wall_time, &boot_offset);
1640 if (timespec64_valid_settod(&wall_time) &&
1641 timespec64_to_ns(&wall_time) > 0) {
1642 persistent_clock_exists = true;
1643 } else if (timespec64_to_ns(&wall_time) != 0) {
1644 pr_warn("Persistent clock returned invalid value");
1645 wall_time = (struct timespec64){0};
1646 }
1647
1648 if (timespec64_compare(&wall_time, &boot_offset) < 0)
1649 boot_offset = (struct timespec64){0};
1650
1651
1652
1653
1654
1655 wall_to_mono = timespec64_sub(boot_offset, wall_time);
1656
1657 raw_spin_lock_irqsave(&timekeeper_lock, flags);
1658 write_seqcount_begin(&tk_core.seq);
1659 ntp_init();
1660
1661 clock = clocksource_default_clock();
1662 if (clock->enable)
1663 clock->enable(clock);
1664 tk_setup_internals(tk, clock);
1665
1666 tk_set_xtime(tk, &wall_time);
1667 tk->raw_sec = 0;
1668
1669 tk_set_wall_to_mono(tk, wall_to_mono);
1670
1671 timekeeping_update(tk, TK_MIRROR | TK_CLOCK_WAS_SET);
1672
1673 write_seqcount_end(&tk_core.seq);
1674 raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
1675 }
1676
1677
1678 static struct timespec64 timekeeping_suspend_time;
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688 static void __timekeeping_inject_sleeptime(struct timekeeper *tk,
1689 const struct timespec64 *delta)
1690 {
1691 if (!timespec64_valid_strict(delta)) {
1692 printk_deferred(KERN_WARNING
1693 "__timekeeping_inject_sleeptime: Invalid "
1694 "sleep delta value!\n");
1695 return;
1696 }
1697 tk_xtime_add(tk, delta);
1698 tk_set_wall_to_mono(tk, timespec64_sub(tk->wall_to_monotonic, *delta));
1699 tk_update_sleep_time(tk, timespec64_to_ktime(*delta));
1700 tk_debug_account_sleep_time(delta);
1701 }
1702
1703 #if defined(CONFIG_PM_SLEEP) && defined(CONFIG_RTC_HCTOSYS_DEVICE)
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720 bool timekeeping_rtc_skipresume(void)
1721 {
1722 return !suspend_timing_needed;
1723 }
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734 bool timekeeping_rtc_skipsuspend(void)
1735 {
1736 return persistent_clock_exists;
1737 }
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750 void timekeeping_inject_sleeptime64(const struct timespec64 *delta)
1751 {
1752 struct timekeeper *tk = &tk_core.timekeeper;
1753 unsigned long flags;
1754
1755 raw_spin_lock_irqsave(&timekeeper_lock, flags);
1756 write_seqcount_begin(&tk_core.seq);
1757
1758 suspend_timing_needed = false;
1759
1760 timekeeping_forward_now(tk);
1761
1762 __timekeeping_inject_sleeptime(tk, delta);
1763
1764 timekeeping_update(tk, TK_CLEAR_NTP | TK_MIRROR | TK_CLOCK_WAS_SET);
1765
1766 write_seqcount_end(&tk_core.seq);
1767 raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
1768
1769
1770 clock_was_set(CLOCK_SET_WALL | CLOCK_SET_BOOT);
1771 }
1772 #endif
1773
1774
1775
1776
1777 void timekeeping_resume(void)
1778 {
1779 struct timekeeper *tk = &tk_core.timekeeper;
1780 struct clocksource *clock = tk->tkr_mono.clock;
1781 unsigned long flags;
1782 struct timespec64 ts_new, ts_delta;
1783 u64 cycle_now, nsec;
1784 bool inject_sleeptime = false;
1785
1786 read_persistent_clock64(&ts_new);
1787
1788 clockevents_resume();
1789 clocksource_resume();
1790
1791 raw_spin_lock_irqsave(&timekeeper_lock, flags);
1792 write_seqcount_begin(&tk_core.seq);
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806 cycle_now = tk_clock_read(&tk->tkr_mono);
1807 nsec = clocksource_stop_suspend_timing(clock, cycle_now);
1808 if (nsec > 0) {
1809 ts_delta = ns_to_timespec64(nsec);
1810 inject_sleeptime = true;
1811 } else if (timespec64_compare(&ts_new, &timekeeping_suspend_time) > 0) {
1812 ts_delta = timespec64_sub(ts_new, timekeeping_suspend_time);
1813 inject_sleeptime = true;
1814 }
1815
1816 if (inject_sleeptime) {
1817 suspend_timing_needed = false;
1818 __timekeeping_inject_sleeptime(tk, &ts_delta);
1819 }
1820
1821
1822 tk->tkr_mono.cycle_last = cycle_now;
1823 tk->tkr_raw.cycle_last = cycle_now;
1824
1825 tk->ntp_error = 0;
1826 timekeeping_suspended = 0;
1827 timekeeping_update(tk, TK_MIRROR | TK_CLOCK_WAS_SET);
1828 write_seqcount_end(&tk_core.seq);
1829 raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
1830
1831 touch_softlockup_watchdog();
1832
1833
1834 tick_resume();
1835
1836 timerfd_resume();
1837 }
1838
1839 int timekeeping_suspend(void)
1840 {
1841 struct timekeeper *tk = &tk_core.timekeeper;
1842 unsigned long flags;
1843 struct timespec64 delta, delta_delta;
1844 static struct timespec64 old_delta;
1845 struct clocksource *curr_clock;
1846 u64 cycle_now;
1847
1848 read_persistent_clock64(&timekeeping_suspend_time);
1849
1850
1851
1852
1853
1854
1855 if (timekeeping_suspend_time.tv_sec || timekeeping_suspend_time.tv_nsec)
1856 persistent_clock_exists = true;
1857
1858 suspend_timing_needed = true;
1859
1860 raw_spin_lock_irqsave(&timekeeper_lock, flags);
1861 write_seqcount_begin(&tk_core.seq);
1862 timekeeping_forward_now(tk);
1863 timekeeping_suspended = 1;
1864
1865
1866
1867
1868
1869
1870 curr_clock = tk->tkr_mono.clock;
1871 cycle_now = tk->tkr_mono.cycle_last;
1872 clocksource_start_suspend_timing(curr_clock, cycle_now);
1873
1874 if (persistent_clock_exists) {
1875
1876
1877
1878
1879
1880
1881 delta = timespec64_sub(tk_xtime(tk), timekeeping_suspend_time);
1882 delta_delta = timespec64_sub(delta, old_delta);
1883 if (abs(delta_delta.tv_sec) >= 2) {
1884
1885
1886
1887
1888 old_delta = delta;
1889 } else {
1890
1891 timekeeping_suspend_time =
1892 timespec64_add(timekeeping_suspend_time, delta_delta);
1893 }
1894 }
1895
1896 timekeeping_update(tk, TK_MIRROR);
1897 halt_fast_timekeeper(tk);
1898 write_seqcount_end(&tk_core.seq);
1899 raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
1900
1901 tick_suspend();
1902 clocksource_suspend();
1903 clockevents_suspend();
1904
1905 return 0;
1906 }
1907
1908
1909 static struct syscore_ops timekeeping_syscore_ops = {
1910 .resume = timekeeping_resume,
1911 .suspend = timekeeping_suspend,
1912 };
1913
1914 static int __init timekeeping_init_ops(void)
1915 {
1916 register_syscore_ops(&timekeeping_syscore_ops);
1917 return 0;
1918 }
1919 device_initcall(timekeeping_init_ops);
1920
1921
1922
1923
1924 static __always_inline void timekeeping_apply_adjustment(struct timekeeper *tk,
1925 s64 offset,
1926 s32 mult_adj)
1927 {
1928 s64 interval = tk->cycle_interval;
1929
1930 if (mult_adj == 0) {
1931 return;
1932 } else if (mult_adj == -1) {
1933 interval = -interval;
1934 offset = -offset;
1935 } else if (mult_adj != 1) {
1936 interval *= mult_adj;
1937 offset *= mult_adj;
1938 }
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987 if ((mult_adj > 0) && (tk->tkr_mono.mult + mult_adj < mult_adj)) {
1988
1989 WARN_ON_ONCE(1);
1990 return;
1991 }
1992
1993 tk->tkr_mono.mult += mult_adj;
1994 tk->xtime_interval += interval;
1995 tk->tkr_mono.xtime_nsec -= offset;
1996 }
1997
1998
1999
2000
2001
2002 static void timekeeping_adjust(struct timekeeper *tk, s64 offset)
2003 {
2004 u32 mult;
2005
2006
2007
2008
2009
2010 if (likely(tk->ntp_tick == ntp_tick_length())) {
2011 mult = tk->tkr_mono.mult - tk->ntp_err_mult;
2012 } else {
2013 tk->ntp_tick = ntp_tick_length();
2014 mult = div64_u64((tk->ntp_tick >> tk->ntp_error_shift) -
2015 tk->xtime_remainder, tk->cycle_interval);
2016 }
2017
2018
2019
2020
2021
2022
2023
2024 tk->ntp_err_mult = tk->ntp_error > 0 ? 1 : 0;
2025 mult += tk->ntp_err_mult;
2026
2027 timekeeping_apply_adjustment(tk, offset, mult - tk->tkr_mono.mult);
2028
2029 if (unlikely(tk->tkr_mono.clock->maxadj &&
2030 (abs(tk->tkr_mono.mult - tk->tkr_mono.clock->mult)
2031 > tk->tkr_mono.clock->maxadj))) {
2032 printk_once(KERN_WARNING
2033 "Adjusting %s more than 11%% (%ld vs %ld)\n",
2034 tk->tkr_mono.clock->name, (long)tk->tkr_mono.mult,
2035 (long)tk->tkr_mono.clock->mult + tk->tkr_mono.clock->maxadj);
2036 }
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048 if (unlikely((s64)tk->tkr_mono.xtime_nsec < 0)) {
2049 tk->tkr_mono.xtime_nsec += (u64)NSEC_PER_SEC <<
2050 tk->tkr_mono.shift;
2051 tk->xtime_sec--;
2052 tk->skip_second_overflow = 1;
2053 }
2054 }
2055
2056
2057
2058
2059
2060
2061
2062
2063 static inline unsigned int accumulate_nsecs_to_secs(struct timekeeper *tk)
2064 {
2065 u64 nsecps = (u64)NSEC_PER_SEC << tk->tkr_mono.shift;
2066 unsigned int clock_set = 0;
2067
2068 while (tk->tkr_mono.xtime_nsec >= nsecps) {
2069 int leap;
2070
2071 tk->tkr_mono.xtime_nsec -= nsecps;
2072 tk->xtime_sec++;
2073
2074
2075
2076
2077
2078 if (unlikely(tk->skip_second_overflow)) {
2079 tk->skip_second_overflow = 0;
2080 continue;
2081 }
2082
2083
2084 leap = second_overflow(tk->xtime_sec);
2085 if (unlikely(leap)) {
2086 struct timespec64 ts;
2087
2088 tk->xtime_sec += leap;
2089
2090 ts.tv_sec = leap;
2091 ts.tv_nsec = 0;
2092 tk_set_wall_to_mono(tk,
2093 timespec64_sub(tk->wall_to_monotonic, ts));
2094
2095 __timekeeping_set_tai_offset(tk, tk->tai_offset - leap);
2096
2097 clock_set = TK_CLOCK_WAS_SET;
2098 }
2099 }
2100 return clock_set;
2101 }
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112 static u64 logarithmic_accumulation(struct timekeeper *tk, u64 offset,
2113 u32 shift, unsigned int *clock_set)
2114 {
2115 u64 interval = tk->cycle_interval << shift;
2116 u64 snsec_per_sec;
2117
2118
2119 if (offset < interval)
2120 return offset;
2121
2122
2123 offset -= interval;
2124 tk->tkr_mono.cycle_last += interval;
2125 tk->tkr_raw.cycle_last += interval;
2126
2127 tk->tkr_mono.xtime_nsec += tk->xtime_interval << shift;
2128 *clock_set |= accumulate_nsecs_to_secs(tk);
2129
2130
2131 tk->tkr_raw.xtime_nsec += tk->raw_interval << shift;
2132 snsec_per_sec = (u64)NSEC_PER_SEC << tk->tkr_raw.shift;
2133 while (tk->tkr_raw.xtime_nsec >= snsec_per_sec) {
2134 tk->tkr_raw.xtime_nsec -= snsec_per_sec;
2135 tk->raw_sec++;
2136 }
2137
2138
2139 tk->ntp_error += tk->ntp_tick << shift;
2140 tk->ntp_error -= (tk->xtime_interval + tk->xtime_remainder) <<
2141 (tk->ntp_error_shift + shift);
2142
2143 return offset;
2144 }
2145
2146
2147
2148
2149
2150 static bool timekeeping_advance(enum timekeeping_adv_mode mode)
2151 {
2152 struct timekeeper *real_tk = &tk_core.timekeeper;
2153 struct timekeeper *tk = &shadow_timekeeper;
2154 u64 offset;
2155 int shift = 0, maxshift;
2156 unsigned int clock_set = 0;
2157 unsigned long flags;
2158
2159 raw_spin_lock_irqsave(&timekeeper_lock, flags);
2160
2161
2162 if (unlikely(timekeeping_suspended))
2163 goto out;
2164
2165 offset = clocksource_delta(tk_clock_read(&tk->tkr_mono),
2166 tk->tkr_mono.cycle_last, tk->tkr_mono.mask);
2167
2168
2169 if (offset < real_tk->cycle_interval && mode == TK_ADV_TICK)
2170 goto out;
2171
2172
2173 timekeeping_check_update(tk, offset);
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183 shift = ilog2(offset) - ilog2(tk->cycle_interval);
2184 shift = max(0, shift);
2185
2186 maxshift = (64 - (ilog2(ntp_tick_length())+1)) - 1;
2187 shift = min(shift, maxshift);
2188 while (offset >= tk->cycle_interval) {
2189 offset = logarithmic_accumulation(tk, offset, shift,
2190 &clock_set);
2191 if (offset < tk->cycle_interval<<shift)
2192 shift--;
2193 }
2194
2195
2196 timekeeping_adjust(tk, offset);
2197
2198
2199
2200
2201
2202 clock_set |= accumulate_nsecs_to_secs(tk);
2203
2204 write_seqcount_begin(&tk_core.seq);
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215 timekeeping_update(tk, clock_set);
2216 memcpy(real_tk, tk, sizeof(*tk));
2217
2218 write_seqcount_end(&tk_core.seq);
2219 out:
2220 raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
2221
2222 return !!clock_set;
2223 }
2224
2225
2226
2227
2228
2229 void update_wall_time(void)
2230 {
2231 if (timekeeping_advance(TK_ADV_TICK))
2232 clock_was_set_delayed();
2233 }
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246 void getboottime64(struct timespec64 *ts)
2247 {
2248 struct timekeeper *tk = &tk_core.timekeeper;
2249 ktime_t t = ktime_sub(tk->offs_real, tk->offs_boot);
2250
2251 *ts = ktime_to_timespec64(t);
2252 }
2253 EXPORT_SYMBOL_GPL(getboottime64);
2254
2255 void ktime_get_coarse_real_ts64(struct timespec64 *ts)
2256 {
2257 struct timekeeper *tk = &tk_core.timekeeper;
2258 unsigned int seq;
2259
2260 do {
2261 seq = read_seqcount_begin(&tk_core.seq);
2262
2263 *ts = tk_xtime(tk);
2264 } while (read_seqcount_retry(&tk_core.seq, seq));
2265 }
2266 EXPORT_SYMBOL(ktime_get_coarse_real_ts64);
2267
2268 void ktime_get_coarse_ts64(struct timespec64 *ts)
2269 {
2270 struct timekeeper *tk = &tk_core.timekeeper;
2271 struct timespec64 now, mono;
2272 unsigned int seq;
2273
2274 do {
2275 seq = read_seqcount_begin(&tk_core.seq);
2276
2277 now = tk_xtime(tk);
2278 mono = tk->wall_to_monotonic;
2279 } while (read_seqcount_retry(&tk_core.seq, seq));
2280
2281 set_normalized_timespec64(ts, now.tv_sec + mono.tv_sec,
2282 now.tv_nsec + mono.tv_nsec);
2283 }
2284 EXPORT_SYMBOL(ktime_get_coarse_ts64);
2285
2286
2287
2288
2289 void do_timer(unsigned long ticks)
2290 {
2291 jiffies_64 += ticks;
2292 calc_global_load();
2293 }
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308 ktime_t ktime_get_update_offsets_now(unsigned int *cwsseq, ktime_t *offs_real,
2309 ktime_t *offs_boot, ktime_t *offs_tai)
2310 {
2311 struct timekeeper *tk = &tk_core.timekeeper;
2312 unsigned int seq;
2313 ktime_t base;
2314 u64 nsecs;
2315
2316 do {
2317 seq = read_seqcount_begin(&tk_core.seq);
2318
2319 base = tk->tkr_mono.base;
2320 nsecs = timekeeping_get_ns(&tk->tkr_mono);
2321 base = ktime_add_ns(base, nsecs);
2322
2323 if (*cwsseq != tk->clock_was_set_seq) {
2324 *cwsseq = tk->clock_was_set_seq;
2325 *offs_real = tk->offs_real;
2326 *offs_boot = tk->offs_boot;
2327 *offs_tai = tk->offs_tai;
2328 }
2329
2330
2331 if (unlikely(base >= tk->next_leap_ktime))
2332 *offs_real = ktime_sub(tk->offs_real, ktime_set(1, 0));
2333
2334 } while (read_seqcount_retry(&tk_core.seq, seq));
2335
2336 return base;
2337 }
2338
2339
2340
2341
2342 static int timekeeping_validate_timex(const struct __kernel_timex *txc)
2343 {
2344 if (txc->modes & ADJ_ADJTIME) {
2345
2346 if (!(txc->modes & ADJ_OFFSET_SINGLESHOT))
2347 return -EINVAL;
2348 if (!(txc->modes & ADJ_OFFSET_READONLY) &&
2349 !capable(CAP_SYS_TIME))
2350 return -EPERM;
2351 } else {
2352
2353 if (txc->modes && !capable(CAP_SYS_TIME))
2354 return -EPERM;
2355
2356
2357
2358
2359 if (txc->modes & ADJ_TICK &&
2360 (txc->tick < 900000/USER_HZ ||
2361 txc->tick > 1100000/USER_HZ))
2362 return -EINVAL;
2363 }
2364
2365 if (txc->modes & ADJ_SETOFFSET) {
2366
2367 if (!capable(CAP_SYS_TIME))
2368 return -EPERM;
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378 if (txc->time.tv_usec < 0)
2379 return -EINVAL;
2380
2381 if (txc->modes & ADJ_NANO) {
2382 if (txc->time.tv_usec >= NSEC_PER_SEC)
2383 return -EINVAL;
2384 } else {
2385 if (txc->time.tv_usec >= USEC_PER_SEC)
2386 return -EINVAL;
2387 }
2388 }
2389
2390
2391
2392
2393
2394 if ((txc->modes & ADJ_FREQUENCY) && (BITS_PER_LONG == 64)) {
2395 if (LLONG_MIN / PPM_SCALE > txc->freq)
2396 return -EINVAL;
2397 if (LLONG_MAX / PPM_SCALE < txc->freq)
2398 return -EINVAL;
2399 }
2400
2401 return 0;
2402 }
2403
2404
2405
2406
2407
2408 unsigned long random_get_entropy_fallback(void)
2409 {
2410 struct tk_read_base *tkr = &tk_core.timekeeper.tkr_mono;
2411 struct clocksource *clock = READ_ONCE(tkr->clock);
2412
2413 if (unlikely(timekeeping_suspended || !clock))
2414 return 0;
2415 return clock->read(clock);
2416 }
2417 EXPORT_SYMBOL_GPL(random_get_entropy_fallback);
2418
2419
2420
2421
2422 int do_adjtimex(struct __kernel_timex *txc)
2423 {
2424 struct timekeeper *tk = &tk_core.timekeeper;
2425 struct audit_ntp_data ad;
2426 bool clock_set = false;
2427 struct timespec64 ts;
2428 unsigned long flags;
2429 s32 orig_tai, tai;
2430 int ret;
2431
2432
2433 ret = timekeeping_validate_timex(txc);
2434 if (ret)
2435 return ret;
2436 add_device_randomness(txc, sizeof(*txc));
2437
2438 if (txc->modes & ADJ_SETOFFSET) {
2439 struct timespec64 delta;
2440 delta.tv_sec = txc->time.tv_sec;
2441 delta.tv_nsec = txc->time.tv_usec;
2442 if (!(txc->modes & ADJ_NANO))
2443 delta.tv_nsec *= 1000;
2444 ret = timekeeping_inject_offset(&delta);
2445 if (ret)
2446 return ret;
2447
2448 audit_tk_injoffset(delta);
2449 }
2450
2451 audit_ntp_init(&ad);
2452
2453 ktime_get_real_ts64(&ts);
2454 add_device_randomness(&ts, sizeof(ts));
2455
2456 raw_spin_lock_irqsave(&timekeeper_lock, flags);
2457 write_seqcount_begin(&tk_core.seq);
2458
2459 orig_tai = tai = tk->tai_offset;
2460 ret = __do_adjtimex(txc, &ts, &tai, &ad);
2461
2462 if (tai != orig_tai) {
2463 __timekeeping_set_tai_offset(tk, tai);
2464 timekeeping_update(tk, TK_MIRROR | TK_CLOCK_WAS_SET);
2465 clock_set = true;
2466 }
2467 tk_update_leap_state(tk);
2468
2469 write_seqcount_end(&tk_core.seq);
2470 raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
2471
2472 audit_ntp_log(&ad);
2473
2474
2475 if (txc->modes & (ADJ_FREQUENCY | ADJ_TICK))
2476 clock_set |= timekeeping_advance(TK_ADV_FREQ);
2477
2478 if (clock_set)
2479 clock_was_set(CLOCK_REALTIME);
2480
2481 ntp_notify_cmos_timer();
2482
2483 return ret;
2484 }
2485
2486 #ifdef CONFIG_NTP_PPS
2487
2488
2489
2490 void hardpps(const struct timespec64 *phase_ts, const struct timespec64 *raw_ts)
2491 {
2492 unsigned long flags;
2493
2494 raw_spin_lock_irqsave(&timekeeper_lock, flags);
2495 write_seqcount_begin(&tk_core.seq);
2496
2497 __hardpps(phase_ts, raw_ts);
2498
2499 write_seqcount_end(&tk_core.seq);
2500 raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
2501 }
2502 EXPORT_SYMBOL(hardpps);
2503 #endif