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