Merge remote-tracking branch 'stable/linux-3.0.y' into develop-3.0-jb
[firefly-linux-kernel-4.4.55.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/module.h>
12 #include <linux/interrupt.h>
13 #include <linux/percpu.h>
14 #include <linux/init.h>
15 #include <linux/mm.h>
16 #include <linux/sched.h>
17 #include <linux/syscore_ops.h>
18 #include <linux/clocksource.h>
19 #include <linux/jiffies.h>
20 #include <linux/time.h>
21 #include <linux/tick.h>
22 #include <linux/stop_machine.h>
23
24 /* Structure holding internal timekeeping values. */
25 struct timekeeper {
26         /* Current clocksource used for timekeeping. */
27         struct clocksource *clock;
28         /* The shift value of the current clocksource. */
29         int     shift;
30
31         /* Number of clock cycles in one NTP interval. */
32         cycle_t cycle_interval;
33         /* Number of clock shifted nano seconds in one NTP interval. */
34         u64     xtime_interval;
35         /* shifted nano seconds left over when rounding cycle_interval */
36         s64     xtime_remainder;
37         /* Raw nano seconds accumulated per NTP interval. */
38         u32     raw_interval;
39
40         /* Clock shifted nano seconds remainder not stored in xtime.tv_nsec. */
41         u64     xtime_nsec;
42         /* Difference between accumulated time and NTP time in ntp
43          * shifted nano seconds. */
44         s64     ntp_error;
45         /* Shift conversion between clock shifted nano seconds and
46          * ntp shifted nano seconds. */
47         int     ntp_error_shift;
48         /* NTP adjusted clock multiplier */
49         u32     mult;
50 };
51
52 static struct timekeeper timekeeper;
53
54 /**
55  * timekeeper_setup_internals - Set up internals to use clocksource clock.
56  *
57  * @clock:              Pointer to clocksource.
58  *
59  * Calculates a fixed cycle/nsec interval for a given clocksource/adjustment
60  * pair and interval request.
61  *
62  * Unless you're the timekeeping code, you should not be using this!
63  */
64 static void timekeeper_setup_internals(struct clocksource *clock)
65 {
66         cycle_t interval;
67         u64 tmp, ntpinterval;
68
69         timekeeper.clock = clock;
70         clock->cycle_last = clock->read(clock);
71
72         /* Do the ns -> cycle conversion first, using original mult */
73         tmp = NTP_INTERVAL_LENGTH;
74         tmp <<= clock->shift;
75         ntpinterval = tmp;
76         tmp += clock->mult/2;
77         do_div(tmp, clock->mult);
78         if (tmp == 0)
79                 tmp = 1;
80
81         interval = (cycle_t) tmp;
82         timekeeper.cycle_interval = interval;
83
84         /* Go back from cycles -> shifted ns */
85         timekeeper.xtime_interval = (u64) interval * clock->mult;
86         timekeeper.xtime_remainder = ntpinterval - timekeeper.xtime_interval;
87         timekeeper.raw_interval =
88                 ((u64) interval * clock->mult) >> clock->shift;
89
90         timekeeper.xtime_nsec = 0;
91         timekeeper.shift = clock->shift;
92
93         timekeeper.ntp_error = 0;
94         timekeeper.ntp_error_shift = NTP_SCALE_SHIFT - clock->shift;
95
96         /*
97          * The timekeeper keeps its own mult values for the currently
98          * active clocksource. These value will be adjusted via NTP
99          * to counteract clock drifting.
100          */
101         timekeeper.mult = clock->mult;
102 }
103
104 /* Timekeeper helper functions. */
105 static inline s64 timekeeping_get_ns(void)
106 {
107         cycle_t cycle_now, cycle_delta;
108         struct clocksource *clock;
109
110         /* read clocksource: */
111         clock = timekeeper.clock;
112         cycle_now = clock->read(clock);
113
114         /* calculate the delta since the last update_wall_time: */
115         cycle_delta = (cycle_now - clock->cycle_last) & clock->mask;
116
117         /* return delta convert to nanoseconds using ntp adjusted mult. */
118         return clocksource_cyc2ns(cycle_delta, timekeeper.mult,
119                                   timekeeper.shift);
120 }
121
122 static inline s64 timekeeping_get_ns_raw(void)
123 {
124         cycle_t cycle_now, cycle_delta;
125         struct clocksource *clock;
126
127         /* read clocksource: */
128         clock = timekeeper.clock;
129         cycle_now = clock->read(clock);
130
131         /* calculate the delta since the last update_wall_time: */
132         cycle_delta = (cycle_now - clock->cycle_last) & clock->mask;
133
134         /* return delta convert to nanoseconds using ntp adjusted mult. */
135         return clocksource_cyc2ns(cycle_delta, clock->mult, clock->shift);
136 }
137
138 /*
139  * This read-write spinlock protects us from races in SMP while
140  * playing with xtime.
141  */
142 __cacheline_aligned_in_smp DEFINE_SEQLOCK(xtime_lock);
143
144
145 /*
146  * The current time
147  * wall_to_monotonic is what we need to add to xtime (or xtime corrected
148  * for sub jiffie times) to get to monotonic time.  Monotonic is pegged
149  * at zero at system boot time, so wall_to_monotonic will be negative,
150  * however, we will ALWAYS keep the tv_nsec part positive so we can use
151  * the usual normalization.
152  *
153  * wall_to_monotonic is moved after resume from suspend for the monotonic
154  * time not to jump. We need to add total_sleep_time to wall_to_monotonic
155  * to get the real boot based time offset.
156  *
157  * - wall_to_monotonic is no longer the boot time, getboottime must be
158  * used instead.
159  */
160 static struct timespec xtime __attribute__ ((aligned (16)));
161 static struct timespec wall_to_monotonic __attribute__ ((aligned (16)));
162 static struct timespec total_sleep_time;
163
164 /* Offset clock monotonic -> clock realtime */
165 static ktime_t offs_real;
166
167 /* Offset clock monotonic -> clock boottime */
168 static ktime_t offs_boot;
169
170 /*
171  * The raw monotonic time for the CLOCK_MONOTONIC_RAW posix clock.
172  */
173 static struct timespec raw_time;
174
175 /* must hold write on xtime_lock */
176 static void update_rt_offset(void)
177 {
178         struct timespec tmp, *wtm = &wall_to_monotonic;
179
180         set_normalized_timespec(&tmp, -wtm->tv_sec, -wtm->tv_nsec);
181         offs_real = timespec_to_ktime(tmp);
182 }
183
184 /* must hold write on xtime_lock */
185 static void timekeeping_update(bool clearntp)
186 {
187         if (clearntp) {
188                 timekeeper.ntp_error = 0;
189                 ntp_clear();
190         }
191         update_rt_offset();
192         update_vsyscall(&xtime, &wall_to_monotonic,
193                          timekeeper.clock, timekeeper.mult);
194 }
195
196
197
198 /* flag for if timekeeping is suspended */
199 int __read_mostly timekeeping_suspended;
200
201 /**
202  * timekeeping_forward_now - update clock to the current time
203  *
204  * Forward the current clock to update its state since the last call to
205  * update_wall_time(). This is useful before significant clock changes,
206  * as it avoids having to deal with this time offset explicitly.
207  */
208 static void timekeeping_forward_now(void)
209 {
210         cycle_t cycle_now, cycle_delta;
211         struct clocksource *clock;
212         s64 nsec;
213
214         clock = timekeeper.clock;
215         cycle_now = clock->read(clock);
216         cycle_delta = (cycle_now - clock->cycle_last) & clock->mask;
217         clock->cycle_last = cycle_now;
218
219         nsec = clocksource_cyc2ns(cycle_delta, timekeeper.mult,
220                                   timekeeper.shift);
221
222         /* If arch requires, add in gettimeoffset() */
223         nsec += arch_gettimeoffset();
224
225         timespec_add_ns(&xtime, nsec);
226
227         nsec = clocksource_cyc2ns(cycle_delta, clock->mult, clock->shift);
228         timespec_add_ns(&raw_time, nsec);
229 }
230
231 /**
232  * getnstimeofday - Returns the time of day in a timespec
233  * @ts:         pointer to the timespec to be set
234  *
235  * Returns the time of day in a timespec.
236  */
237 void getnstimeofday(struct timespec *ts)
238 {
239         unsigned long seq;
240         s64 nsecs;
241
242         WARN_ON(timekeeping_suspended);
243
244         do {
245                 seq = read_seqbegin(&xtime_lock);
246
247                 *ts = xtime;
248                 nsecs = timekeeping_get_ns();
249
250                 /* If arch requires, add in gettimeoffset() */
251                 nsecs += arch_gettimeoffset();
252
253         } while (read_seqretry(&xtime_lock, seq));
254
255         timespec_add_ns(ts, nsecs);
256 }
257
258 EXPORT_SYMBOL(getnstimeofday);
259
260 ktime_t ktime_get(void)
261 {
262         unsigned int seq;
263         s64 secs, nsecs;
264
265         WARN_ON(timekeeping_suspended);
266
267         do {
268                 seq = read_seqbegin(&xtime_lock);
269                 secs = xtime.tv_sec + wall_to_monotonic.tv_sec;
270                 nsecs = xtime.tv_nsec + wall_to_monotonic.tv_nsec;
271                 nsecs += timekeeping_get_ns();
272                 /* If arch requires, add in gettimeoffset() */
273                 nsecs += arch_gettimeoffset();
274
275         } while (read_seqretry(&xtime_lock, seq));
276         /*
277          * Use ktime_set/ktime_add_ns to create a proper ktime on
278          * 32-bit architectures without CONFIG_KTIME_SCALAR.
279          */
280         return ktime_add_ns(ktime_set(secs, 0), nsecs);
281 }
282 EXPORT_SYMBOL_GPL(ktime_get);
283
284 /**
285  * ktime_get_ts - get the monotonic clock in timespec format
286  * @ts:         pointer to timespec variable
287  *
288  * The function calculates the monotonic clock from the realtime
289  * clock and the wall_to_monotonic offset and stores the result
290  * in normalized timespec format in the variable pointed to by @ts.
291  */
292 void ktime_get_ts(struct timespec *ts)
293 {
294         struct timespec tomono;
295         unsigned int seq;
296         s64 nsecs;
297
298         WARN_ON(timekeeping_suspended);
299
300         do {
301                 seq = read_seqbegin(&xtime_lock);
302                 *ts = xtime;
303                 tomono = wall_to_monotonic;
304                 nsecs = timekeeping_get_ns();
305                 /* If arch requires, add in gettimeoffset() */
306                 nsecs += arch_gettimeoffset();
307
308         } while (read_seqretry(&xtime_lock, seq));
309
310         set_normalized_timespec(ts, ts->tv_sec + tomono.tv_sec,
311                                 ts->tv_nsec + tomono.tv_nsec + nsecs);
312 }
313 EXPORT_SYMBOL_GPL(ktime_get_ts);
314
315 #ifdef CONFIG_NTP_PPS
316
317 /**
318  * getnstime_raw_and_real - get day and raw monotonic time in timespec format
319  * @ts_raw:     pointer to the timespec to be set to raw monotonic time
320  * @ts_real:    pointer to the timespec to be set to the time of day
321  *
322  * This function reads both the time of day and raw monotonic time at the
323  * same time atomically and stores the resulting timestamps in timespec
324  * format.
325  */
326 void getnstime_raw_and_real(struct timespec *ts_raw, struct timespec *ts_real)
327 {
328         unsigned long seq;
329         s64 nsecs_raw, nsecs_real;
330
331         WARN_ON_ONCE(timekeeping_suspended);
332
333         do {
334                 u32 arch_offset;
335
336                 seq = read_seqbegin(&xtime_lock);
337
338                 *ts_raw = raw_time;
339                 *ts_real = xtime;
340
341                 nsecs_raw = timekeeping_get_ns_raw();
342                 nsecs_real = timekeeping_get_ns();
343
344                 /* If arch requires, add in gettimeoffset() */
345                 arch_offset = arch_gettimeoffset();
346                 nsecs_raw += arch_offset;
347                 nsecs_real += arch_offset;
348
349         } while (read_seqretry(&xtime_lock, seq));
350
351         timespec_add_ns(ts_raw, nsecs_raw);
352         timespec_add_ns(ts_real, nsecs_real);
353 }
354 EXPORT_SYMBOL(getnstime_raw_and_real);
355
356 #endif /* CONFIG_NTP_PPS */
357
358 /**
359  * do_gettimeofday - Returns the time of day in a timeval
360  * @tv:         pointer to the timeval to be set
361  *
362  * NOTE: Users should be converted to using getnstimeofday()
363  */
364 void do_gettimeofday(struct timeval *tv)
365 {
366         struct timespec now;
367
368         getnstimeofday(&now);
369         tv->tv_sec = now.tv_sec;
370         tv->tv_usec = now.tv_nsec/1000;
371 }
372
373 EXPORT_SYMBOL(do_gettimeofday);
374 /**
375  * do_settimeofday - Sets the time of day
376  * @tv:         pointer to the timespec variable containing the new time
377  *
378  * Sets the time of day to the new time and update NTP and notify hrtimers
379  */
380 int do_settimeofday(const struct timespec *tv)
381 {
382         struct timespec ts_delta;
383         unsigned long flags;
384
385         if ((unsigned long)tv->tv_nsec >= NSEC_PER_SEC)
386                 return -EINVAL;
387
388         write_seqlock_irqsave(&xtime_lock, flags);
389
390         timekeeping_forward_now();
391
392         ts_delta.tv_sec = tv->tv_sec - xtime.tv_sec;
393         ts_delta.tv_nsec = tv->tv_nsec - xtime.tv_nsec;
394         wall_to_monotonic = timespec_sub(wall_to_monotonic, ts_delta);
395
396         xtime = *tv;
397
398         timekeeping_update(true);
399
400         write_sequnlock_irqrestore(&xtime_lock, flags);
401
402         /* signal hrtimers about time change */
403         clock_was_set();
404
405         return 0;
406 }
407
408 EXPORT_SYMBOL(do_settimeofday);
409
410
411 /**
412  * timekeeping_inject_offset - Adds or subtracts from the current time.
413  * @tv:         pointer to the timespec variable containing the offset
414  *
415  * Adds or subtracts an offset value from the current time.
416  */
417 int timekeeping_inject_offset(struct timespec *ts)
418 {
419         unsigned long flags;
420
421         if ((unsigned long)ts->tv_nsec >= NSEC_PER_SEC)
422                 return -EINVAL;
423
424         write_seqlock_irqsave(&xtime_lock, flags);
425
426         timekeeping_forward_now();
427
428         xtime = timespec_add(xtime, *ts);
429         wall_to_monotonic = timespec_sub(wall_to_monotonic, *ts);
430
431         timekeeping_update(true);
432
433         write_sequnlock_irqrestore(&xtime_lock, flags);
434
435         /* signal hrtimers about time change */
436         clock_was_set();
437
438         return 0;
439 }
440 EXPORT_SYMBOL(timekeeping_inject_offset);
441
442 /**
443  * change_clocksource - Swaps clocksources if a new one is available
444  *
445  * Accumulates current time interval and initializes new clocksource
446  */
447 static int change_clocksource(void *data)
448 {
449         struct clocksource *new, *old;
450
451         new = (struct clocksource *) data;
452
453         timekeeping_forward_now();
454         if (!new->enable || new->enable(new) == 0) {
455                 old = timekeeper.clock;
456                 timekeeper_setup_internals(new);
457                 if (old->disable)
458                         old->disable(old);
459         }
460         return 0;
461 }
462
463 /**
464  * timekeeping_notify - Install a new clock source
465  * @clock:              pointer to the clock source
466  *
467  * This function is called from clocksource.c after a new, better clock
468  * source has been registered. The caller holds the clocksource_mutex.
469  */
470 void timekeeping_notify(struct clocksource *clock)
471 {
472         if (timekeeper.clock == clock)
473                 return;
474         stop_machine(change_clocksource, clock, NULL);
475         tick_clock_notify();
476 }
477
478 /**
479  * ktime_get_real - get the real (wall-) time in ktime_t format
480  *
481  * returns the time in ktime_t format
482  */
483 ktime_t ktime_get_real(void)
484 {
485         struct timespec now;
486
487         getnstimeofday(&now);
488
489         return timespec_to_ktime(now);
490 }
491 EXPORT_SYMBOL_GPL(ktime_get_real);
492
493 /**
494  * getrawmonotonic - Returns the raw monotonic time in a timespec
495  * @ts:         pointer to the timespec to be set
496  *
497  * Returns the raw monotonic time (completely un-modified by ntp)
498  */
499 void getrawmonotonic(struct timespec *ts)
500 {
501         unsigned long seq;
502         s64 nsecs;
503
504         do {
505                 seq = read_seqbegin(&xtime_lock);
506                 nsecs = timekeeping_get_ns_raw();
507                 *ts = raw_time;
508
509         } while (read_seqretry(&xtime_lock, seq));
510
511         timespec_add_ns(ts, nsecs);
512 }
513 EXPORT_SYMBOL(getrawmonotonic);
514
515
516 /**
517  * timekeeping_valid_for_hres - Check if timekeeping is suitable for hres
518  */
519 int timekeeping_valid_for_hres(void)
520 {
521         unsigned long seq;
522         int ret;
523
524         do {
525                 seq = read_seqbegin(&xtime_lock);
526
527                 ret = timekeeper.clock->flags & CLOCK_SOURCE_VALID_FOR_HRES;
528
529         } while (read_seqretry(&xtime_lock, seq));
530
531         return ret;
532 }
533
534 /**
535  * timekeeping_max_deferment - Returns max time the clocksource can be deferred
536  *
537  * Caller must observe xtime_lock via read_seqbegin/read_seqretry to
538  * ensure that the clocksource does not change!
539  */
540 u64 timekeeping_max_deferment(void)
541 {
542         return timekeeper.clock->max_idle_ns;
543 }
544
545 /**
546  * read_persistent_clock -  Return time from the persistent clock.
547  *
548  * Weak dummy function for arches that do not yet support it.
549  * Reads the time from the battery backed persistent clock.
550  * Returns a timespec with tv_sec=0 and tv_nsec=0 if unsupported.
551  *
552  *  XXX - Do be sure to remove it once all arches implement it.
553  */
554 void __attribute__((weak)) read_persistent_clock(struct timespec *ts)
555 {
556         ts->tv_sec = 0;
557         ts->tv_nsec = 0;
558 }
559
560 /**
561  * read_boot_clock -  Return time of the system start.
562  *
563  * Weak dummy function for arches that do not yet support it.
564  * Function to read the exact time the system has been started.
565  * Returns a timespec with tv_sec=0 and tv_nsec=0 if unsupported.
566  *
567  *  XXX - Do be sure to remove it once all arches implement it.
568  */
569 void __attribute__((weak)) read_boot_clock(struct timespec *ts)
570 {
571         ts->tv_sec = 0;
572         ts->tv_nsec = 0;
573 }
574
575 /*
576  * timekeeping_init - Initializes the clocksource and common timekeeping values
577  */
578 void __init timekeeping_init(void)
579 {
580         struct clocksource *clock;
581         unsigned long flags;
582         struct timespec now, boot;
583
584         read_persistent_clock(&now);
585         read_boot_clock(&boot);
586
587         write_seqlock_irqsave(&xtime_lock, flags);
588
589         ntp_init();
590
591         clock = clocksource_default_clock();
592         if (clock->enable)
593                 clock->enable(clock);
594         timekeeper_setup_internals(clock);
595
596         xtime.tv_sec = now.tv_sec;
597         xtime.tv_nsec = now.tv_nsec;
598         raw_time.tv_sec = 0;
599         raw_time.tv_nsec = 0;
600         if (boot.tv_sec == 0 && boot.tv_nsec == 0) {
601                 boot.tv_sec = xtime.tv_sec;
602                 boot.tv_nsec = xtime.tv_nsec;
603         }
604         set_normalized_timespec(&wall_to_monotonic,
605                                 -boot.tv_sec, -boot.tv_nsec);
606         update_rt_offset();
607         total_sleep_time.tv_sec = 0;
608         total_sleep_time.tv_nsec = 0;
609         write_sequnlock_irqrestore(&xtime_lock, flags);
610 }
611
612 /* time in seconds when suspend began */
613 static struct timespec timekeeping_suspend_time;
614
615 static void update_sleep_time(struct timespec t)
616 {
617         total_sleep_time = t;
618         offs_boot = timespec_to_ktime(t);
619 }
620
621 /**
622  * __timekeeping_inject_sleeptime - Internal function to add sleep interval
623  * @delta: pointer to a timespec delta value
624  *
625  * Takes a timespec offset measuring a suspend interval and properly
626  * adds the sleep offset to the timekeeping variables.
627  */
628 static void __timekeeping_inject_sleeptime(struct timespec *delta)
629 {
630         if (!timespec_valid(delta)) {
631                 printk(KERN_WARNING "__timekeeping_inject_sleeptime: Invalid "
632                                         "sleep delta value!\n");
633                 return;
634         }
635
636         xtime = timespec_add(xtime, *delta);
637         wall_to_monotonic = timespec_sub(wall_to_monotonic, *delta);
638         update_sleep_time(timespec_add(total_sleep_time, *delta));
639 }
640
641
642 /**
643  * timekeeping_inject_sleeptime - Adds suspend interval to timeekeeping values
644  * @delta: pointer to a timespec delta value
645  *
646  * This hook is for architectures that cannot support read_persistent_clock
647  * because their RTC/persistent clock is only accessible when irqs are enabled.
648  *
649  * This function should only be called by rtc_resume(), and allows
650  * a suspend offset to be injected into the timekeeping values.
651  */
652 void timekeeping_inject_sleeptime(struct timespec *delta)
653 {
654         unsigned long flags;
655         struct timespec ts;
656
657         /* Make sure we don't set the clock twice */
658         read_persistent_clock(&ts);
659         if (!(ts.tv_sec == 0 && ts.tv_nsec == 0))
660                 return;
661
662         write_seqlock_irqsave(&xtime_lock, flags);
663         timekeeping_forward_now();
664
665         __timekeeping_inject_sleeptime(delta);
666
667         timekeeping_update(true);
668
669         write_sequnlock_irqrestore(&xtime_lock, flags);
670
671         /* signal hrtimers about time change */
672         clock_was_set();
673 }
674
675
676 /**
677  * timekeeping_resume - Resumes the generic timekeeping subsystem.
678  *
679  * This is for the generic clocksource timekeeping.
680  * xtime/wall_to_monotonic/jiffies/etc are
681  * still managed by arch specific suspend/resume code.
682  */
683 static void timekeeping_resume(void)
684 {
685         unsigned long flags;
686         struct timespec ts;
687
688         read_persistent_clock(&ts);
689
690         clocksource_resume();
691
692         write_seqlock_irqsave(&xtime_lock, flags);
693
694         if (timespec_compare(&ts, &timekeeping_suspend_time) > 0) {
695                 ts = timespec_sub(ts, timekeeping_suspend_time);
696                 __timekeeping_inject_sleeptime(&ts);
697         }
698         /* re-base the last cycle value */
699         timekeeper.clock->cycle_last = timekeeper.clock->read(timekeeper.clock);
700         timekeeper.ntp_error = 0;
701         timekeeping_suspended = 0;
702         timekeeping_update(false);
703         write_sequnlock_irqrestore(&xtime_lock, flags);
704
705         touch_softlockup_watchdog();
706
707         clockevents_notify(CLOCK_EVT_NOTIFY_RESUME, NULL);
708
709         /* Resume hrtimers */
710         hrtimers_resume();
711 }
712
713 static int timekeeping_suspend(void)
714 {
715         unsigned long flags;
716
717         read_persistent_clock(&timekeeping_suspend_time);
718
719         write_seqlock_irqsave(&xtime_lock, flags);
720         timekeeping_forward_now();
721         timekeeping_suspended = 1;
722         write_sequnlock_irqrestore(&xtime_lock, flags);
723
724         clockevents_notify(CLOCK_EVT_NOTIFY_SUSPEND, NULL);
725         clocksource_suspend();
726
727         return 0;
728 }
729
730 /* sysfs resume/suspend bits for timekeeping */
731 static struct syscore_ops timekeeping_syscore_ops = {
732         .resume         = timekeeping_resume,
733         .suspend        = timekeeping_suspend,
734 };
735
736 static int __init timekeeping_init_ops(void)
737 {
738         register_syscore_ops(&timekeeping_syscore_ops);
739         return 0;
740 }
741
742 device_initcall(timekeeping_init_ops);
743
744 /*
745  * If the error is already larger, we look ahead even further
746  * to compensate for late or lost adjustments.
747  */
748 static __always_inline int timekeeping_bigadjust(s64 error, s64 *interval,
749                                                  s64 *offset)
750 {
751         s64 tick_error, i;
752         u32 look_ahead, adj;
753         s32 error2, mult;
754
755         /*
756          * Use the current error value to determine how much to look ahead.
757          * The larger the error the slower we adjust for it to avoid problems
758          * with losing too many ticks, otherwise we would overadjust and
759          * produce an even larger error.  The smaller the adjustment the
760          * faster we try to adjust for it, as lost ticks can do less harm
761          * here.  This is tuned so that an error of about 1 msec is adjusted
762          * within about 1 sec (or 2^20 nsec in 2^SHIFT_HZ ticks).
763          */
764         error2 = timekeeper.ntp_error >> (NTP_SCALE_SHIFT + 22 - 2 * SHIFT_HZ);
765         error2 = abs(error2);
766         for (look_ahead = 0; error2 > 0; look_ahead++)
767                 error2 >>= 2;
768
769         /*
770          * Now calculate the error in (1 << look_ahead) ticks, but first
771          * remove the single look ahead already included in the error.
772          */
773         tick_error = tick_length >> (timekeeper.ntp_error_shift + 1);
774         tick_error -= timekeeper.xtime_interval >> 1;
775         error = ((error - tick_error) >> look_ahead) + tick_error;
776
777         /* Finally calculate the adjustment shift value.  */
778         i = *interval;
779         mult = 1;
780         if (error < 0) {
781                 error = -error;
782                 *interval = -*interval;
783                 *offset = -*offset;
784                 mult = -1;
785         }
786         for (adj = 0; error > i; adj++)
787                 error >>= 1;
788
789         *interval <<= adj;
790         *offset <<= adj;
791         return mult << adj;
792 }
793
794 /*
795  * Adjust the multiplier to reduce the error value,
796  * this is optimized for the most common adjustments of -1,0,1,
797  * for other values we can do a bit more work.
798  */
799 static void timekeeping_adjust(s64 offset)
800 {
801         s64 error, interval = timekeeper.cycle_interval;
802         int adj;
803
804         error = timekeeper.ntp_error >> (timekeeper.ntp_error_shift - 1);
805         if (error > interval) {
806                 error >>= 2;
807                 if (likely(error <= interval))
808                         adj = 1;
809                 else
810                         adj = timekeeping_bigadjust(error, &interval, &offset);
811         } else if (error < -interval) {
812                 error >>= 2;
813                 if (likely(error >= -interval)) {
814                         adj = -1;
815                         interval = -interval;
816                         offset = -offset;
817                 } else
818                         adj = timekeeping_bigadjust(error, &interval, &offset);
819         } else
820                 return;
821
822         timekeeper.mult += adj;
823         timekeeper.xtime_interval += interval;
824         timekeeper.xtime_nsec -= offset;
825         timekeeper.ntp_error -= (interval - offset) <<
826                                 timekeeper.ntp_error_shift;
827 }
828
829
830 /**
831  * logarithmic_accumulation - shifted accumulation of cycles
832  *
833  * This functions accumulates a shifted interval of cycles into
834  * into a shifted interval nanoseconds. Allows for O(log) accumulation
835  * loop.
836  *
837  * Returns the unconsumed cycles.
838  */
839 static cycle_t logarithmic_accumulation(cycle_t offset, int shift)
840 {
841         u64 nsecps = (u64)NSEC_PER_SEC << timekeeper.shift;
842         u64 raw_nsecs;
843
844         /* If the offset is smaller then a shifted interval, do nothing */
845         if (offset < timekeeper.cycle_interval<<shift)
846                 return offset;
847
848         /* Accumulate one shifted interval */
849         offset -= timekeeper.cycle_interval << shift;
850         timekeeper.clock->cycle_last += timekeeper.cycle_interval << shift;
851
852         timekeeper.xtime_nsec += timekeeper.xtime_interval << shift;
853         while (timekeeper.xtime_nsec >= nsecps) {
854                 int leap;
855                 timekeeper.xtime_nsec -= nsecps;
856                 xtime.tv_sec++;
857                 leap = second_overflow(xtime.tv_sec);
858                 xtime.tv_sec += leap;
859                 wall_to_monotonic.tv_sec -= leap;
860                 if (leap)
861                         clock_was_set_delayed();
862         }
863
864         /* Accumulate raw time */
865         raw_nsecs = timekeeper.raw_interval << shift;
866         raw_nsecs += raw_time.tv_nsec;
867         if (raw_nsecs >= NSEC_PER_SEC) {
868                 u64 raw_secs = raw_nsecs;
869                 raw_nsecs = do_div(raw_secs, NSEC_PER_SEC);
870                 raw_time.tv_sec += raw_secs;
871         }
872         raw_time.tv_nsec = raw_nsecs;
873
874         /* Accumulate error between NTP and clock interval */
875         timekeeper.ntp_error += tick_length << shift;
876         timekeeper.ntp_error -=
877             (timekeeper.xtime_interval + timekeeper.xtime_remainder) <<
878                                 (timekeeper.ntp_error_shift + shift);
879
880         return offset;
881 }
882
883
884 /**
885  * update_wall_time - Uses the current clocksource to increment the wall time
886  *
887  * Called from the timer interrupt, must hold a write on xtime_lock.
888  */
889 static void update_wall_time(void)
890 {
891         struct clocksource *clock;
892         cycle_t offset;
893         int shift = 0, maxshift;
894
895         /* Make sure we're fully resumed: */
896         if (unlikely(timekeeping_suspended))
897                 return;
898
899         clock = timekeeper.clock;
900
901 #ifdef CONFIG_ARCH_USES_GETTIMEOFFSET
902         offset = timekeeper.cycle_interval;
903 #else
904         offset = (clock->read(clock) - clock->cycle_last) & clock->mask;
905 #endif
906         timekeeper.xtime_nsec = (s64)xtime.tv_nsec << timekeeper.shift;
907
908         /*
909          * With NO_HZ we may have to accumulate many cycle_intervals
910          * (think "ticks") worth of time at once. To do this efficiently,
911          * we calculate the largest doubling multiple of cycle_intervals
912          * that is smaller then the offset. We then accumulate that
913          * chunk in one go, and then try to consume the next smaller
914          * doubled multiple.
915          */
916         shift = ilog2(offset) - ilog2(timekeeper.cycle_interval);
917         shift = max(0, shift);
918         /* Bound shift to one less then what overflows tick_length */
919         maxshift = (8*sizeof(tick_length) - (ilog2(tick_length)+1)) - 1;
920         shift = min(shift, maxshift);
921         while (offset >= timekeeper.cycle_interval) {
922                 offset = logarithmic_accumulation(offset, shift);
923                 if(offset < timekeeper.cycle_interval<<shift)
924                         shift--;
925         }
926
927         /* correct the clock when NTP error is too big */
928         timekeeping_adjust(offset);
929
930         /*
931          * Since in the loop above, we accumulate any amount of time
932          * in xtime_nsec over a second into xtime.tv_sec, its possible for
933          * xtime_nsec to be fairly small after the loop. Further, if we're
934          * slightly speeding the clocksource up in timekeeping_adjust(),
935          * its possible the required corrective factor to xtime_nsec could
936          * cause it to underflow.
937          *
938          * Now, we cannot simply roll the accumulated second back, since
939          * the NTP subsystem has been notified via second_overflow. So
940          * instead we push xtime_nsec forward by the amount we underflowed,
941          * and add that amount into the error.
942          *
943          * We'll correct this error next time through this function, when
944          * xtime_nsec is not as small.
945          */
946         if (unlikely((s64)timekeeper.xtime_nsec < 0)) {
947                 s64 neg = -(s64)timekeeper.xtime_nsec;
948                 timekeeper.xtime_nsec = 0;
949                 timekeeper.ntp_error += neg << timekeeper.ntp_error_shift;
950         }
951
952
953         /*
954          * Store full nanoseconds into xtime after rounding it up and
955          * add the remainder to the error difference.
956          */
957         xtime.tv_nsec = ((s64) timekeeper.xtime_nsec >> timekeeper.shift) + 1;
958         timekeeper.xtime_nsec -= (s64) xtime.tv_nsec << timekeeper.shift;
959         timekeeper.ntp_error += timekeeper.xtime_nsec <<
960                                 timekeeper.ntp_error_shift;
961
962         /*
963          * Finally, make sure that after the rounding
964          * xtime.tv_nsec isn't larger then NSEC_PER_SEC
965          */
966         if (unlikely(xtime.tv_nsec >= NSEC_PER_SEC)) {
967                 int leap;
968                 xtime.tv_nsec -= NSEC_PER_SEC;
969                 xtime.tv_sec++;
970                 leap = second_overflow(xtime.tv_sec);
971                 xtime.tv_sec += leap;
972                 wall_to_monotonic.tv_sec -= leap;
973                 if (leap)
974                         clock_was_set_delayed();
975         }
976
977         timekeeping_update(false);
978 }
979
980 /**
981  * getboottime - Return the real time of system boot.
982  * @ts:         pointer to the timespec to be set
983  *
984  * Returns the wall-time of boot in a timespec.
985  *
986  * This is based on the wall_to_monotonic offset and the total suspend
987  * time. Calls to settimeofday will affect the value returned (which
988  * basically means that however wrong your real time clock is at boot time,
989  * you get the right time here).
990  */
991 void getboottime(struct timespec *ts)
992 {
993         struct timespec boottime = {
994                 .tv_sec = wall_to_monotonic.tv_sec + total_sleep_time.tv_sec,
995                 .tv_nsec = wall_to_monotonic.tv_nsec + total_sleep_time.tv_nsec
996         };
997
998         set_normalized_timespec(ts, -boottime.tv_sec, -boottime.tv_nsec);
999 }
1000 EXPORT_SYMBOL_GPL(getboottime);
1001
1002
1003 /**
1004  * get_monotonic_boottime - Returns monotonic time since boot
1005  * @ts:         pointer to the timespec to be set
1006  *
1007  * Returns the monotonic time since boot in a timespec.
1008  *
1009  * This is similar to CLOCK_MONTONIC/ktime_get_ts, but also
1010  * includes the time spent in suspend.
1011  */
1012 void get_monotonic_boottime(struct timespec *ts)
1013 {
1014         struct timespec tomono, sleep;
1015         unsigned int seq;
1016         s64 nsecs;
1017
1018         WARN_ON(timekeeping_suspended);
1019
1020         do {
1021                 seq = read_seqbegin(&xtime_lock);
1022                 *ts = xtime;
1023                 tomono = wall_to_monotonic;
1024                 sleep = total_sleep_time;
1025                 nsecs = timekeeping_get_ns();
1026
1027         } while (read_seqretry(&xtime_lock, seq));
1028
1029         set_normalized_timespec(ts, ts->tv_sec + tomono.tv_sec + sleep.tv_sec,
1030                         ts->tv_nsec + tomono.tv_nsec + sleep.tv_nsec + nsecs);
1031 }
1032 EXPORT_SYMBOL_GPL(get_monotonic_boottime);
1033
1034 /**
1035  * ktime_get_boottime - Returns monotonic time since boot in a ktime
1036  *
1037  * Returns the monotonic time since boot in a ktime
1038  *
1039  * This is similar to CLOCK_MONTONIC/ktime_get, but also
1040  * includes the time spent in suspend.
1041  */
1042 ktime_t ktime_get_boottime(void)
1043 {
1044         struct timespec ts;
1045
1046         get_monotonic_boottime(&ts);
1047         return timespec_to_ktime(ts);
1048 }
1049 EXPORT_SYMBOL_GPL(ktime_get_boottime);
1050
1051 /**
1052  * monotonic_to_bootbased - Convert the monotonic time to boot based.
1053  * @ts:         pointer to the timespec to be converted
1054  */
1055 void monotonic_to_bootbased(struct timespec *ts)
1056 {
1057         *ts = timespec_add(*ts, total_sleep_time);
1058 }
1059 EXPORT_SYMBOL_GPL(monotonic_to_bootbased);
1060
1061 unsigned long get_seconds(void)
1062 {
1063         return xtime.tv_sec;
1064 }
1065 EXPORT_SYMBOL(get_seconds);
1066
1067 struct timespec __current_kernel_time(void)
1068 {
1069         return xtime;
1070 }
1071
1072 struct timespec current_kernel_time(void)
1073 {
1074         struct timespec now;
1075         unsigned long seq;
1076
1077         do {
1078                 seq = read_seqbegin(&xtime_lock);
1079
1080                 now = xtime;
1081         } while (read_seqretry(&xtime_lock, seq));
1082
1083         return now;
1084 }
1085 EXPORT_SYMBOL(current_kernel_time);
1086
1087 struct timespec get_monotonic_coarse(void)
1088 {
1089         struct timespec now, mono;
1090         unsigned long seq;
1091
1092         do {
1093                 seq = read_seqbegin(&xtime_lock);
1094
1095                 now = xtime;
1096                 mono = wall_to_monotonic;
1097         } while (read_seqretry(&xtime_lock, seq));
1098
1099         set_normalized_timespec(&now, now.tv_sec + mono.tv_sec,
1100                                 now.tv_nsec + mono.tv_nsec);
1101         return now;
1102 }
1103
1104 /*
1105  * The 64-bit jiffies value is not atomic - you MUST NOT read it
1106  * without sampling the sequence number in xtime_lock.
1107  * jiffies is defined in the linker script...
1108  */
1109 void do_timer(unsigned long ticks)
1110 {
1111         jiffies_64 += ticks;
1112         update_wall_time();
1113         calc_global_load(ticks);
1114 }
1115
1116 /**
1117  * get_xtime_and_monotonic_and_sleep_offset() - get xtime, wall_to_monotonic,
1118  *    and sleep offsets.
1119  * @xtim:       pointer to timespec to be set with xtime
1120  * @wtom:       pointer to timespec to be set with wall_to_monotonic
1121  * @sleep:      pointer to timespec to be set with time in suspend
1122  */
1123 void get_xtime_and_monotonic_and_sleep_offset(struct timespec *xtim,
1124                                 struct timespec *wtom, struct timespec *sleep)
1125 {
1126         unsigned long seq;
1127
1128         do {
1129                 seq = read_seqbegin(&xtime_lock);
1130                 *xtim = xtime;
1131                 *wtom = wall_to_monotonic;
1132                 *sleep = total_sleep_time;
1133         } while (read_seqretry(&xtime_lock, seq));
1134 }
1135
1136 #ifdef CONFIG_HIGH_RES_TIMERS
1137 /**
1138  * ktime_get_update_offsets - hrtimer helper
1139  * @real:       pointer to storage for monotonic -> realtime offset
1140  * @_boot:      pointer to storage for monotonic -> boottime offset
1141  *
1142  * Returns current monotonic time and updates the offsets
1143  * Called from hrtimer_interupt() or retrigger_next_event()
1144  */
1145 ktime_t ktime_get_update_offsets(ktime_t *real, ktime_t *boot)
1146 {
1147         ktime_t now;
1148         unsigned int seq;
1149         u64 secs, nsecs;
1150
1151         do {
1152                 seq = read_seqbegin(&xtime_lock);
1153
1154                 secs = xtime.tv_sec;
1155                 nsecs = xtime.tv_nsec;
1156                 nsecs += timekeeping_get_ns();
1157                 /* If arch requires, add in gettimeoffset() */
1158                 nsecs += arch_gettimeoffset();
1159
1160                 *real = offs_real;
1161                 *boot = offs_boot;
1162         } while (read_seqretry(&xtime_lock, seq));
1163
1164         now = ktime_add_ns(ktime_set(secs, 0), nsecs);
1165         now = ktime_sub(now, *real);
1166         return now;
1167 }
1168 #endif
1169
1170 /**
1171  * ktime_get_monotonic_offset() - get wall_to_monotonic in ktime_t format
1172  */
1173 ktime_t ktime_get_monotonic_offset(void)
1174 {
1175         unsigned long seq;
1176         struct timespec wtom;
1177
1178         do {
1179                 seq = read_seqbegin(&xtime_lock);
1180                 wtom = wall_to_monotonic;
1181         } while (read_seqretry(&xtime_lock, seq));
1182         return timespec_to_ktime(wtom);
1183 }
1184
1185 /**
1186  * xtime_update() - advances the timekeeping infrastructure
1187  * @ticks:      number of ticks, that have elapsed since the last call.
1188  *
1189  * Must be called with interrupts disabled.
1190  */
1191 void xtime_update(unsigned long ticks)
1192 {
1193         write_seqlock(&xtime_lock);
1194         do_timer(ticks);
1195         write_sequnlock(&xtime_lock);
1196 }