1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33#include <linux/mm.h>
34#include <linux/interrupt.h>
35#include <linux/slab.h>
36#include <linux/time.h>
37#include <linux/mutex.h>
38
39#include <asm/uaccess.h>
40#include <linux/list.h>
41#include <linux/init.h>
42#include <linux/compiler.h>
43#include <linux/idr.h>
44#include <linux/posix-timers.h>
45#include <linux/syscalls.h>
46#include <linux/wait.h>
47#include <linux/workqueue.h>
48#include <linux/module.h>
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71static struct kmem_cache *posix_timers_cache;
72static struct idr posix_timers_id;
73static DEFINE_SPINLOCK(idr_lock);
74
75
76
77
78
79#if SIGEV_THREAD_ID != (SIGEV_THREAD_ID & \
80 ~(SIGEV_SIGNAL | SIGEV_NONE | SIGEV_THREAD))
81#error "SIGEV_THREAD_ID must not share bit with other SIGEV values!"
82#endif
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134static struct k_clock posix_clocks[MAX_CLOCKS];
135
136
137
138
139static int common_nsleep(const clockid_t, int flags, struct timespec *t,
140 struct timespec __user *rmtp);
141static void common_timer_get(struct k_itimer *, struct itimerspec *);
142static int common_timer_set(struct k_itimer *, int,
143 struct itimerspec *, struct itimerspec *);
144static int common_timer_del(struct k_itimer *timer);
145
146static enum hrtimer_restart posix_timer_fn(struct hrtimer *data);
147
148static struct k_itimer *lock_timer(timer_t timer_id, unsigned long *flags);
149
150static inline void unlock_timer(struct k_itimer *timr, unsigned long flags)
151{
152 spin_unlock_irqrestore(&timr->it_lock, flags);
153}
154
155
156
157
158#define CLOCK_DISPATCH(clock, call, arglist) \
159 ((clock) < 0 ? posix_cpu_##call arglist : \
160 (posix_clocks[clock].call != NULL \
161 ? (*posix_clocks[clock].call) arglist : common_##call arglist))
162
163
164
165
166
167
168
169
170
171static inline int common_clock_getres(const clockid_t which_clock,
172 struct timespec *tp)
173{
174 tp->tv_sec = 0;
175 tp->tv_nsec = posix_clocks[which_clock].res;
176 return 0;
177}
178
179
180
181
182static int common_clock_get(clockid_t which_clock, struct timespec *tp)
183{
184 ktime_get_real_ts(tp);
185 return 0;
186}
187
188static inline int common_clock_set(const clockid_t which_clock,
189 struct timespec *tp)
190{
191 return do_sys_settimeofday(tp, NULL);
192}
193
194static int common_timer_create(struct k_itimer *new_timer)
195{
196 hrtimer_init(&new_timer->it.real.timer, new_timer->it_clock, 0);
197 return 0;
198}
199
200static int no_timer_create(struct k_itimer *new_timer)
201{
202 return -EOPNOTSUPP;
203}
204
205static int no_nsleep(const clockid_t which_clock, int flags,
206 struct timespec *tsave, struct timespec __user *rmtp)
207{
208 return -EOPNOTSUPP;
209}
210
211
212
213
214static inline int invalid_clockid(const clockid_t which_clock)
215{
216 if (which_clock < 0)
217 return 0;
218 if ((unsigned) which_clock >= MAX_CLOCKS)
219 return 1;
220 if (posix_clocks[which_clock].clock_getres != NULL)
221 return 0;
222 if (posix_clocks[which_clock].res != 0)
223 return 0;
224 return 1;
225}
226
227
228
229
230static int posix_ktime_get_ts(clockid_t which_clock, struct timespec *tp)
231{
232 ktime_get_ts(tp);
233 return 0;
234}
235
236
237
238
239static int posix_get_monotonic_raw(clockid_t which_clock, struct timespec *tp)
240{
241 getrawmonotonic(tp);
242 return 0;
243}
244
245
246
247
248static __init int init_posix_timers(void)
249{
250 struct k_clock clock_realtime = {
251 .clock_getres = hrtimer_get_res,
252 };
253 struct k_clock clock_monotonic = {
254 .clock_getres = hrtimer_get_res,
255 .clock_get = posix_ktime_get_ts,
256 .clock_set = do_posix_clock_nosettime,
257 };
258 struct k_clock clock_monotonic_raw = {
259 .clock_getres = hrtimer_get_res,
260 .clock_get = posix_get_monotonic_raw,
261 .clock_set = do_posix_clock_nosettime,
262 .timer_create = no_timer_create,
263 .nsleep = no_nsleep,
264 };
265
266 register_posix_clock(CLOCK_REALTIME, &clock_realtime);
267 register_posix_clock(CLOCK_MONOTONIC, &clock_monotonic);
268 register_posix_clock(CLOCK_MONOTONIC_RAW, &clock_monotonic_raw);
269
270 posix_timers_cache = kmem_cache_create("posix_timers_cache",
271 sizeof (struct k_itimer), 0, SLAB_PANIC,
272 NULL);
273 idr_init(&posix_timers_id);
274 return 0;
275}
276
277__initcall(init_posix_timers);
278
279static void schedule_next_timer(struct k_itimer *timr)
280{
281 struct hrtimer *timer = &timr->it.real.timer;
282
283 if (timr->it.real.interval.tv64 == 0)
284 return;
285
286 timr->it_overrun += (unsigned int) hrtimer_forward(timer,
287 timer->base->get_time(),
288 timr->it.real.interval);
289
290 timr->it_overrun_last = timr->it_overrun;
291 timr->it_overrun = -1;
292 ++timr->it_requeue_pending;
293 hrtimer_restart(timer);
294}
295
296
297
298
299
300
301
302
303
304
305
306
307void do_schedule_next_timer(struct siginfo *info)
308{
309 struct k_itimer *timr;
310 unsigned long flags;
311
312 timr = lock_timer(info->si_tid, &flags);
313
314 if (timr && timr->it_requeue_pending == info->si_sys_private) {
315 if (timr->it_clock < 0)
316 posix_cpu_timer_schedule(timr);
317 else
318 schedule_next_timer(timr);
319
320 info->si_overrun += timr->it_overrun_last;
321 }
322
323 if (timr)
324 unlock_timer(timr, flags);
325}
326
327int posix_timer_event(struct k_itimer *timr, int si_private)
328{
329 struct task_struct *task;
330 int shared, ret = -1;
331
332
333
334
335
336
337
338
339
340
341
342 timr->sigq->info.si_sys_private = si_private;
343
344 rcu_read_lock();
345 task = pid_task(timr->it_pid, PIDTYPE_PID);
346 if (task) {
347 shared = !(timr->it_sigev_notify & SIGEV_THREAD_ID);
348 ret = send_sigqueue(timr->sigq, task, shared);
349 }
350 rcu_read_unlock();
351
352 return ret > 0;
353}
354EXPORT_SYMBOL_GPL(posix_timer_event);
355
356
357
358
359
360
361
362
363static enum hrtimer_restart posix_timer_fn(struct hrtimer *timer)
364{
365 struct k_itimer *timr;
366 unsigned long flags;
367 int si_private = 0;
368 enum hrtimer_restart ret = HRTIMER_NORESTART;
369
370 timr = container_of(timer, struct k_itimer, it.real.timer);
371 spin_lock_irqsave(&timr->it_lock, flags);
372
373 if (timr->it.real.interval.tv64 != 0)
374 si_private = ++timr->it_requeue_pending;
375
376 if (posix_timer_event(timr, si_private)) {
377
378
379
380
381
382 if (timr->it.real.interval.tv64 != 0) {
383 ktime_t now = hrtimer_cb_get_time(timer);
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407#ifdef CONFIG_HIGH_RES_TIMERS
408 {
409 ktime_t kj = ktime_set(0, NSEC_PER_SEC / HZ);
410
411 if (timr->it.real.interval.tv64 < kj.tv64)
412 now = ktime_add(now, kj);
413 }
414#endif
415 timr->it_overrun += (unsigned int)
416 hrtimer_forward(timer, now,
417 timr->it.real.interval);
418 ret = HRTIMER_RESTART;
419 ++timr->it_requeue_pending;
420 }
421 }
422
423 unlock_timer(timr, flags);
424 return ret;
425}
426
427static struct pid *good_sigevent(sigevent_t * event)
428{
429 struct task_struct *rtn = current->group_leader;
430
431 if ((event->sigev_notify & SIGEV_THREAD_ID ) &&
432 (!(rtn = find_task_by_vpid(event->sigev_notify_thread_id)) ||
433 !same_thread_group(rtn, current) ||
434 (event->sigev_notify & ~SIGEV_THREAD_ID) != SIGEV_SIGNAL))
435 return NULL;
436
437 if (((event->sigev_notify & ~SIGEV_THREAD_ID) != SIGEV_NONE) &&
438 ((event->sigev_signo <= 0) || (event->sigev_signo > SIGRTMAX)))
439 return NULL;
440
441 return task_pid(rtn);
442}
443
444void register_posix_clock(const clockid_t clock_id, struct k_clock *new_clock)
445{
446 if ((unsigned) clock_id >= MAX_CLOCKS) {
447 printk("POSIX clock register failed for clock_id %d\n",
448 clock_id);
449 return;
450 }
451
452 posix_clocks[clock_id] = *new_clock;
453}
454EXPORT_SYMBOL_GPL(register_posix_clock);
455
456static struct k_itimer * alloc_posix_timer(void)
457{
458 struct k_itimer *tmr;
459 tmr = kmem_cache_zalloc(posix_timers_cache, GFP_KERNEL);
460 if (!tmr)
461 return tmr;
462 if (unlikely(!(tmr->sigq = sigqueue_alloc()))) {
463 kmem_cache_free(posix_timers_cache, tmr);
464 return NULL;
465 }
466 memset(&tmr->sigq->info, 0, sizeof(siginfo_t));
467 return tmr;
468}
469
470#define IT_ID_SET 1
471#define IT_ID_NOT_SET 0
472static void release_posix_timer(struct k_itimer *tmr, int it_id_set)
473{
474 if (it_id_set) {
475 unsigned long flags;
476 spin_lock_irqsave(&idr_lock, flags);
477 idr_remove(&posix_timers_id, tmr->it_id);
478 spin_unlock_irqrestore(&idr_lock, flags);
479 }
480 put_pid(tmr->it_pid);
481 sigqueue_free(tmr->sigq);
482 kmem_cache_free(posix_timers_cache, tmr);
483}
484
485
486
487SYSCALL_DEFINE3(timer_create, const clockid_t, which_clock,
488 struct sigevent __user *, timer_event_spec,
489 timer_t __user *, created_timer_id)
490{
491 struct k_itimer *new_timer;
492 int error, new_timer_id;
493 sigevent_t event;
494 int it_id_set = IT_ID_NOT_SET;
495
496 if (invalid_clockid(which_clock))
497 return -EINVAL;
498
499 new_timer = alloc_posix_timer();
500 if (unlikely(!new_timer))
501 return -EAGAIN;
502
503 spin_lock_init(&new_timer->it_lock);
504 retry:
505 if (unlikely(!idr_pre_get(&posix_timers_id, GFP_KERNEL))) {
506 error = -EAGAIN;
507 goto out;
508 }
509 spin_lock_irq(&idr_lock);
510 error = idr_get_new(&posix_timers_id, new_timer, &new_timer_id);
511 spin_unlock_irq(&idr_lock);
512 if (error) {
513 if (error == -EAGAIN)
514 goto retry;
515
516
517
518
519 error = -EAGAIN;
520 goto out;
521 }
522
523 it_id_set = IT_ID_SET;
524 new_timer->it_id = (timer_t) new_timer_id;
525 new_timer->it_clock = which_clock;
526 new_timer->it_overrun = -1;
527 error = CLOCK_DISPATCH(which_clock, timer_create, (new_timer));
528 if (error)
529 goto out;
530
531
532
533
534
535 if (copy_to_user(created_timer_id,
536 &new_timer_id, sizeof (new_timer_id))) {
537 error = -EFAULT;
538 goto out;
539 }
540 if (timer_event_spec) {
541 if (copy_from_user(&event, timer_event_spec, sizeof (event))) {
542 error = -EFAULT;
543 goto out;
544 }
545 rcu_read_lock();
546 new_timer->it_pid = get_pid(good_sigevent(&event));
547 rcu_read_unlock();
548 if (!new_timer->it_pid) {
549 error = -EINVAL;
550 goto out;
551 }
552 } else {
553 event.sigev_notify = SIGEV_SIGNAL;
554 event.sigev_signo = SIGALRM;
555 event.sigev_value.sival_int = new_timer->it_id;
556 new_timer->it_pid = get_pid(task_tgid(current));
557 }
558
559 new_timer->it_sigev_notify = event.sigev_notify;
560 new_timer->sigq->info.si_signo = event.sigev_signo;
561 new_timer->sigq->info.si_value = event.sigev_value;
562 new_timer->sigq->info.si_tid = new_timer->it_id;
563 new_timer->sigq->info.si_code = SI_TIMER;
564
565 spin_lock_irq(¤t->sighand->siglock);
566 new_timer->it_signal = current->signal;
567 list_add(&new_timer->list, ¤t->signal->posix_timers);
568 spin_unlock_irq(¤t->sighand->siglock);
569
570 return 0;
571
572
573
574
575
576
577out:
578 release_posix_timer(new_timer, it_id_set);
579 return error;
580}
581
582
583
584
585
586
587
588
589static struct k_itimer *lock_timer(timer_t timer_id, unsigned long *flags)
590{
591 struct k_itimer *timr;
592
593
594
595
596
597 spin_lock_irqsave(&idr_lock, *flags);
598 timr = idr_find(&posix_timers_id, (int)timer_id);
599 if (timr) {
600 spin_lock(&timr->it_lock);
601 if (timr->it_signal == current->signal) {
602 spin_unlock(&idr_lock);
603 return timr;
604 }
605 spin_unlock(&timr->it_lock);
606 }
607 spin_unlock_irqrestore(&idr_lock, *flags);
608
609 return NULL;
610}
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628static void
629common_timer_get(struct k_itimer *timr, struct itimerspec *cur_setting)
630{
631 ktime_t now, remaining, iv;
632 struct hrtimer *timer = &timr->it.real.timer;
633
634 memset(cur_setting, 0, sizeof(struct itimerspec));
635
636 iv = timr->it.real.interval;
637
638
639 if (iv.tv64)
640 cur_setting->it_interval = ktime_to_timespec(iv);
641 else if (!hrtimer_active(timer) &&
642 (timr->it_sigev_notify & ~SIGEV_THREAD_ID) != SIGEV_NONE)
643 return;
644
645 now = timer->base->get_time();
646
647
648
649
650
651
652 if (iv.tv64 && (timr->it_requeue_pending & REQUEUE_PENDING ||
653 (timr->it_sigev_notify & ~SIGEV_THREAD_ID) == SIGEV_NONE))
654 timr->it_overrun += (unsigned int) hrtimer_forward(timer, now, iv);
655
656 remaining = ktime_sub(hrtimer_get_expires(timer), now);
657
658 if (remaining.tv64 <= 0) {
659
660
661
662
663 if ((timr->it_sigev_notify & ~SIGEV_THREAD_ID) != SIGEV_NONE)
664 cur_setting->it_value.tv_nsec = 1;
665 } else
666 cur_setting->it_value = ktime_to_timespec(remaining);
667}
668
669
670SYSCALL_DEFINE2(timer_gettime, timer_t, timer_id,
671 struct itimerspec __user *, setting)
672{
673 struct k_itimer *timr;
674 struct itimerspec cur_setting;
675 unsigned long flags;
676
677 timr = lock_timer(timer_id, &flags);
678 if (!timr)
679 return -EINVAL;
680
681 CLOCK_DISPATCH(timr->it_clock, timer_get, (timr, &cur_setting));
682
683 unlock_timer(timr, flags);
684
685 if (copy_to_user(setting, &cur_setting, sizeof (cur_setting)))
686 return -EFAULT;
687
688 return 0;
689}
690
691
692
693
694
695
696
697
698
699
700SYSCALL_DEFINE1(timer_getoverrun, timer_t, timer_id)
701{
702 struct k_itimer *timr;
703 int overrun;
704 unsigned long flags;
705
706 timr = lock_timer(timer_id, &flags);
707 if (!timr)
708 return -EINVAL;
709
710 overrun = timr->it_overrun_last;
711 unlock_timer(timr, flags);
712
713 return overrun;
714}
715
716
717
718static int
719common_timer_set(struct k_itimer *timr, int flags,
720 struct itimerspec *new_setting, struct itimerspec *old_setting)
721{
722 struct hrtimer *timer = &timr->it.real.timer;
723 enum hrtimer_mode mode;
724
725 if (old_setting)
726 common_timer_get(timr, old_setting);
727
728
729 timr->it.real.interval.tv64 = 0;
730
731
732
733
734 if (hrtimer_try_to_cancel(timer) < 0)
735 return TIMER_RETRY;
736
737 timr->it_requeue_pending = (timr->it_requeue_pending + 2) &
738 ~REQUEUE_PENDING;
739 timr->it_overrun_last = 0;
740
741
742 if (!new_setting->it_value.tv_sec && !new_setting->it_value.tv_nsec)
743 return 0;
744
745 mode = flags & TIMER_ABSTIME ? HRTIMER_MODE_ABS : HRTIMER_MODE_REL;
746 hrtimer_init(&timr->it.real.timer, timr->it_clock, mode);
747 timr->it.real.timer.function = posix_timer_fn;
748
749 hrtimer_set_expires(timer, timespec_to_ktime(new_setting->it_value));
750
751
752 timr->it.real.interval = timespec_to_ktime(new_setting->it_interval);
753
754
755 if (((timr->it_sigev_notify & ~SIGEV_THREAD_ID) == SIGEV_NONE)) {
756
757 if (mode == HRTIMER_MODE_REL) {
758 hrtimer_add_expires(timer, timer->base->get_time());
759 }
760 return 0;
761 }
762
763 hrtimer_start_expires(timer, mode);
764 return 0;
765}
766
767
768SYSCALL_DEFINE4(timer_settime, timer_t, timer_id, int, flags,
769 const struct itimerspec __user *, new_setting,
770 struct itimerspec __user *, old_setting)
771{
772 struct k_itimer *timr;
773 struct itimerspec new_spec, old_spec;
774 int error = 0;
775 unsigned long flag;
776 struct itimerspec *rtn = old_setting ? &old_spec : NULL;
777
778 if (!new_setting)
779 return -EINVAL;
780
781 if (copy_from_user(&new_spec, new_setting, sizeof (new_spec)))
782 return -EFAULT;
783
784 if (!timespec_valid(&new_spec.it_interval) ||
785 !timespec_valid(&new_spec.it_value))
786 return -EINVAL;
787retry:
788 timr = lock_timer(timer_id, &flag);
789 if (!timr)
790 return -EINVAL;
791
792 error = CLOCK_DISPATCH(timr->it_clock, timer_set,
793 (timr, flags, &new_spec, rtn));
794
795 unlock_timer(timr, flag);
796 if (error == TIMER_RETRY) {
797 rtn = NULL;
798 goto retry;
799 }
800
801 if (old_setting && !error &&
802 copy_to_user(old_setting, &old_spec, sizeof (old_spec)))
803 error = -EFAULT;
804
805 return error;
806}
807
808static inline int common_timer_del(struct k_itimer *timer)
809{
810 timer->it.real.interval.tv64 = 0;
811
812 if (hrtimer_try_to_cancel(&timer->it.real.timer) < 0)
813 return TIMER_RETRY;
814 return 0;
815}
816
817static inline int timer_delete_hook(struct k_itimer *timer)
818{
819 return CLOCK_DISPATCH(timer->it_clock, timer_del, (timer));
820}
821
822
823SYSCALL_DEFINE1(timer_delete, timer_t, timer_id)
824{
825 struct k_itimer *timer;
826 unsigned long flags;
827
828retry_delete:
829 timer = lock_timer(timer_id, &flags);
830 if (!timer)
831 return -EINVAL;
832
833 if (timer_delete_hook(timer) == TIMER_RETRY) {
834 unlock_timer(timer, flags);
835 goto retry_delete;
836 }
837
838 spin_lock(¤t->sighand->siglock);
839 list_del(&timer->list);
840 spin_unlock(¤t->sighand->siglock);
841
842
843
844
845 timer->it_signal = NULL;
846
847 unlock_timer(timer, flags);
848 release_posix_timer(timer, IT_ID_SET);
849 return 0;
850}
851
852
853
854
855static void itimer_delete(struct k_itimer *timer)
856{
857 unsigned long flags;
858
859retry_delete:
860 spin_lock_irqsave(&timer->it_lock, flags);
861
862 if (timer_delete_hook(timer) == TIMER_RETRY) {
863 unlock_timer(timer, flags);
864 goto retry_delete;
865 }
866 list_del(&timer->list);
867
868
869
870
871 timer->it_signal = NULL;
872
873 unlock_timer(timer, flags);
874 release_posix_timer(timer, IT_ID_SET);
875}
876
877
878
879
880
881void exit_itimers(struct signal_struct *sig)
882{
883 struct k_itimer *tmr;
884
885 while (!list_empty(&sig->posix_timers)) {
886 tmr = list_entry(sig->posix_timers.next, struct k_itimer, list);
887 itimer_delete(tmr);
888 }
889}
890
891
892int do_posix_clock_nosettime(const clockid_t clockid, struct timespec *tp)
893{
894 return -EINVAL;
895}
896EXPORT_SYMBOL_GPL(do_posix_clock_nosettime);
897
898int do_posix_clock_nonanosleep(const clockid_t clock, int flags,
899 struct timespec *t, struct timespec __user *r)
900{
901#ifndef ENOTSUP
902 return -EOPNOTSUPP;
903#else
904 return -ENOTSUP;
905#endif
906}
907EXPORT_SYMBOL_GPL(do_posix_clock_nonanosleep);
908
909SYSCALL_DEFINE2(clock_settime, const clockid_t, which_clock,
910 const struct timespec __user *, tp)
911{
912 struct timespec new_tp;
913
914 if (invalid_clockid(which_clock))
915 return -EINVAL;
916 if (copy_from_user(&new_tp, tp, sizeof (*tp)))
917 return -EFAULT;
918
919 return CLOCK_DISPATCH(which_clock, clock_set, (which_clock, &new_tp));
920}
921
922SYSCALL_DEFINE2(clock_gettime, const clockid_t, which_clock,
923 struct timespec __user *,tp)
924{
925 struct timespec kernel_tp;
926 int error;
927
928 if (invalid_clockid(which_clock))
929 return -EINVAL;
930 error = CLOCK_DISPATCH(which_clock, clock_get,
931 (which_clock, &kernel_tp));
932 if (!error && copy_to_user(tp, &kernel_tp, sizeof (kernel_tp)))
933 error = -EFAULT;
934
935 return error;
936
937}
938
939SYSCALL_DEFINE2(clock_getres, const clockid_t, which_clock,
940 struct timespec __user *, tp)
941{
942 struct timespec rtn_tp;
943 int error;
944
945 if (invalid_clockid(which_clock))
946 return -EINVAL;
947
948 error = CLOCK_DISPATCH(which_clock, clock_getres,
949 (which_clock, &rtn_tp));
950
951 if (!error && tp && copy_to_user(tp, &rtn_tp, sizeof (rtn_tp))) {
952 error = -EFAULT;
953 }
954
955 return error;
956}
957
958
959
960
961static int common_nsleep(const clockid_t which_clock, int flags,
962 struct timespec *tsave, struct timespec __user *rmtp)
963{
964 return hrtimer_nanosleep(tsave, rmtp, flags & TIMER_ABSTIME ?
965 HRTIMER_MODE_ABS : HRTIMER_MODE_REL,
966 which_clock);
967}
968
969SYSCALL_DEFINE4(clock_nanosleep, const clockid_t, which_clock, int, flags,
970 const struct timespec __user *, rqtp,
971 struct timespec __user *, rmtp)
972{
973 struct timespec t;
974
975 if (invalid_clockid(which_clock))
976 return -EINVAL;
977
978 if (copy_from_user(&t, rqtp, sizeof (struct timespec)))
979 return -EFAULT;
980
981 if (!timespec_valid(&t))
982 return -EINVAL;
983
984 return CLOCK_DISPATCH(which_clock, nsleep,
985 (which_clock, flags, &t, rmtp));
986}
987
988
989
990
991static int common_nsleep_restart(struct restart_block *restart_block)
992{
993 return hrtimer_nanosleep_restart(restart_block);
994}
995
996
997
998
999
1000long
1001clock_nanosleep_restart(struct restart_block *restart_block)
1002{
1003 clockid_t which_clock = restart_block->arg0;
1004
1005 return CLOCK_DISPATCH(which_clock, nsleep_restart,
1006 (restart_block));
1007}
1008