]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - kernel/hrtimer.c
[PATCH] HZ free ntp
[karo-tx-linux.git] / kernel / hrtimer.c
1 /*
2  *  linux/kernel/hrtimer.c
3  *
4  *  Copyright(C) 2005, Thomas Gleixner <tglx@linutronix.de>
5  *  Copyright(C) 2005, Red Hat, Inc., Ingo Molnar
6  *
7  *  High-resolution kernel timers
8  *
9  *  In contrast to the low-resolution timeout API implemented in
10  *  kernel/timer.c, hrtimers provide finer resolution and accuracy
11  *  depending on system configuration and capabilities.
12  *
13  *  These timers are currently used for:
14  *   - itimers
15  *   - POSIX timers
16  *   - nanosleep
17  *   - precise in-kernel timing
18  *
19  *  Started by: Thomas Gleixner and Ingo Molnar
20  *
21  *  Credits:
22  *      based on kernel/timer.c
23  *
24  *      Help, testing, suggestions, bugfixes, improvements were
25  *      provided by:
26  *
27  *      George Anzinger, Andrew Morton, Steven Rostedt, Roman Zippel
28  *      et. al.
29  *
30  *  For licencing details see kernel-base/COPYING
31  */
32
33 #include <linux/cpu.h>
34 #include <linux/module.h>
35 #include <linux/percpu.h>
36 #include <linux/hrtimer.h>
37 #include <linux/notifier.h>
38 #include <linux/syscalls.h>
39 #include <linux/interrupt.h>
40
41 #include <asm/uaccess.h>
42
43 /**
44  * ktime_get - get the monotonic time in ktime_t format
45  *
46  * returns the time in ktime_t format
47  */
48 static ktime_t ktime_get(void)
49 {
50         struct timespec now;
51
52         ktime_get_ts(&now);
53
54         return timespec_to_ktime(now);
55 }
56
57 /**
58  * ktime_get_real - get the real (wall-) time in ktime_t format
59  *
60  * returns the time in ktime_t format
61  */
62 static ktime_t ktime_get_real(void)
63 {
64         struct timespec now;
65
66         getnstimeofday(&now);
67
68         return timespec_to_ktime(now);
69 }
70
71 EXPORT_SYMBOL_GPL(ktime_get_real);
72
73 /*
74  * The timer bases:
75  *
76  * Note: If we want to add new timer bases, we have to skip the two
77  * clock ids captured by the cpu-timers. We do this by holding empty
78  * entries rather than doing math adjustment of the clock ids.
79  * This ensures that we capture erroneous accesses to these clock ids
80  * rather than moving them into the range of valid clock id's.
81  */
82
83 #define MAX_HRTIMER_BASES 2
84
85 static DEFINE_PER_CPU(struct hrtimer_base, hrtimer_bases[MAX_HRTIMER_BASES]) =
86 {
87         {
88                 .index = CLOCK_REALTIME,
89                 .get_time = &ktime_get_real,
90                 .resolution = KTIME_REALTIME_RES,
91         },
92         {
93                 .index = CLOCK_MONOTONIC,
94                 .get_time = &ktime_get,
95                 .resolution = KTIME_MONOTONIC_RES,
96         },
97 };
98
99 /**
100  * ktime_get_ts - get the monotonic clock in timespec format
101  * @ts:         pointer to timespec variable
102  *
103  * The function calculates the monotonic clock from the realtime
104  * clock and the wall_to_monotonic offset and stores the result
105  * in normalized timespec format in the variable pointed to by @ts.
106  */
107 void ktime_get_ts(struct timespec *ts)
108 {
109         struct timespec tomono;
110         unsigned long seq;
111
112         do {
113                 seq = read_seqbegin(&xtime_lock);
114                 getnstimeofday(ts);
115                 tomono = wall_to_monotonic;
116
117         } while (read_seqretry(&xtime_lock, seq));
118
119         set_normalized_timespec(ts, ts->tv_sec + tomono.tv_sec,
120                                 ts->tv_nsec + tomono.tv_nsec);
121 }
122 EXPORT_SYMBOL_GPL(ktime_get_ts);
123
124 /*
125  * Get the coarse grained time at the softirq based on xtime and
126  * wall_to_monotonic.
127  */
128 static void hrtimer_get_softirq_time(struct hrtimer_base *base)
129 {
130         ktime_t xtim, tomono;
131         struct timespec xts;
132         unsigned long seq;
133
134         do {
135                 seq = read_seqbegin(&xtime_lock);
136 #ifdef CONFIG_NO_HZ
137                 getnstimeofday(&xts);
138 #else
139                 xts = xtime;
140 #endif
141         } while (read_seqretry(&xtime_lock, seq));
142
143         xtim = timespec_to_ktime(xts);
144         tomono = timespec_to_ktime(wall_to_monotonic);
145         base[CLOCK_REALTIME].softirq_time = xtim;
146         base[CLOCK_MONOTONIC].softirq_time = ktime_add(xtim, tomono);
147 }
148
149 /*
150  * Functions and macros which are different for UP/SMP systems are kept in a
151  * single place
152  */
153 #ifdef CONFIG_SMP
154
155 #define set_curr_timer(b, t)            do { (b)->curr_timer = (t); } while (0)
156
157 /*
158  * We are using hashed locking: holding per_cpu(hrtimer_bases)[n].lock
159  * means that all timers which are tied to this base via timer->base are
160  * locked, and the base itself is locked too.
161  *
162  * So __run_timers/migrate_timers can safely modify all timers which could
163  * be found on the lists/queues.
164  *
165  * When the timer's base is locked, and the timer removed from list, it is
166  * possible to set timer->base = NULL and drop the lock: the timer remains
167  * locked.
168  */
169 static struct hrtimer_base *lock_hrtimer_base(const struct hrtimer *timer,
170                                               unsigned long *flags)
171 {
172         struct hrtimer_base *base;
173
174         for (;;) {
175                 base = timer->base;
176                 if (likely(base != NULL)) {
177                         spin_lock_irqsave(&base->lock, *flags);
178                         if (likely(base == timer->base))
179                                 return base;
180                         /* The timer has migrated to another CPU: */
181                         spin_unlock_irqrestore(&base->lock, *flags);
182                 }
183                 cpu_relax();
184         }
185 }
186
187 /*
188  * Switch the timer base to the current CPU when possible.
189  */
190 static inline struct hrtimer_base *
191 switch_hrtimer_base(struct hrtimer *timer, struct hrtimer_base *base)
192 {
193         struct hrtimer_base *new_base;
194
195         new_base = &__get_cpu_var(hrtimer_bases)[base->index];
196
197         if (base != new_base) {
198                 /*
199                  * We are trying to schedule the timer on the local CPU.
200                  * However we can't change timer's base while it is running,
201                  * so we keep it on the same CPU. No hassle vs. reprogramming
202                  * the event source in the high resolution case. The softirq
203                  * code will take care of this when the timer function has
204                  * completed. There is no conflict as we hold the lock until
205                  * the timer is enqueued.
206                  */
207                 if (unlikely(base->curr_timer == timer))
208                         return base;
209
210                 /* See the comment in lock_timer_base() */
211                 timer->base = NULL;
212                 spin_unlock(&base->lock);
213                 spin_lock(&new_base->lock);
214                 timer->base = new_base;
215         }
216         return new_base;
217 }
218
219 #else /* CONFIG_SMP */
220
221 #define set_curr_timer(b, t)            do { } while (0)
222
223 static inline struct hrtimer_base *
224 lock_hrtimer_base(const struct hrtimer *timer, unsigned long *flags)
225 {
226         struct hrtimer_base *base = timer->base;
227
228         spin_lock_irqsave(&base->lock, *flags);
229
230         return base;
231 }
232
233 #define switch_hrtimer_base(t, b)       (b)
234
235 #endif  /* !CONFIG_SMP */
236
237 /*
238  * Functions for the union type storage format of ktime_t which are
239  * too large for inlining:
240  */
241 #if BITS_PER_LONG < 64
242 # ifndef CONFIG_KTIME_SCALAR
243 /**
244  * ktime_add_ns - Add a scalar nanoseconds value to a ktime_t variable
245  * @kt:         addend
246  * @nsec:       the scalar nsec value to add
247  *
248  * Returns the sum of kt and nsec in ktime_t format
249  */
250 ktime_t ktime_add_ns(const ktime_t kt, u64 nsec)
251 {
252         ktime_t tmp;
253
254         if (likely(nsec < NSEC_PER_SEC)) {
255                 tmp.tv64 = nsec;
256         } else {
257                 unsigned long rem = do_div(nsec, NSEC_PER_SEC);
258
259                 tmp = ktime_set((long)nsec, rem);
260         }
261
262         return ktime_add(kt, tmp);
263 }
264
265 #else /* CONFIG_KTIME_SCALAR */
266
267 # endif /* !CONFIG_KTIME_SCALAR */
268
269 /*
270  * Divide a ktime value by a nanosecond value
271  */
272 static unsigned long ktime_divns(const ktime_t kt, s64 div)
273 {
274         u64 dclc, inc, dns;
275         int sft = 0;
276
277         dclc = dns = ktime_to_ns(kt);
278         inc = div;
279         /* Make sure the divisor is less than 2^32: */
280         while (div >> 32) {
281                 sft++;
282                 div >>= 1;
283         }
284         dclc >>= sft;
285         do_div(dclc, (unsigned long) div);
286
287         return (unsigned long) dclc;
288 }
289
290 #else /* BITS_PER_LONG < 64 */
291 # define ktime_divns(kt, div)           (unsigned long)((kt).tv64 / (div))
292 #endif /* BITS_PER_LONG >= 64 */
293
294 /*
295  * Counterpart to lock_timer_base above:
296  */
297 static inline
298 void unlock_hrtimer_base(const struct hrtimer *timer, unsigned long *flags)
299 {
300         spin_unlock_irqrestore(&timer->base->lock, *flags);
301 }
302
303 /**
304  * hrtimer_forward - forward the timer expiry
305  * @timer:      hrtimer to forward
306  * @now:        forward past this time
307  * @interval:   the interval to forward
308  *
309  * Forward the timer expiry so it will expire in the future.
310  * Returns the number of overruns.
311  */
312 unsigned long
313 hrtimer_forward(struct hrtimer *timer, ktime_t now, ktime_t interval)
314 {
315         unsigned long orun = 1;
316         ktime_t delta;
317
318         delta = ktime_sub(now, timer->expires);
319
320         if (delta.tv64 < 0)
321                 return 0;
322
323         if (interval.tv64 < timer->base->resolution.tv64)
324                 interval.tv64 = timer->base->resolution.tv64;
325
326         if (unlikely(delta.tv64 >= interval.tv64)) {
327                 s64 incr = ktime_to_ns(interval);
328
329                 orun = ktime_divns(delta, incr);
330                 timer->expires = ktime_add_ns(timer->expires, incr * orun);
331                 if (timer->expires.tv64 > now.tv64)
332                         return orun;
333                 /*
334                  * This (and the ktime_add() below) is the
335                  * correction for exact:
336                  */
337                 orun++;
338         }
339         timer->expires = ktime_add(timer->expires, interval);
340
341         return orun;
342 }
343
344 /*
345  * enqueue_hrtimer - internal function to (re)start a timer
346  *
347  * The timer is inserted in expiry order. Insertion into the
348  * red black tree is O(log(n)). Must hold the base lock.
349  */
350 static void enqueue_hrtimer(struct hrtimer *timer, struct hrtimer_base *base)
351 {
352         struct rb_node **link = &base->active.rb_node;
353         struct rb_node *parent = NULL;
354         struct hrtimer *entry;
355
356         /*
357          * Find the right place in the rbtree:
358          */
359         while (*link) {
360                 parent = *link;
361                 entry = rb_entry(parent, struct hrtimer, node);
362                 /*
363                  * We dont care about collisions. Nodes with
364                  * the same expiry time stay together.
365                  */
366                 if (timer->expires.tv64 < entry->expires.tv64)
367                         link = &(*link)->rb_left;
368                 else
369                         link = &(*link)->rb_right;
370         }
371
372         /*
373          * Insert the timer to the rbtree and check whether it
374          * replaces the first pending timer
375          */
376         rb_link_node(&timer->node, parent, link);
377         rb_insert_color(&timer->node, &base->active);
378
379         if (!base->first || timer->expires.tv64 <
380             rb_entry(base->first, struct hrtimer, node)->expires.tv64)
381                 base->first = &timer->node;
382 }
383
384 /*
385  * __remove_hrtimer - internal function to remove a timer
386  *
387  * Caller must hold the base lock.
388  */
389 static void __remove_hrtimer(struct hrtimer *timer, struct hrtimer_base *base)
390 {
391         /*
392          * Remove the timer from the rbtree and replace the
393          * first entry pointer if necessary.
394          */
395         if (base->first == &timer->node)
396                 base->first = rb_next(&timer->node);
397         rb_erase(&timer->node, &base->active);
398         rb_set_parent(&timer->node, &timer->node);
399 }
400
401 /*
402  * remove hrtimer, called with base lock held
403  */
404 static inline int
405 remove_hrtimer(struct hrtimer *timer, struct hrtimer_base *base)
406 {
407         if (hrtimer_active(timer)) {
408                 __remove_hrtimer(timer, base);
409                 return 1;
410         }
411         return 0;
412 }
413
414 /**
415  * hrtimer_start - (re)start an relative timer on the current CPU
416  * @timer:      the timer to be added
417  * @tim:        expiry time
418  * @mode:       expiry mode: absolute (HRTIMER_ABS) or relative (HRTIMER_REL)
419  *
420  * Returns:
421  *  0 on success
422  *  1 when the timer was active
423  */
424 int
425 hrtimer_start(struct hrtimer *timer, ktime_t tim, const enum hrtimer_mode mode)
426 {
427         struct hrtimer_base *base, *new_base;
428         unsigned long flags;
429         int ret;
430
431         base = lock_hrtimer_base(timer, &flags);
432
433         /* Remove an active timer from the queue: */
434         ret = remove_hrtimer(timer, base);
435
436         /* Switch the timer base, if necessary: */
437         new_base = switch_hrtimer_base(timer, base);
438
439         if (mode == HRTIMER_REL) {
440                 tim = ktime_add(tim, new_base->get_time());
441                 /*
442                  * CONFIG_TIME_LOW_RES is a temporary way for architectures
443                  * to signal that they simply return xtime in
444                  * do_gettimeoffset(). In this case we want to round up by
445                  * resolution when starting a relative timer, to avoid short
446                  * timeouts. This will go away with the GTOD framework.
447                  */
448 #ifdef CONFIG_TIME_LOW_RES
449                 tim = ktime_add(tim, base->resolution);
450 #endif
451         }
452         timer->expires = tim;
453
454         enqueue_hrtimer(timer, new_base);
455
456         unlock_hrtimer_base(timer, &flags);
457
458         return ret;
459 }
460 EXPORT_SYMBOL_GPL(hrtimer_start);
461
462 /**
463  * hrtimer_try_to_cancel - try to deactivate a timer
464  * @timer:      hrtimer to stop
465  *
466  * Returns:
467  *  0 when the timer was not active
468  *  1 when the timer was active
469  * -1 when the timer is currently excuting the callback function and
470  *    cannot be stopped
471  */
472 int hrtimer_try_to_cancel(struct hrtimer *timer)
473 {
474         struct hrtimer_base *base;
475         unsigned long flags;
476         int ret = -1;
477
478         base = lock_hrtimer_base(timer, &flags);
479
480         if (base->curr_timer != timer)
481                 ret = remove_hrtimer(timer, base);
482
483         unlock_hrtimer_base(timer, &flags);
484
485         return ret;
486
487 }
488 EXPORT_SYMBOL_GPL(hrtimer_try_to_cancel);
489
490 /**
491  * hrtimer_cancel - cancel a timer and wait for the handler to finish.
492  * @timer:      the timer to be cancelled
493  *
494  * Returns:
495  *  0 when the timer was not active
496  *  1 when the timer was active
497  */
498 int hrtimer_cancel(struct hrtimer *timer)
499 {
500         for (;;) {
501                 int ret = hrtimer_try_to_cancel(timer);
502
503                 if (ret >= 0)
504                         return ret;
505                 cpu_relax();
506         }
507 }
508 EXPORT_SYMBOL_GPL(hrtimer_cancel);
509
510 /**
511  * hrtimer_get_remaining - get remaining time for the timer
512  * @timer:      the timer to read
513  */
514 ktime_t hrtimer_get_remaining(const struct hrtimer *timer)
515 {
516         struct hrtimer_base *base;
517         unsigned long flags;
518         ktime_t rem;
519
520         base = lock_hrtimer_base(timer, &flags);
521         rem = ktime_sub(timer->expires, timer->base->get_time());
522         unlock_hrtimer_base(timer, &flags);
523
524         return rem;
525 }
526 EXPORT_SYMBOL_GPL(hrtimer_get_remaining);
527
528 #ifdef CONFIG_NO_IDLE_HZ
529 /**
530  * hrtimer_get_next_event - get the time until next expiry event
531  *
532  * Returns the delta to the next expiry event or KTIME_MAX if no timer
533  * is pending.
534  */
535 ktime_t hrtimer_get_next_event(void)
536 {
537         struct hrtimer_base *base = __get_cpu_var(hrtimer_bases);
538         ktime_t delta, mindelta = { .tv64 = KTIME_MAX };
539         unsigned long flags;
540         int i;
541
542         for (i = 0; i < MAX_HRTIMER_BASES; i++, base++) {
543                 struct hrtimer *timer;
544
545                 spin_lock_irqsave(&base->lock, flags);
546                 if (!base->first) {
547                         spin_unlock_irqrestore(&base->lock, flags);
548                         continue;
549                 }
550                 timer = rb_entry(base->first, struct hrtimer, node);
551                 delta.tv64 = timer->expires.tv64;
552                 spin_unlock_irqrestore(&base->lock, flags);
553                 delta = ktime_sub(delta, base->get_time());
554                 if (delta.tv64 < mindelta.tv64)
555                         mindelta.tv64 = delta.tv64;
556         }
557         if (mindelta.tv64 < 0)
558                 mindelta.tv64 = 0;
559         return mindelta;
560 }
561 #endif
562
563 /**
564  * hrtimer_init - initialize a timer to the given clock
565  * @timer:      the timer to be initialized
566  * @clock_id:   the clock to be used
567  * @mode:       timer mode abs/rel
568  */
569 void hrtimer_init(struct hrtimer *timer, clockid_t clock_id,
570                   enum hrtimer_mode mode)
571 {
572         struct hrtimer_base *bases;
573
574         memset(timer, 0, sizeof(struct hrtimer));
575
576         bases = __raw_get_cpu_var(hrtimer_bases);
577
578         if (clock_id == CLOCK_REALTIME && mode != HRTIMER_ABS)
579                 clock_id = CLOCK_MONOTONIC;
580
581         timer->base = &bases[clock_id];
582         rb_set_parent(&timer->node, &timer->node);
583 }
584 EXPORT_SYMBOL_GPL(hrtimer_init);
585
586 /**
587  * hrtimer_get_res - get the timer resolution for a clock
588  * @which_clock: which clock to query
589  * @tp:          pointer to timespec variable to store the resolution
590  *
591  * Store the resolution of the clock selected by @which_clock in the
592  * variable pointed to by @tp.
593  */
594 int hrtimer_get_res(const clockid_t which_clock, struct timespec *tp)
595 {
596         struct hrtimer_base *bases;
597
598         bases = __raw_get_cpu_var(hrtimer_bases);
599         *tp = ktime_to_timespec(bases[which_clock].resolution);
600
601         return 0;
602 }
603 EXPORT_SYMBOL_GPL(hrtimer_get_res);
604
605 /*
606  * Expire the per base hrtimer-queue:
607  */
608 static inline void run_hrtimer_queue(struct hrtimer_base *base)
609 {
610         struct rb_node *node;
611
612         if (!base->first)
613                 return;
614
615         if (base->get_softirq_time)
616                 base->softirq_time = base->get_softirq_time();
617
618         spin_lock_irq(&base->lock);
619
620         while ((node = base->first)) {
621                 struct hrtimer *timer;
622                 int (*fn)(struct hrtimer *);
623                 int restart;
624
625                 timer = rb_entry(node, struct hrtimer, node);
626                 if (base->softirq_time.tv64 <= timer->expires.tv64)
627                         break;
628
629                 fn = timer->function;
630                 set_curr_timer(base, timer);
631                 __remove_hrtimer(timer, base);
632                 spin_unlock_irq(&base->lock);
633
634                 restart = fn(timer);
635
636                 spin_lock_irq(&base->lock);
637
638                 if (restart != HRTIMER_NORESTART) {
639                         BUG_ON(hrtimer_active(timer));
640                         enqueue_hrtimer(timer, base);
641                 }
642         }
643         set_curr_timer(base, NULL);
644         spin_unlock_irq(&base->lock);
645 }
646
647 /*
648  * Called from timer softirq every jiffy, expire hrtimers:
649  */
650 void hrtimer_run_queues(void)
651 {
652         struct hrtimer_base *base = __get_cpu_var(hrtimer_bases);
653         int i;
654
655         hrtimer_get_softirq_time(base);
656
657         for (i = 0; i < MAX_HRTIMER_BASES; i++)
658                 run_hrtimer_queue(&base[i]);
659 }
660
661 /*
662  * Sleep related functions:
663  */
664 static int hrtimer_wakeup(struct hrtimer *timer)
665 {
666         struct hrtimer_sleeper *t =
667                 container_of(timer, struct hrtimer_sleeper, timer);
668         struct task_struct *task = t->task;
669
670         t->task = NULL;
671         if (task)
672                 wake_up_process(task);
673
674         return HRTIMER_NORESTART;
675 }
676
677 void hrtimer_init_sleeper(struct hrtimer_sleeper *sl, struct task_struct *task)
678 {
679         sl->timer.function = hrtimer_wakeup;
680         sl->task = task;
681 }
682
683 static int __sched do_nanosleep(struct hrtimer_sleeper *t, enum hrtimer_mode mode)
684 {
685         hrtimer_init_sleeper(t, current);
686
687         do {
688                 set_current_state(TASK_INTERRUPTIBLE);
689                 hrtimer_start(&t->timer, t->timer.expires, mode);
690
691                 schedule();
692
693                 hrtimer_cancel(&t->timer);
694                 mode = HRTIMER_ABS;
695
696         } while (t->task && !signal_pending(current));
697
698         return t->task == NULL;
699 }
700
701 long __sched hrtimer_nanosleep_restart(struct restart_block *restart)
702 {
703         struct hrtimer_sleeper t;
704         struct timespec __user *rmtp;
705         struct timespec tu;
706         ktime_t time;
707
708         restart->fn = do_no_restart_syscall;
709
710         hrtimer_init(&t.timer, restart->arg0, HRTIMER_ABS);
711         t.timer.expires.tv64 = ((u64)restart->arg3 << 32) | (u64) restart->arg2;
712
713         if (do_nanosleep(&t, HRTIMER_ABS))
714                 return 0;
715
716         rmtp = (struct timespec __user *) restart->arg1;
717         if (rmtp) {
718                 time = ktime_sub(t.timer.expires, t.timer.base->get_time());
719                 if (time.tv64 <= 0)
720                         return 0;
721                 tu = ktime_to_timespec(time);
722                 if (copy_to_user(rmtp, &tu, sizeof(tu)))
723                         return -EFAULT;
724         }
725
726         restart->fn = hrtimer_nanosleep_restart;
727
728         /* The other values in restart are already filled in */
729         return -ERESTART_RESTARTBLOCK;
730 }
731
732 long hrtimer_nanosleep(struct timespec *rqtp, struct timespec __user *rmtp,
733                        const enum hrtimer_mode mode, const clockid_t clockid)
734 {
735         struct restart_block *restart;
736         struct hrtimer_sleeper t;
737         struct timespec tu;
738         ktime_t rem;
739
740         hrtimer_init(&t.timer, clockid, mode);
741         t.timer.expires = timespec_to_ktime(*rqtp);
742         if (do_nanosleep(&t, mode))
743                 return 0;
744
745         /* Absolute timers do not update the rmtp value and restart: */
746         if (mode == HRTIMER_ABS)
747                 return -ERESTARTNOHAND;
748
749         if (rmtp) {
750                 rem = ktime_sub(t.timer.expires, t.timer.base->get_time());
751                 if (rem.tv64 <= 0)
752                         return 0;
753                 tu = ktime_to_timespec(rem);
754                 if (copy_to_user(rmtp, &tu, sizeof(tu)))
755                         return -EFAULT;
756         }
757
758         restart = &current_thread_info()->restart_block;
759         restart->fn = hrtimer_nanosleep_restart;
760         restart->arg0 = (unsigned long) t.timer.base->index;
761         restart->arg1 = (unsigned long) rmtp;
762         restart->arg2 = t.timer.expires.tv64 & 0xFFFFFFFF;
763         restart->arg3 = t.timer.expires.tv64 >> 32;
764
765         return -ERESTART_RESTARTBLOCK;
766 }
767
768 asmlinkage long
769 sys_nanosleep(struct timespec __user *rqtp, struct timespec __user *rmtp)
770 {
771         struct timespec tu;
772
773         if (copy_from_user(&tu, rqtp, sizeof(tu)))
774                 return -EFAULT;
775
776         if (!timespec_valid(&tu))
777                 return -EINVAL;
778
779         return hrtimer_nanosleep(&tu, rmtp, HRTIMER_REL, CLOCK_MONOTONIC);
780 }
781
782 /*
783  * Functions related to boot-time initialization:
784  */
785 static void __devinit init_hrtimers_cpu(int cpu)
786 {
787         struct hrtimer_base *base = per_cpu(hrtimer_bases, cpu);
788         int i;
789
790         for (i = 0; i < MAX_HRTIMER_BASES; i++, base++) {
791                 spin_lock_init(&base->lock);
792                 lockdep_set_class(&base->lock, &base->lock_key);
793         }
794 }
795
796 #ifdef CONFIG_HOTPLUG_CPU
797
798 static void migrate_hrtimer_list(struct hrtimer_base *old_base,
799                                 struct hrtimer_base *new_base)
800 {
801         struct hrtimer *timer;
802         struct rb_node *node;
803
804         while ((node = rb_first(&old_base->active))) {
805                 timer = rb_entry(node, struct hrtimer, node);
806                 __remove_hrtimer(timer, old_base);
807                 timer->base = new_base;
808                 enqueue_hrtimer(timer, new_base);
809         }
810 }
811
812 static void migrate_hrtimers(int cpu)
813 {
814         struct hrtimer_base *old_base, *new_base;
815         int i;
816
817         BUG_ON(cpu_online(cpu));
818         old_base = per_cpu(hrtimer_bases, cpu);
819         new_base = get_cpu_var(hrtimer_bases);
820
821         local_irq_disable();
822
823         for (i = 0; i < MAX_HRTIMER_BASES; i++) {
824
825                 spin_lock(&new_base->lock);
826                 spin_lock(&old_base->lock);
827
828                 BUG_ON(old_base->curr_timer);
829
830                 migrate_hrtimer_list(old_base, new_base);
831
832                 spin_unlock(&old_base->lock);
833                 spin_unlock(&new_base->lock);
834                 old_base++;
835                 new_base++;
836         }
837
838         local_irq_enable();
839         put_cpu_var(hrtimer_bases);
840 }
841 #endif /* CONFIG_HOTPLUG_CPU */
842
843 static int __cpuinit hrtimer_cpu_notify(struct notifier_block *self,
844                                         unsigned long action, void *hcpu)
845 {
846         long cpu = (long)hcpu;
847
848         switch (action) {
849
850         case CPU_UP_PREPARE:
851                 init_hrtimers_cpu(cpu);
852                 break;
853
854 #ifdef CONFIG_HOTPLUG_CPU
855         case CPU_DEAD:
856                 migrate_hrtimers(cpu);
857                 break;
858 #endif
859
860         default:
861                 break;
862         }
863
864         return NOTIFY_OK;
865 }
866
867 static struct notifier_block __cpuinitdata hrtimers_nb = {
868         .notifier_call = hrtimer_cpu_notify,
869 };
870
871 void __init hrtimers_init(void)
872 {
873         hrtimer_cpu_notify(&hrtimers_nb, (unsigned long)CPU_UP_PREPARE,
874                           (void *)(long)smp_processor_id());
875         register_cpu_notifier(&hrtimers_nb);
876 }
877