d8b23a929e6607bcab9f91dd4ad1dfa149cd18af
[platform/adaptation/renesas_rcar/renesas_kernel.git] / kernel / time / timekeeping.c
1 /*
2  *  linux/kernel/time/timekeeping.c
3  *
4  *  Kernel timekeeping code and accessor functions
5  *
6  *  This code was moved from linux/kernel/timer.c.
7  *  Please see that file for copyright and history logs.
8  *
9  */
10
11 #include <linux/timekeeper_internal.h>
12 #include <linux/module.h>
13 #include <linux/interrupt.h>
14 #include <linux/percpu.h>
15 #include <linux/init.h>
16 #include <linux/mm.h>
17 #include <linux/sched.h>
18 #include <linux/syscore_ops.h>
19 #include <linux/clocksource.h>
20 #include <linux/jiffies.h>
21 #include <linux/time.h>
22 #include <linux/tick.h>
23 #include <linux/stop_machine.h>
24 #include <linux/pvclock_gtod.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
33 static struct timekeeper timekeeper;
34 static DEFINE_RAW_SPINLOCK(timekeeper_lock);
35 static seqcount_t timekeeper_seq;
36 static struct timekeeper shadow_timekeeper;
37
38 /* flag for if timekeeping is suspended */
39 int __read_mostly timekeeping_suspended;
40
41 /* Flag for if there is a persistent clock on this platform */
42 bool __read_mostly persistent_clock_exist = false;
43
44 static inline void tk_normalize_xtime(struct timekeeper *tk)
45 {
46         while (tk->xtime_nsec >= ((u64)NSEC_PER_SEC << tk->shift)) {
47                 tk->xtime_nsec -= (u64)NSEC_PER_SEC << tk->shift;
48                 tk->xtime_sec++;
49         }
50 }
51
52 static void tk_set_xtime(struct timekeeper *tk, const struct timespec *ts)
53 {
54         tk->xtime_sec = ts->tv_sec;
55         tk->xtime_nsec = (u64)ts->tv_nsec << tk->shift;
56 }
57
58 static void tk_xtime_add(struct timekeeper *tk, const struct timespec *ts)
59 {
60         tk->xtime_sec += ts->tv_sec;
61         tk->xtime_nsec += (u64)ts->tv_nsec << tk->shift;
62         tk_normalize_xtime(tk);
63 }
64
65 static void tk_set_wall_to_mono(struct timekeeper *tk, struct timespec wtm)
66 {
67         struct timespec tmp;
68
69         /*
70          * Verify consistency of: offset_real = -wall_to_monotonic
71          * before modifying anything
72          */
73         set_normalized_timespec(&tmp, -tk->wall_to_monotonic.tv_sec,
74                                         -tk->wall_to_monotonic.tv_nsec);
75         WARN_ON_ONCE(tk->offs_real.tv64 != timespec_to_ktime(tmp).tv64);
76         tk->wall_to_monotonic = wtm;
77         set_normalized_timespec(&tmp, -wtm.tv_sec, -wtm.tv_nsec);
78         tk->offs_real = timespec_to_ktime(tmp);
79         tk->offs_tai = ktime_sub(tk->offs_real, ktime_set(tk->tai_offset, 0));
80 }
81
82 static void tk_set_sleep_time(struct timekeeper *tk, struct timespec t)
83 {
84         /* Verify consistency before modifying */
85         WARN_ON_ONCE(tk->offs_boot.tv64 != timespec_to_ktime(tk->total_sleep_time).tv64);
86
87         tk->total_sleep_time    = t;
88         tk->offs_boot           = timespec_to_ktime(t);
89 }
90
91 /**
92  * timekeeper_setup_internals - Set up internals to use clocksource clock.
93  *
94  * @clock:              Pointer to clocksource.
95  *
96  * Calculates a fixed cycle/nsec interval for a given clocksource/adjustment
97  * pair and interval request.
98  *
99  * Unless you're the timekeeping code, you should not be using this!
100  */
101 static void tk_setup_internals(struct timekeeper *tk, struct clocksource *clock)
102 {
103         cycle_t interval;
104         u64 tmp, ntpinterval;
105         struct clocksource *old_clock;
106
107         old_clock = tk->clock;
108         tk->clock = clock;
109         tk->cycle_last = clock->cycle_last = clock->read(clock);
110
111         /* Do the ns -> cycle conversion first, using original mult */
112         tmp = NTP_INTERVAL_LENGTH;
113         tmp <<= clock->shift;
114         ntpinterval = tmp;
115         tmp += clock->mult/2;
116         do_div(tmp, clock->mult);
117         if (tmp == 0)
118                 tmp = 1;
119
120         interval = (cycle_t) tmp;
121         tk->cycle_interval = interval;
122
123         /* Go back from cycles -> shifted ns */
124         tk->xtime_interval = (u64) interval * clock->mult;
125         tk->xtime_remainder = ntpinterval - tk->xtime_interval;
126         tk->raw_interval =
127                 ((u64) interval * clock->mult) >> clock->shift;
128
129          /* if changing clocks, convert xtime_nsec shift units */
130         if (old_clock) {
131                 int shift_change = clock->shift - old_clock->shift;
132                 if (shift_change < 0)
133                         tk->xtime_nsec >>= -shift_change;
134                 else
135                         tk->xtime_nsec <<= shift_change;
136         }
137         tk->shift = clock->shift;
138
139         tk->ntp_error = 0;
140         tk->ntp_error_shift = NTP_SCALE_SHIFT - clock->shift;
141
142         /*
143          * The timekeeper keeps its own mult values for the currently
144          * active clocksource. These value will be adjusted via NTP
145          * to counteract clock drifting.
146          */
147         tk->mult = clock->mult;
148 }
149
150 /* Timekeeper helper functions. */
151
152 #ifdef CONFIG_ARCH_USES_GETTIMEOFFSET
153 u32 (*arch_gettimeoffset)(void);
154
155 u32 get_arch_timeoffset(void)
156 {
157         if (likely(arch_gettimeoffset))
158                 return arch_gettimeoffset();
159         return 0;
160 }
161 #else
162 static inline u32 get_arch_timeoffset(void) { return 0; }
163 #endif
164
165 static inline s64 timekeeping_get_ns(struct timekeeper *tk)
166 {
167         cycle_t cycle_now, cycle_delta;
168         struct clocksource *clock;
169         s64 nsec;
170
171         /* read clocksource: */
172         clock = tk->clock;
173         cycle_now = clock->read(clock);
174
175         /* calculate the delta since the last update_wall_time: */
176         cycle_delta = (cycle_now - clock->cycle_last) & clock->mask;
177
178         nsec = cycle_delta * tk->mult + tk->xtime_nsec;
179         nsec >>= tk->shift;
180
181         /* If arch requires, add in get_arch_timeoffset() */
182         return nsec + get_arch_timeoffset();
183 }
184
185 static inline s64 timekeeping_get_ns_raw(struct timekeeper *tk)
186 {
187         cycle_t cycle_now, cycle_delta;
188         struct clocksource *clock;
189         s64 nsec;
190
191         /* read clocksource: */
192         clock = tk->clock;
193         cycle_now = clock->read(clock);
194
195         /* calculate the delta since the last update_wall_time: */
196         cycle_delta = (cycle_now - clock->cycle_last) & clock->mask;
197
198         /* convert delta to nanoseconds. */
199         nsec = clocksource_cyc2ns(cycle_delta, clock->mult, clock->shift);
200
201         /* If arch requires, add in get_arch_timeoffset() */
202         return nsec + get_arch_timeoffset();
203 }
204
205 static RAW_NOTIFIER_HEAD(pvclock_gtod_chain);
206
207 static void update_pvclock_gtod(struct timekeeper *tk)
208 {
209         raw_notifier_call_chain(&pvclock_gtod_chain, 0, tk);
210 }
211
212 /**
213  * pvclock_gtod_register_notifier - register a pvclock timedata update listener
214  */
215 int pvclock_gtod_register_notifier(struct notifier_block *nb)
216 {
217         struct timekeeper *tk = &timekeeper;
218         unsigned long flags;
219         int ret;
220
221         raw_spin_lock_irqsave(&timekeeper_lock, flags);
222         ret = raw_notifier_chain_register(&pvclock_gtod_chain, nb);
223         update_pvclock_gtod(tk);
224         raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
225
226         return ret;
227 }
228 EXPORT_SYMBOL_GPL(pvclock_gtod_register_notifier);
229
230 /**
231  * pvclock_gtod_unregister_notifier - unregister a pvclock
232  * timedata update listener
233  */
234 int pvclock_gtod_unregister_notifier(struct notifier_block *nb)
235 {
236         unsigned long flags;
237         int ret;
238
239         raw_spin_lock_irqsave(&timekeeper_lock, flags);
240         ret = raw_notifier_chain_unregister(&pvclock_gtod_chain, nb);
241         raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
242
243         return ret;
244 }
245 EXPORT_SYMBOL_GPL(pvclock_gtod_unregister_notifier);
246
247 /* must hold timekeeper_lock */
248 static void timekeeping_update(struct timekeeper *tk, unsigned int action)
249 {
250         if (action & TK_CLEAR_NTP) {
251                 tk->ntp_error = 0;
252                 ntp_clear();
253         }
254         update_vsyscall(tk);
255         update_pvclock_gtod(tk);
256
257         if (action & TK_MIRROR)
258                 memcpy(&shadow_timekeeper, &timekeeper, sizeof(timekeeper));
259 }
260
261 /**
262  * timekeeping_forward_now - update clock to the current time
263  *
264  * Forward the current clock to update its state since the last call to
265  * update_wall_time(). This is useful before significant clock changes,
266  * as it avoids having to deal with this time offset explicitly.
267  */
268 static void timekeeping_forward_now(struct timekeeper *tk)
269 {
270         cycle_t cycle_now, cycle_delta;
271         struct clocksource *clock;
272         s64 nsec;
273
274         clock = tk->clock;
275         cycle_now = clock->read(clock);
276         cycle_delta = (cycle_now - clock->cycle_last) & clock->mask;
277         tk->cycle_last = clock->cycle_last = cycle_now;
278
279         tk->xtime_nsec += cycle_delta * tk->mult;
280
281         /* If arch requires, add in get_arch_timeoffset() */
282         tk->xtime_nsec += (u64)get_arch_timeoffset() << tk->shift;
283
284         tk_normalize_xtime(tk);
285
286         nsec = clocksource_cyc2ns(cycle_delta, clock->mult, clock->shift);
287         timespec_add_ns(&tk->raw_time, nsec);
288 }
289
290 /**
291  * __getnstimeofday - Returns the time of day in a timespec.
292  * @ts:         pointer to the timespec to be set
293  *
294  * Updates the time of day in the timespec.
295  * Returns 0 on success, or -ve when suspended (timespec will be undefined).
296  */
297 int __getnstimeofday(struct timespec *ts)
298 {
299         struct timekeeper *tk = &timekeeper;
300         unsigned long seq;
301         s64 nsecs = 0;
302
303         do {
304                 seq = read_seqcount_begin(&timekeeper_seq);
305
306                 ts->tv_sec = tk->xtime_sec;
307                 nsecs = timekeeping_get_ns(tk);
308
309         } while (read_seqcount_retry(&timekeeper_seq, seq));
310
311         ts->tv_nsec = 0;
312         timespec_add_ns(ts, nsecs);
313
314         /*
315          * Do not bail out early, in case there were callers still using
316          * the value, even in the face of the WARN_ON.
317          */
318         if (unlikely(timekeeping_suspended))
319                 return -EAGAIN;
320         return 0;
321 }
322 EXPORT_SYMBOL(__getnstimeofday);
323
324 /**
325  * getnstimeofday - Returns the time of day in a timespec.
326  * @ts:         pointer to the timespec to be set
327  *
328  * Returns the time of day in a timespec (WARN if suspended).
329  */
330 void getnstimeofday(struct timespec *ts)
331 {
332         WARN_ON(__getnstimeofday(ts));
333 }
334 EXPORT_SYMBOL(getnstimeofday);
335
336 ktime_t ktime_get(void)
337 {
338         struct timekeeper *tk = &timekeeper;
339         unsigned int seq;
340         s64 secs, nsecs;
341
342         WARN_ON(timekeeping_suspended);
343
344         do {
345                 seq = read_seqcount_begin(&timekeeper_seq);
346                 secs = tk->xtime_sec + tk->wall_to_monotonic.tv_sec;
347                 nsecs = timekeeping_get_ns(tk) + tk->wall_to_monotonic.tv_nsec;
348
349         } while (read_seqcount_retry(&timekeeper_seq, seq));
350         /*
351          * Use ktime_set/ktime_add_ns to create a proper ktime on
352          * 32-bit architectures without CONFIG_KTIME_SCALAR.
353          */
354         return ktime_add_ns(ktime_set(secs, 0), nsecs);
355 }
356 EXPORT_SYMBOL_GPL(ktime_get);
357
358 /**
359  * ktime_get_ts - get the monotonic clock in timespec format
360  * @ts:         pointer to timespec variable
361  *
362  * The function calculates the monotonic clock from the realtime
363  * clock and the wall_to_monotonic offset and stores the result
364  * in normalized timespec format in the variable pointed to by @ts.
365  */
366 void ktime_get_ts(struct timespec *ts)
367 {
368         struct timekeeper *tk = &timekeeper;
369         struct timespec tomono;
370         s64 nsec;
371         unsigned int seq;
372
373         WARN_ON(timekeeping_suspended);
374
375         do {
376                 seq = read_seqcount_begin(&timekeeper_seq);
377                 ts->tv_sec = tk->xtime_sec;
378                 nsec = timekeeping_get_ns(tk);
379                 tomono = tk->wall_to_monotonic;
380
381         } while (read_seqcount_retry(&timekeeper_seq, seq));
382
383         ts->tv_sec += tomono.tv_sec;
384         ts->tv_nsec = 0;
385         timespec_add_ns(ts, nsec + tomono.tv_nsec);
386 }
387 EXPORT_SYMBOL_GPL(ktime_get_ts);
388
389
390 /**
391  * timekeeping_clocktai - Returns the TAI time of day in a timespec
392  * @ts:         pointer to the timespec to be set
393  *
394  * Returns the time of day in a timespec.
395  */
396 void timekeeping_clocktai(struct timespec *ts)
397 {
398         struct timekeeper *tk = &timekeeper;
399         unsigned long seq;
400         u64 nsecs;
401
402         WARN_ON(timekeeping_suspended);
403
404         do {
405                 seq = read_seqcount_begin(&timekeeper_seq);
406
407                 ts->tv_sec = tk->xtime_sec + tk->tai_offset;
408                 nsecs = timekeeping_get_ns(tk);
409
410         } while (read_seqcount_retry(&timekeeper_seq, seq));
411
412         ts->tv_nsec = 0;
413         timespec_add_ns(ts, nsecs);
414
415 }
416 EXPORT_SYMBOL(timekeeping_clocktai);
417
418
419 /**
420  * ktime_get_clocktai - Returns the TAI time of day in a ktime
421  *
422  * Returns the time of day in a ktime.
423  */
424 ktime_t ktime_get_clocktai(void)
425 {
426         struct timespec ts;
427
428         timekeeping_clocktai(&ts);
429         return timespec_to_ktime(ts);
430 }
431 EXPORT_SYMBOL(ktime_get_clocktai);
432
433 #ifdef CONFIG_NTP_PPS
434
435 /**
436  * getnstime_raw_and_real - get day and raw monotonic time in timespec format
437  * @ts_raw:     pointer to the timespec to be set to raw monotonic time
438  * @ts_real:    pointer to the timespec to be set to the time of day
439  *
440  * This function reads both the time of day and raw monotonic time at the
441  * same time atomically and stores the resulting timestamps in timespec
442  * format.
443  */
444 void getnstime_raw_and_real(struct timespec *ts_raw, struct timespec *ts_real)
445 {
446         struct timekeeper *tk = &timekeeper;
447         unsigned long seq;
448         s64 nsecs_raw, nsecs_real;
449
450         WARN_ON_ONCE(timekeeping_suspended);
451
452         do {
453                 seq = read_seqcount_begin(&timekeeper_seq);
454
455                 *ts_raw = tk->raw_time;
456                 ts_real->tv_sec = tk->xtime_sec;
457                 ts_real->tv_nsec = 0;
458
459                 nsecs_raw = timekeeping_get_ns_raw(tk);
460                 nsecs_real = timekeeping_get_ns(tk);
461
462         } while (read_seqcount_retry(&timekeeper_seq, seq));
463
464         timespec_add_ns(ts_raw, nsecs_raw);
465         timespec_add_ns(ts_real, nsecs_real);
466 }
467 EXPORT_SYMBOL(getnstime_raw_and_real);
468
469 #endif /* CONFIG_NTP_PPS */
470
471 /**
472  * do_gettimeofday - Returns the time of day in a timeval
473  * @tv:         pointer to the timeval to be set
474  *
475  * NOTE: Users should be converted to using getnstimeofday()
476  */
477 void do_gettimeofday(struct timeval *tv)
478 {
479         struct timespec now;
480
481         getnstimeofday(&now);
482         tv->tv_sec = now.tv_sec;
483         tv->tv_usec = now.tv_nsec/1000;
484 }
485 EXPORT_SYMBOL(do_gettimeofday);
486
487 /**
488  * do_settimeofday - Sets the time of day
489  * @tv:         pointer to the timespec variable containing the new time
490  *
491  * Sets the time of day to the new time and update NTP and notify hrtimers
492  */
493 int do_settimeofday(const struct timespec *tv)
494 {
495         struct timekeeper *tk = &timekeeper;
496         struct timespec ts_delta, xt;
497         unsigned long flags;
498
499         if (!timespec_valid_strict(tv))
500                 return -EINVAL;
501
502         raw_spin_lock_irqsave(&timekeeper_lock, flags);
503         write_seqcount_begin(&timekeeper_seq);
504
505         timekeeping_forward_now(tk);
506
507         xt = tk_xtime(tk);
508         ts_delta.tv_sec = tv->tv_sec - xt.tv_sec;
509         ts_delta.tv_nsec = tv->tv_nsec - xt.tv_nsec;
510
511         tk_set_wall_to_mono(tk, timespec_sub(tk->wall_to_monotonic, ts_delta));
512
513         tk_set_xtime(tk, tv);
514
515         timekeeping_update(tk, TK_CLEAR_NTP | TK_MIRROR);
516
517         write_seqcount_end(&timekeeper_seq);
518         raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
519
520         /* signal hrtimers about time change */
521         clock_was_set();
522
523         return 0;
524 }
525 EXPORT_SYMBOL(do_settimeofday);
526
527 /**
528  * timekeeping_inject_offset - Adds or subtracts from the current time.
529  * @tv:         pointer to the timespec variable containing the offset
530  *
531  * Adds or subtracts an offset value from the current time.
532  */
533 int timekeeping_inject_offset(struct timespec *ts)
534 {
535         struct timekeeper *tk = &timekeeper;
536         unsigned long flags;
537         struct timespec tmp;
538         int ret = 0;
539
540         if ((unsigned long)ts->tv_nsec >= NSEC_PER_SEC)
541                 return -EINVAL;
542
543         raw_spin_lock_irqsave(&timekeeper_lock, flags);
544         write_seqcount_begin(&timekeeper_seq);
545
546         timekeeping_forward_now(tk);
547
548         /* Make sure the proposed value is valid */
549         tmp = timespec_add(tk_xtime(tk),  *ts);
550         if (!timespec_valid_strict(&tmp)) {
551                 ret = -EINVAL;
552                 goto error;
553         }
554
555         tk_xtime_add(tk, ts);
556         tk_set_wall_to_mono(tk, timespec_sub(tk->wall_to_monotonic, *ts));
557
558 error: /* even if we error out, we forwarded the time, so call update */
559         timekeeping_update(tk, TK_CLEAR_NTP | TK_MIRROR);
560
561         write_seqcount_end(&timekeeper_seq);
562         raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
563
564         /* signal hrtimers about time change */
565         clock_was_set();
566
567         return ret;
568 }
569 EXPORT_SYMBOL(timekeeping_inject_offset);
570
571
572 /**
573  * timekeeping_get_tai_offset - Returns current TAI offset from UTC
574  *
575  */
576 s32 timekeeping_get_tai_offset(void)
577 {
578         struct timekeeper *tk = &timekeeper;
579         unsigned int seq;
580         s32 ret;
581
582         do {
583                 seq = read_seqcount_begin(&timekeeper_seq);
584                 ret = tk->tai_offset;
585         } while (read_seqcount_retry(&timekeeper_seq, seq));
586
587         return ret;
588 }
589
590 /**
591  * __timekeeping_set_tai_offset - Lock free worker function
592  *
593  */
594 static void __timekeeping_set_tai_offset(struct timekeeper *tk, s32 tai_offset)
595 {
596         tk->tai_offset = tai_offset;
597         tk->offs_tai = ktime_sub(tk->offs_real, ktime_set(tai_offset, 0));
598 }
599
600 /**
601  * timekeeping_set_tai_offset - Sets the current TAI offset from UTC
602  *
603  */
604 void timekeeping_set_tai_offset(s32 tai_offset)
605 {
606         struct timekeeper *tk = &timekeeper;
607         unsigned long flags;
608
609         raw_spin_lock_irqsave(&timekeeper_lock, flags);
610         write_seqcount_begin(&timekeeper_seq);
611         __timekeeping_set_tai_offset(tk, tai_offset);
612         write_seqcount_end(&timekeeper_seq);
613         raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
614         clock_was_set();
615 }
616
617 /**
618  * change_clocksource - Swaps clocksources if a new one is available
619  *
620  * Accumulates current time interval and initializes new clocksource
621  */
622 static int change_clocksource(void *data)
623 {
624         struct timekeeper *tk = &timekeeper;
625         struct clocksource *new, *old;
626         unsigned long flags;
627
628         new = (struct clocksource *) data;
629
630         raw_spin_lock_irqsave(&timekeeper_lock, flags);
631         write_seqcount_begin(&timekeeper_seq);
632
633         timekeeping_forward_now(tk);
634         /*
635          * If the cs is in module, get a module reference. Succeeds
636          * for built-in code (owner == NULL) as well.
637          */
638         if (try_module_get(new->owner)) {
639                 if (!new->enable || new->enable(new) == 0) {
640                         old = tk->clock;
641                         tk_setup_internals(tk, new);
642                         if (old->disable)
643                                 old->disable(old);
644                         module_put(old->owner);
645                 } else {
646                         module_put(new->owner);
647                 }
648         }
649         timekeeping_update(tk, TK_CLEAR_NTP | TK_MIRROR);
650
651         write_seqcount_end(&timekeeper_seq);
652         raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
653
654         return 0;
655 }
656
657 /**
658  * timekeeping_notify - Install a new clock source
659  * @clock:              pointer to the clock source
660  *
661  * This function is called from clocksource.c after a new, better clock
662  * source has been registered. The caller holds the clocksource_mutex.
663  */
664 int timekeeping_notify(struct clocksource *clock)
665 {
666         struct timekeeper *tk = &timekeeper;
667
668         if (tk->clock == clock)
669                 return 0;
670         stop_machine(change_clocksource, clock, NULL);
671         tick_clock_notify();
672         return tk->clock == clock ? 0 : -1;
673 }
674
675 /**
676  * ktime_get_real - get the real (wall-) time in ktime_t format
677  *
678  * returns the time in ktime_t format
679  */
680 ktime_t ktime_get_real(void)
681 {
682         struct timespec now;
683
684         getnstimeofday(&now);
685
686         return timespec_to_ktime(now);
687 }
688 EXPORT_SYMBOL_GPL(ktime_get_real);
689
690 /**
691  * getrawmonotonic - Returns the raw monotonic time in a timespec
692  * @ts:         pointer to the timespec to be set
693  *
694  * Returns the raw monotonic time (completely un-modified by ntp)
695  */
696 void getrawmonotonic(struct timespec *ts)
697 {
698         struct timekeeper *tk = &timekeeper;
699         unsigned long seq;
700         s64 nsecs;
701
702         do {
703                 seq = read_seqcount_begin(&timekeeper_seq);
704                 nsecs = timekeeping_get_ns_raw(tk);
705                 *ts = tk->raw_time;
706
707         } while (read_seqcount_retry(&timekeeper_seq, seq));
708
709         timespec_add_ns(ts, nsecs);
710 }
711 EXPORT_SYMBOL(getrawmonotonic);
712
713 /**
714  * timekeeping_valid_for_hres - Check if timekeeping is suitable for hres
715  */
716 int timekeeping_valid_for_hres(void)
717 {
718         struct timekeeper *tk = &timekeeper;
719         unsigned long seq;
720         int ret;
721
722         do {
723                 seq = read_seqcount_begin(&timekeeper_seq);
724
725                 ret = tk->clock->flags & CLOCK_SOURCE_VALID_FOR_HRES;
726
727         } while (read_seqcount_retry(&timekeeper_seq, seq));
728
729         return ret;
730 }
731
732 /**
733  * timekeeping_max_deferment - Returns max time the clocksource can be deferred
734  */
735 u64 timekeeping_max_deferment(void)
736 {
737         struct timekeeper *tk = &timekeeper;
738         unsigned long seq;
739         u64 ret;
740
741         do {
742                 seq = read_seqcount_begin(&timekeeper_seq);
743
744                 ret = tk->clock->max_idle_ns;
745
746         } while (read_seqcount_retry(&timekeeper_seq, seq));
747
748         return ret;
749 }
750
751 /**
752  * read_persistent_clock -  Return time from the persistent clock.
753  *
754  * Weak dummy function for arches that do not yet support it.
755  * Reads the time from the battery backed persistent clock.
756  * Returns a timespec with tv_sec=0 and tv_nsec=0 if unsupported.
757  *
758  *  XXX - Do be sure to remove it once all arches implement it.
759  */
760 void __attribute__((weak)) read_persistent_clock(struct timespec *ts)
761 {
762         ts->tv_sec = 0;
763         ts->tv_nsec = 0;
764 }
765
766 /**
767  * read_boot_clock -  Return time of the system start.
768  *
769  * Weak dummy function for arches that do not yet support it.
770  * Function to read the exact time the system has been started.
771  * Returns a timespec with tv_sec=0 and tv_nsec=0 if unsupported.
772  *
773  *  XXX - Do be sure to remove it once all arches implement it.
774  */
775 void __attribute__((weak)) read_boot_clock(struct timespec *ts)
776 {
777         ts->tv_sec = 0;
778         ts->tv_nsec = 0;
779 }
780
781 /*
782  * timekeeping_init - Initializes the clocksource and common timekeeping values
783  */
784 void __init timekeeping_init(void)
785 {
786         struct timekeeper *tk = &timekeeper;
787         struct clocksource *clock;
788         unsigned long flags;
789         struct timespec now, boot, tmp;
790
791         read_persistent_clock(&now);
792
793         if (!timespec_valid_strict(&now)) {
794                 pr_warn("WARNING: Persistent clock returned invalid value!\n"
795                         "         Check your CMOS/BIOS settings.\n");
796                 now.tv_sec = 0;
797                 now.tv_nsec = 0;
798         } else if (now.tv_sec || now.tv_nsec)
799                 persistent_clock_exist = true;
800
801         read_boot_clock(&boot);
802         if (!timespec_valid_strict(&boot)) {
803                 pr_warn("WARNING: Boot clock returned invalid value!\n"
804                         "         Check your CMOS/BIOS settings.\n");
805                 boot.tv_sec = 0;
806                 boot.tv_nsec = 0;
807         }
808
809         raw_spin_lock_irqsave(&timekeeper_lock, flags);
810         write_seqcount_begin(&timekeeper_seq);
811         ntp_init();
812
813         clock = clocksource_default_clock();
814         if (clock->enable)
815                 clock->enable(clock);
816         tk_setup_internals(tk, clock);
817
818         tk_set_xtime(tk, &now);
819         tk->raw_time.tv_sec = 0;
820         tk->raw_time.tv_nsec = 0;
821         if (boot.tv_sec == 0 && boot.tv_nsec == 0)
822                 boot = tk_xtime(tk);
823
824         set_normalized_timespec(&tmp, -boot.tv_sec, -boot.tv_nsec);
825         tk_set_wall_to_mono(tk, tmp);
826
827         tmp.tv_sec = 0;
828         tmp.tv_nsec = 0;
829         tk_set_sleep_time(tk, tmp);
830
831         memcpy(&shadow_timekeeper, &timekeeper, sizeof(timekeeper));
832
833         write_seqcount_end(&timekeeper_seq);
834         raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
835 }
836
837 /* time in seconds when suspend began */
838 static struct timespec timekeeping_suspend_time;
839
840 /**
841  * __timekeeping_inject_sleeptime - Internal function to add sleep interval
842  * @delta: pointer to a timespec delta value
843  *
844  * Takes a timespec offset measuring a suspend interval and properly
845  * adds the sleep offset to the timekeeping variables.
846  */
847 static void __timekeeping_inject_sleeptime(struct timekeeper *tk,
848                                                         struct timespec *delta)
849 {
850         if (!timespec_valid_strict(delta)) {
851                 printk(KERN_WARNING "__timekeeping_inject_sleeptime: Invalid "
852                                         "sleep delta value!\n");
853                 return;
854         }
855         tk_xtime_add(tk, delta);
856         tk_set_wall_to_mono(tk, timespec_sub(tk->wall_to_monotonic, *delta));
857         tk_set_sleep_time(tk, timespec_add(tk->total_sleep_time, *delta));
858         tk_debug_account_sleep_time(delta);
859 }
860
861 /**
862  * timekeeping_inject_sleeptime - Adds suspend interval to timeekeeping values
863  * @delta: pointer to a timespec delta value
864  *
865  * This hook is for architectures that cannot support read_persistent_clock
866  * because their RTC/persistent clock is only accessible when irqs are enabled.
867  *
868  * This function should only be called by rtc_resume(), and allows
869  * a suspend offset to be injected into the timekeeping values.
870  */
871 void timekeeping_inject_sleeptime(struct timespec *delta)
872 {
873         struct timekeeper *tk = &timekeeper;
874         unsigned long flags;
875
876         /*
877          * Make sure we don't set the clock twice, as timekeeping_resume()
878          * already did it
879          */
880         if (has_persistent_clock())
881                 return;
882
883         raw_spin_lock_irqsave(&timekeeper_lock, flags);
884         write_seqcount_begin(&timekeeper_seq);
885
886         timekeeping_forward_now(tk);
887
888         __timekeeping_inject_sleeptime(tk, delta);
889
890         timekeeping_update(tk, TK_CLEAR_NTP | TK_MIRROR);
891
892         write_seqcount_end(&timekeeper_seq);
893         raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
894
895         /* signal hrtimers about time change */
896         clock_was_set();
897 }
898
899 /**
900  * timekeeping_resume - Resumes the generic timekeeping subsystem.
901  *
902  * This is for the generic clocksource timekeeping.
903  * xtime/wall_to_monotonic/jiffies/etc are
904  * still managed by arch specific suspend/resume code.
905  */
906 static void timekeeping_resume(void)
907 {
908         struct timekeeper *tk = &timekeeper;
909         struct clocksource *clock = tk->clock;
910         unsigned long flags;
911         struct timespec ts_new, ts_delta;
912         cycle_t cycle_now, cycle_delta;
913         bool suspendtime_found = false;
914
915         read_persistent_clock(&ts_new);
916
917         clockevents_resume();
918         clocksource_resume();
919
920         raw_spin_lock_irqsave(&timekeeper_lock, flags);
921         write_seqcount_begin(&timekeeper_seq);
922
923         /*
924          * After system resumes, we need to calculate the suspended time and
925          * compensate it for the OS time. There are 3 sources that could be
926          * used: Nonstop clocksource during suspend, persistent clock and rtc
927          * device.
928          *
929          * One specific platform may have 1 or 2 or all of them, and the
930          * preference will be:
931          *      suspend-nonstop clocksource -> persistent clock -> rtc
932          * The less preferred source will only be tried if there is no better
933          * usable source. The rtc part is handled separately in rtc core code.
934          */
935         cycle_now = clock->read(clock);
936         if ((clock->flags & CLOCK_SOURCE_SUSPEND_NONSTOP) &&
937                 cycle_now > clock->cycle_last) {
938                 u64 num, max = ULLONG_MAX;
939                 u32 mult = clock->mult;
940                 u32 shift = clock->shift;
941                 s64 nsec = 0;
942
943                 cycle_delta = (cycle_now - clock->cycle_last) & clock->mask;
944
945                 /*
946                  * "cycle_delta * mutl" may cause 64 bits overflow, if the
947                  * suspended time is too long. In that case we need do the
948                  * 64 bits math carefully
949                  */
950                 do_div(max, mult);
951                 if (cycle_delta > max) {
952                         num = div64_u64(cycle_delta, max);
953                         nsec = (((u64) max * mult) >> shift) * num;
954                         cycle_delta -= num * max;
955                 }
956                 nsec += ((u64) cycle_delta * mult) >> shift;
957
958                 ts_delta = ns_to_timespec(nsec);
959                 suspendtime_found = true;
960         } else if (timespec_compare(&ts_new, &timekeeping_suspend_time) > 0) {
961                 ts_delta = timespec_sub(ts_new, timekeeping_suspend_time);
962                 suspendtime_found = true;
963         }
964
965         if (suspendtime_found)
966                 __timekeeping_inject_sleeptime(tk, &ts_delta);
967
968         /* Re-base the last cycle value */
969         tk->cycle_last = clock->cycle_last = cycle_now;
970         tk->ntp_error = 0;
971         timekeeping_suspended = 0;
972         timekeeping_update(tk, TK_MIRROR);
973         write_seqcount_end(&timekeeper_seq);
974         raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
975
976         touch_softlockup_watchdog();
977
978         clockevents_notify(CLOCK_EVT_NOTIFY_RESUME, NULL);
979
980         /* Resume hrtimers */
981         hrtimers_resume();
982 }
983
984 static int timekeeping_suspend(void)
985 {
986         struct timekeeper *tk = &timekeeper;
987         unsigned long flags;
988         struct timespec         delta, delta_delta;
989         static struct timespec  old_delta;
990
991         read_persistent_clock(&timekeeping_suspend_time);
992
993         raw_spin_lock_irqsave(&timekeeper_lock, flags);
994         write_seqcount_begin(&timekeeper_seq);
995         timekeeping_forward_now(tk);
996         timekeeping_suspended = 1;
997
998         /*
999          * To avoid drift caused by repeated suspend/resumes,
1000          * which each can add ~1 second drift error,
1001          * try to compensate so the difference in system time
1002          * and persistent_clock time stays close to constant.
1003          */
1004         delta = timespec_sub(tk_xtime(tk), timekeeping_suspend_time);
1005         delta_delta = timespec_sub(delta, old_delta);
1006         if (abs(delta_delta.tv_sec)  >= 2) {
1007                 /*
1008                  * if delta_delta is too large, assume time correction
1009                  * has occured and set old_delta to the current delta.
1010                  */
1011                 old_delta = delta;
1012         } else {
1013                 /* Otherwise try to adjust old_system to compensate */
1014                 timekeeping_suspend_time =
1015                         timespec_add(timekeeping_suspend_time, delta_delta);
1016         }
1017         write_seqcount_end(&timekeeper_seq);
1018         raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
1019
1020         clockevents_notify(CLOCK_EVT_NOTIFY_SUSPEND, NULL);
1021         clocksource_suspend();
1022         clockevents_suspend();
1023
1024         return 0;
1025 }
1026
1027 /* sysfs resume/suspend bits for timekeeping */
1028 static struct syscore_ops timekeeping_syscore_ops = {
1029         .resume         = timekeeping_resume,
1030         .suspend        = timekeeping_suspend,
1031 };
1032
1033 static int __init timekeeping_init_ops(void)
1034 {
1035         register_syscore_ops(&timekeeping_syscore_ops);
1036         return 0;
1037 }
1038
1039 device_initcall(timekeeping_init_ops);
1040
1041 /*
1042  * If the error is already larger, we look ahead even further
1043  * to compensate for late or lost adjustments.
1044  */
1045 static __always_inline int timekeeping_bigadjust(struct timekeeper *tk,
1046                                                  s64 error, s64 *interval,
1047                                                  s64 *offset)
1048 {
1049         s64 tick_error, i;
1050         u32 look_ahead, adj;
1051         s32 error2, mult;
1052
1053         /*
1054          * Use the current error value to determine how much to look ahead.
1055          * The larger the error the slower we adjust for it to avoid problems
1056          * with losing too many ticks, otherwise we would overadjust and
1057          * produce an even larger error.  The smaller the adjustment the
1058          * faster we try to adjust for it, as lost ticks can do less harm
1059          * here.  This is tuned so that an error of about 1 msec is adjusted
1060          * within about 1 sec (or 2^20 nsec in 2^SHIFT_HZ ticks).
1061          */
1062         error2 = tk->ntp_error >> (NTP_SCALE_SHIFT + 22 - 2 * SHIFT_HZ);
1063         error2 = abs(error2);
1064         for (look_ahead = 0; error2 > 0; look_ahead++)
1065                 error2 >>= 2;
1066
1067         /*
1068          * Now calculate the error in (1 << look_ahead) ticks, but first
1069          * remove the single look ahead already included in the error.
1070          */
1071         tick_error = ntp_tick_length() >> (tk->ntp_error_shift + 1);
1072         tick_error -= tk->xtime_interval >> 1;
1073         error = ((error - tick_error) >> look_ahead) + tick_error;
1074
1075         /* Finally calculate the adjustment shift value.  */
1076         i = *interval;
1077         mult = 1;
1078         if (error < 0) {
1079                 error = -error;
1080                 *interval = -*interval;
1081                 *offset = -*offset;
1082                 mult = -1;
1083         }
1084         for (adj = 0; error > i; adj++)
1085                 error >>= 1;
1086
1087         *interval <<= adj;
1088         *offset <<= adj;
1089         return mult << adj;
1090 }
1091
1092 /*
1093  * Adjust the multiplier to reduce the error value,
1094  * this is optimized for the most common adjustments of -1,0,1,
1095  * for other values we can do a bit more work.
1096  */
1097 static void timekeeping_adjust(struct timekeeper *tk, s64 offset)
1098 {
1099         s64 error, interval = tk->cycle_interval;
1100         int adj;
1101
1102         /*
1103          * The point of this is to check if the error is greater than half
1104          * an interval.
1105          *
1106          * First we shift it down from NTP_SHIFT to clocksource->shifted nsecs.
1107          *
1108          * Note we subtract one in the shift, so that error is really error*2.
1109          * This "saves" dividing(shifting) interval twice, but keeps the
1110          * (error > interval) comparison as still measuring if error is
1111          * larger than half an interval.
1112          *
1113          * Note: It does not "save" on aggravation when reading the code.
1114          */
1115         error = tk->ntp_error >> (tk->ntp_error_shift - 1);
1116         if (error > interval) {
1117                 /*
1118                  * We now divide error by 4(via shift), which checks if
1119                  * the error is greater than twice the interval.
1120                  * If it is greater, we need a bigadjust, if its smaller,
1121                  * we can adjust by 1.
1122                  */
1123                 error >>= 2;
1124                 /*
1125                  * XXX - In update_wall_time, we round up to the next
1126                  * nanosecond, and store the amount rounded up into
1127                  * the error. This causes the likely below to be unlikely.
1128                  *
1129                  * The proper fix is to avoid rounding up by using
1130                  * the high precision tk->xtime_nsec instead of
1131                  * xtime.tv_nsec everywhere. Fixing this will take some
1132                  * time.
1133                  */
1134                 if (likely(error <= interval))
1135                         adj = 1;
1136                 else
1137                         adj = timekeeping_bigadjust(tk, error, &interval, &offset);
1138         } else {
1139                 if (error < -interval) {
1140                         /* See comment above, this is just switched for the negative */
1141                         error >>= 2;
1142                         if (likely(error >= -interval)) {
1143                                 adj = -1;
1144                                 interval = -interval;
1145                                 offset = -offset;
1146                         } else {
1147                                 adj = timekeeping_bigadjust(tk, error, &interval, &offset);
1148                         }
1149                 } else {
1150                         goto out_adjust;
1151                 }
1152         }
1153
1154         if (unlikely(tk->clock->maxadj &&
1155                 (tk->mult + adj > tk->clock->mult + tk->clock->maxadj))) {
1156                 printk_once(KERN_WARNING
1157                         "Adjusting %s more than 11%% (%ld vs %ld)\n",
1158                         tk->clock->name, (long)tk->mult + adj,
1159                         (long)tk->clock->mult + tk->clock->maxadj);
1160         }
1161         /*
1162          * So the following can be confusing.
1163          *
1164          * To keep things simple, lets assume adj == 1 for now.
1165          *
1166          * When adj != 1, remember that the interval and offset values
1167          * have been appropriately scaled so the math is the same.
1168          *
1169          * The basic idea here is that we're increasing the multiplier
1170          * by one, this causes the xtime_interval to be incremented by
1171          * one cycle_interval. This is because:
1172          *      xtime_interval = cycle_interval * mult
1173          * So if mult is being incremented by one:
1174          *      xtime_interval = cycle_interval * (mult + 1)
1175          * Its the same as:
1176          *      xtime_interval = (cycle_interval * mult) + cycle_interval
1177          * Which can be shortened to:
1178          *      xtime_interval += cycle_interval
1179          *
1180          * So offset stores the non-accumulated cycles. Thus the current
1181          * time (in shifted nanoseconds) is:
1182          *      now = (offset * adj) + xtime_nsec
1183          * Now, even though we're adjusting the clock frequency, we have
1184          * to keep time consistent. In other words, we can't jump back
1185          * in time, and we also want to avoid jumping forward in time.
1186          *
1187          * So given the same offset value, we need the time to be the same
1188          * both before and after the freq adjustment.
1189          *      now = (offset * adj_1) + xtime_nsec_1
1190          *      now = (offset * adj_2) + xtime_nsec_2
1191          * So:
1192          *      (offset * adj_1) + xtime_nsec_1 =
1193          *              (offset * adj_2) + xtime_nsec_2
1194          * And we know:
1195          *      adj_2 = adj_1 + 1
1196          * So:
1197          *      (offset * adj_1) + xtime_nsec_1 =
1198          *              (offset * (adj_1+1)) + xtime_nsec_2
1199          *      (offset * adj_1) + xtime_nsec_1 =
1200          *              (offset * adj_1) + offset + xtime_nsec_2
1201          * Canceling the sides:
1202          *      xtime_nsec_1 = offset + xtime_nsec_2
1203          * Which gives us:
1204          *      xtime_nsec_2 = xtime_nsec_1 - offset
1205          * Which simplfies to:
1206          *      xtime_nsec -= offset
1207          *
1208          * XXX - TODO: Doc ntp_error calculation.
1209          */
1210         tk->mult += adj;
1211         tk->xtime_interval += interval;
1212         tk->xtime_nsec -= offset;
1213         tk->ntp_error -= (interval - offset) << tk->ntp_error_shift;
1214
1215 out_adjust:
1216         /*
1217          * It may be possible that when we entered this function, xtime_nsec
1218          * was very small.  Further, if we're slightly speeding the clocksource
1219          * in the code above, its possible the required corrective factor to
1220          * xtime_nsec could cause it to underflow.
1221          *
1222          * Now, since we already accumulated the second, cannot simply roll
1223          * the accumulated second back, since the NTP subsystem has been
1224          * notified via second_overflow. So instead we push xtime_nsec forward
1225          * by the amount we underflowed, and add that amount into the error.
1226          *
1227          * We'll correct this error next time through this function, when
1228          * xtime_nsec is not as small.
1229          */
1230         if (unlikely((s64)tk->xtime_nsec < 0)) {
1231                 s64 neg = -(s64)tk->xtime_nsec;
1232                 tk->xtime_nsec = 0;
1233                 tk->ntp_error += neg << tk->ntp_error_shift;
1234         }
1235
1236 }
1237
1238 /**
1239  * accumulate_nsecs_to_secs - Accumulates nsecs into secs
1240  *
1241  * Helper function that accumulates a the nsecs greater then a second
1242  * from the xtime_nsec field to the xtime_secs field.
1243  * It also calls into the NTP code to handle leapsecond processing.
1244  *
1245  */
1246 static inline void accumulate_nsecs_to_secs(struct timekeeper *tk)
1247 {
1248         u64 nsecps = (u64)NSEC_PER_SEC << tk->shift;
1249
1250         while (tk->xtime_nsec >= nsecps) {
1251                 int leap;
1252
1253                 tk->xtime_nsec -= nsecps;
1254                 tk->xtime_sec++;
1255
1256                 /* Figure out if its a leap sec and apply if needed */
1257                 leap = second_overflow(tk->xtime_sec);
1258                 if (unlikely(leap)) {
1259                         struct timespec ts;
1260
1261                         tk->xtime_sec += leap;
1262
1263                         ts.tv_sec = leap;
1264                         ts.tv_nsec = 0;
1265                         tk_set_wall_to_mono(tk,
1266                                 timespec_sub(tk->wall_to_monotonic, ts));
1267
1268                         __timekeeping_set_tai_offset(tk, tk->tai_offset - leap);
1269
1270                         clock_was_set_delayed();
1271                 }
1272         }
1273 }
1274
1275 /**
1276  * logarithmic_accumulation - shifted accumulation of cycles
1277  *
1278  * This functions accumulates a shifted interval of cycles into
1279  * into a shifted interval nanoseconds. Allows for O(log) accumulation
1280  * loop.
1281  *
1282  * Returns the unconsumed cycles.
1283  */
1284 static cycle_t logarithmic_accumulation(struct timekeeper *tk, cycle_t offset,
1285                                                 u32 shift)
1286 {
1287         cycle_t interval = tk->cycle_interval << shift;
1288         u64 raw_nsecs;
1289
1290         /* If the offset is smaller then a shifted interval, do nothing */
1291         if (offset < interval)
1292                 return offset;
1293
1294         /* Accumulate one shifted interval */
1295         offset -= interval;
1296         tk->cycle_last += interval;
1297
1298         tk->xtime_nsec += tk->xtime_interval << shift;
1299         accumulate_nsecs_to_secs(tk);
1300
1301         /* Accumulate raw time */
1302         raw_nsecs = (u64)tk->raw_interval << shift;
1303         raw_nsecs += tk->raw_time.tv_nsec;
1304         if (raw_nsecs >= NSEC_PER_SEC) {
1305                 u64 raw_secs = raw_nsecs;
1306                 raw_nsecs = do_div(raw_secs, NSEC_PER_SEC);
1307                 tk->raw_time.tv_sec += raw_secs;
1308         }
1309         tk->raw_time.tv_nsec = raw_nsecs;
1310
1311         /* Accumulate error between NTP and clock interval */
1312         tk->ntp_error += ntp_tick_length() << shift;
1313         tk->ntp_error -= (tk->xtime_interval + tk->xtime_remainder) <<
1314                                                 (tk->ntp_error_shift + shift);
1315
1316         return offset;
1317 }
1318
1319 #ifdef CONFIG_GENERIC_TIME_VSYSCALL_OLD
1320 static inline void old_vsyscall_fixup(struct timekeeper *tk)
1321 {
1322         s64 remainder;
1323
1324         /*
1325         * Store only full nanoseconds into xtime_nsec after rounding
1326         * it up and add the remainder to the error difference.
1327         * XXX - This is necessary to avoid small 1ns inconsistnecies caused
1328         * by truncating the remainder in vsyscalls. However, it causes
1329         * additional work to be done in timekeeping_adjust(). Once
1330         * the vsyscall implementations are converted to use xtime_nsec
1331         * (shifted nanoseconds), and CONFIG_GENERIC_TIME_VSYSCALL_OLD
1332         * users are removed, this can be killed.
1333         */
1334         remainder = tk->xtime_nsec & ((1ULL << tk->shift) - 1);
1335         tk->xtime_nsec -= remainder;
1336         tk->xtime_nsec += 1ULL << tk->shift;
1337         tk->ntp_error += remainder << tk->ntp_error_shift;
1338
1339 }
1340 #else
1341 #define old_vsyscall_fixup(tk)
1342 #endif
1343
1344
1345
1346 /**
1347  * update_wall_time - Uses the current clocksource to increment the wall time
1348  *
1349  */
1350 static void update_wall_time(void)
1351 {
1352         struct clocksource *clock;
1353         struct timekeeper *real_tk = &timekeeper;
1354         struct timekeeper *tk = &shadow_timekeeper;
1355         cycle_t offset;
1356         int shift = 0, maxshift;
1357         unsigned long flags;
1358
1359         raw_spin_lock_irqsave(&timekeeper_lock, flags);
1360
1361         /* Make sure we're fully resumed: */
1362         if (unlikely(timekeeping_suspended))
1363                 goto out;
1364
1365         clock = real_tk->clock;
1366
1367 #ifdef CONFIG_ARCH_USES_GETTIMEOFFSET
1368         offset = real_tk->cycle_interval;
1369 #else
1370         offset = (clock->read(clock) - clock->cycle_last) & clock->mask;
1371 #endif
1372
1373         /* Check if there's really nothing to do */
1374         if (offset < real_tk->cycle_interval)
1375                 goto out;
1376
1377         /*
1378          * With NO_HZ we may have to accumulate many cycle_intervals
1379          * (think "ticks") worth of time at once. To do this efficiently,
1380          * we calculate the largest doubling multiple of cycle_intervals
1381          * that is smaller than the offset.  We then accumulate that
1382          * chunk in one go, and then try to consume the next smaller
1383          * doubled multiple.
1384          */
1385         shift = ilog2(offset) - ilog2(tk->cycle_interval);
1386         shift = max(0, shift);
1387         /* Bound shift to one less than what overflows tick_length */
1388         maxshift = (64 - (ilog2(ntp_tick_length())+1)) - 1;
1389         shift = min(shift, maxshift);
1390         while (offset >= tk->cycle_interval) {
1391                 offset = logarithmic_accumulation(tk, offset, shift);
1392                 if (offset < tk->cycle_interval<<shift)
1393                         shift--;
1394         }
1395
1396         /* correct the clock when NTP error is too big */
1397         timekeeping_adjust(tk, offset);
1398
1399         /*
1400          * XXX This can be killed once everyone converts
1401          * to the new update_vsyscall.
1402          */
1403         old_vsyscall_fixup(tk);
1404
1405         /*
1406          * Finally, make sure that after the rounding
1407          * xtime_nsec isn't larger than NSEC_PER_SEC
1408          */
1409         accumulate_nsecs_to_secs(tk);
1410
1411         write_seqcount_begin(&timekeeper_seq);
1412         /* Update clock->cycle_last with the new value */
1413         clock->cycle_last = tk->cycle_last;
1414         /*
1415          * Update the real timekeeper.
1416          *
1417          * We could avoid this memcpy by switching pointers, but that
1418          * requires changes to all other timekeeper usage sites as
1419          * well, i.e. move the timekeeper pointer getter into the
1420          * spinlocked/seqcount protected sections. And we trade this
1421          * memcpy under the timekeeper_seq against one before we start
1422          * updating.
1423          */
1424         memcpy(real_tk, tk, sizeof(*tk));
1425         timekeeping_update(real_tk, 0);
1426         write_seqcount_end(&timekeeper_seq);
1427 out:
1428         raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
1429 }
1430
1431 /**
1432  * getboottime - Return the real time of system boot.
1433  * @ts:         pointer to the timespec to be set
1434  *
1435  * Returns the wall-time of boot in a timespec.
1436  *
1437  * This is based on the wall_to_monotonic offset and the total suspend
1438  * time. Calls to settimeofday will affect the value returned (which
1439  * basically means that however wrong your real time clock is at boot time,
1440  * you get the right time here).
1441  */
1442 void getboottime(struct timespec *ts)
1443 {
1444         struct timekeeper *tk = &timekeeper;
1445         struct timespec boottime = {
1446                 .tv_sec = tk->wall_to_monotonic.tv_sec +
1447                                 tk->total_sleep_time.tv_sec,
1448                 .tv_nsec = tk->wall_to_monotonic.tv_nsec +
1449                                 tk->total_sleep_time.tv_nsec
1450         };
1451
1452         set_normalized_timespec(ts, -boottime.tv_sec, -boottime.tv_nsec);
1453 }
1454 EXPORT_SYMBOL_GPL(getboottime);
1455
1456 /**
1457  * get_monotonic_boottime - Returns monotonic time since boot
1458  * @ts:         pointer to the timespec to be set
1459  *
1460  * Returns the monotonic time since boot in a timespec.
1461  *
1462  * This is similar to CLOCK_MONTONIC/ktime_get_ts, but also
1463  * includes the time spent in suspend.
1464  */
1465 void get_monotonic_boottime(struct timespec *ts)
1466 {
1467         struct timekeeper *tk = &timekeeper;
1468         struct timespec tomono, sleep;
1469         s64 nsec;
1470         unsigned int seq;
1471
1472         WARN_ON(timekeeping_suspended);
1473
1474         do {
1475                 seq = read_seqcount_begin(&timekeeper_seq);
1476                 ts->tv_sec = tk->xtime_sec;
1477                 nsec = timekeeping_get_ns(tk);
1478                 tomono = tk->wall_to_monotonic;
1479                 sleep = tk->total_sleep_time;
1480
1481         } while (read_seqcount_retry(&timekeeper_seq, seq));
1482
1483         ts->tv_sec += tomono.tv_sec + sleep.tv_sec;
1484         ts->tv_nsec = 0;
1485         timespec_add_ns(ts, nsec + tomono.tv_nsec + sleep.tv_nsec);
1486 }
1487 EXPORT_SYMBOL_GPL(get_monotonic_boottime);
1488
1489 /**
1490  * ktime_get_boottime - Returns monotonic time since boot in a ktime
1491  *
1492  * Returns the monotonic time since boot in a ktime
1493  *
1494  * This is similar to CLOCK_MONTONIC/ktime_get, but also
1495  * includes the time spent in suspend.
1496  */
1497 ktime_t ktime_get_boottime(void)
1498 {
1499         struct timespec ts;
1500
1501         get_monotonic_boottime(&ts);
1502         return timespec_to_ktime(ts);
1503 }
1504 EXPORT_SYMBOL_GPL(ktime_get_boottime);
1505
1506 /**
1507  * monotonic_to_bootbased - Convert the monotonic time to boot based.
1508  * @ts:         pointer to the timespec to be converted
1509  */
1510 void monotonic_to_bootbased(struct timespec *ts)
1511 {
1512         struct timekeeper *tk = &timekeeper;
1513
1514         *ts = timespec_add(*ts, tk->total_sleep_time);
1515 }
1516 EXPORT_SYMBOL_GPL(monotonic_to_bootbased);
1517
1518 unsigned long get_seconds(void)
1519 {
1520         struct timekeeper *tk = &timekeeper;
1521
1522         return tk->xtime_sec;
1523 }
1524 EXPORT_SYMBOL(get_seconds);
1525
1526 struct timespec __current_kernel_time(void)
1527 {
1528         struct timekeeper *tk = &timekeeper;
1529
1530         return tk_xtime(tk);
1531 }
1532
1533 struct timespec current_kernel_time(void)
1534 {
1535         struct timekeeper *tk = &timekeeper;
1536         struct timespec now;
1537         unsigned long seq;
1538
1539         do {
1540                 seq = read_seqcount_begin(&timekeeper_seq);
1541
1542                 now = tk_xtime(tk);
1543         } while (read_seqcount_retry(&timekeeper_seq, seq));
1544
1545         return now;
1546 }
1547 EXPORT_SYMBOL(current_kernel_time);
1548
1549 struct timespec get_monotonic_coarse(void)
1550 {
1551         struct timekeeper *tk = &timekeeper;
1552         struct timespec now, mono;
1553         unsigned long seq;
1554
1555         do {
1556                 seq = read_seqcount_begin(&timekeeper_seq);
1557
1558                 now = tk_xtime(tk);
1559                 mono = tk->wall_to_monotonic;
1560         } while (read_seqcount_retry(&timekeeper_seq, seq));
1561
1562         set_normalized_timespec(&now, now.tv_sec + mono.tv_sec,
1563                                 now.tv_nsec + mono.tv_nsec);
1564         return now;
1565 }
1566
1567 /*
1568  * Must hold jiffies_lock
1569  */
1570 void do_timer(unsigned long ticks)
1571 {
1572         jiffies_64 += ticks;
1573         update_wall_time();
1574         calc_global_load(ticks);
1575 }
1576
1577 /**
1578  * get_xtime_and_monotonic_and_sleep_offset() - get xtime, wall_to_monotonic,
1579  *    and sleep offsets.
1580  * @xtim:       pointer to timespec to be set with xtime
1581  * @wtom:       pointer to timespec to be set with wall_to_monotonic
1582  * @sleep:      pointer to timespec to be set with time in suspend
1583  */
1584 void get_xtime_and_monotonic_and_sleep_offset(struct timespec *xtim,
1585                                 struct timespec *wtom, struct timespec *sleep)
1586 {
1587         struct timekeeper *tk = &timekeeper;
1588         unsigned long seq;
1589
1590         do {
1591                 seq = read_seqcount_begin(&timekeeper_seq);
1592                 *xtim = tk_xtime(tk);
1593                 *wtom = tk->wall_to_monotonic;
1594                 *sleep = tk->total_sleep_time;
1595         } while (read_seqcount_retry(&timekeeper_seq, seq));
1596 }
1597
1598 #ifdef CONFIG_HIGH_RES_TIMERS
1599 /**
1600  * ktime_get_update_offsets - hrtimer helper
1601  * @offs_real:  pointer to storage for monotonic -> realtime offset
1602  * @offs_boot:  pointer to storage for monotonic -> boottime offset
1603  *
1604  * Returns current monotonic time and updates the offsets
1605  * Called from hrtimer_interupt() or retrigger_next_event()
1606  */
1607 ktime_t ktime_get_update_offsets(ktime_t *offs_real, ktime_t *offs_boot,
1608                                                         ktime_t *offs_tai)
1609 {
1610         struct timekeeper *tk = &timekeeper;
1611         ktime_t now;
1612         unsigned int seq;
1613         u64 secs, nsecs;
1614
1615         do {
1616                 seq = read_seqcount_begin(&timekeeper_seq);
1617
1618                 secs = tk->xtime_sec;
1619                 nsecs = timekeeping_get_ns(tk);
1620
1621                 *offs_real = tk->offs_real;
1622                 *offs_boot = tk->offs_boot;
1623                 *offs_tai = tk->offs_tai;
1624         } while (read_seqcount_retry(&timekeeper_seq, seq));
1625
1626         now = ktime_add_ns(ktime_set(secs, 0), nsecs);
1627         now = ktime_sub(now, *offs_real);
1628         return now;
1629 }
1630 #endif
1631
1632 /**
1633  * ktime_get_monotonic_offset() - get wall_to_monotonic in ktime_t format
1634  */
1635 ktime_t ktime_get_monotonic_offset(void)
1636 {
1637         struct timekeeper *tk = &timekeeper;
1638         unsigned long seq;
1639         struct timespec wtom;
1640
1641         do {
1642                 seq = read_seqcount_begin(&timekeeper_seq);
1643                 wtom = tk->wall_to_monotonic;
1644         } while (read_seqcount_retry(&timekeeper_seq, seq));
1645
1646         return timespec_to_ktime(wtom);
1647 }
1648 EXPORT_SYMBOL_GPL(ktime_get_monotonic_offset);
1649
1650 /**
1651  * do_adjtimex() - Accessor function to NTP __do_adjtimex function
1652  */
1653 int do_adjtimex(struct timex *txc)
1654 {
1655         struct timekeeper *tk = &timekeeper;
1656         unsigned long flags;
1657         struct timespec ts;
1658         s32 orig_tai, tai;
1659         int ret;
1660
1661         /* Validate the data before disabling interrupts */
1662         ret = ntp_validate_timex(txc);
1663         if (ret)
1664                 return ret;
1665
1666         if (txc->modes & ADJ_SETOFFSET) {
1667                 struct timespec delta;
1668                 delta.tv_sec  = txc->time.tv_sec;
1669                 delta.tv_nsec = txc->time.tv_usec;
1670                 if (!(txc->modes & ADJ_NANO))
1671                         delta.tv_nsec *= 1000;
1672                 ret = timekeeping_inject_offset(&delta);
1673                 if (ret)
1674                         return ret;
1675         }
1676
1677         getnstimeofday(&ts);
1678
1679         raw_spin_lock_irqsave(&timekeeper_lock, flags);
1680         write_seqcount_begin(&timekeeper_seq);
1681
1682         orig_tai = tai = tk->tai_offset;
1683         ret = __do_adjtimex(txc, &ts, &tai);
1684
1685         if (tai != orig_tai) {
1686                 __timekeeping_set_tai_offset(tk, tai);
1687                 clock_was_set_delayed();
1688         }
1689         write_seqcount_end(&timekeeper_seq);
1690         raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
1691
1692         return ret;
1693 }
1694
1695 #ifdef CONFIG_NTP_PPS
1696 /**
1697  * hardpps() - Accessor function to NTP __hardpps function
1698  */
1699 void hardpps(const struct timespec *phase_ts, const struct timespec *raw_ts)
1700 {
1701         unsigned long flags;
1702
1703         raw_spin_lock_irqsave(&timekeeper_lock, flags);
1704         write_seqcount_begin(&timekeeper_seq);
1705
1706         __hardpps(phase_ts, raw_ts);
1707
1708         write_seqcount_end(&timekeeper_seq);
1709         raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
1710 }
1711 EXPORT_SYMBOL(hardpps);
1712 #endif
1713
1714 /**
1715  * xtime_update() - advances the timekeeping infrastructure
1716  * @ticks:      number of ticks, that have elapsed since the last call.
1717  *
1718  * Must be called with interrupts disabled.
1719  */
1720 void xtime_update(unsigned long ticks)
1721 {
1722         write_seqlock(&jiffies_lock);
1723         do_timer(ticks);
1724         write_sequnlock(&jiffies_lock);
1725 }