1
2
3
4
5
6#include <linux/sched/signal.h>
7#include <linux/sched/cputime.h>
8#include <linux/posix-timers.h>
9#include <linux/errno.h>
10#include <linux/math64.h>
11#include <linux/uaccess.h>
12#include <linux/kernel_stat.h>
13#include <trace/events/timer.h>
14#include <linux/tick.h>
15#include <linux/workqueue.h>
16#include <linux/compat.h>
17#include <linux/sched/deadline.h>
18
19#include "posix-timers.h"
20
21static void posix_cpu_timer_rearm(struct k_itimer *timer);
22
23void posix_cputimers_group_init(struct posix_cputimers *pct, u64 cpu_limit)
24{
25 posix_cputimers_init(pct);
26 if (cpu_limit != RLIM_INFINITY) {
27 pct->bases[CPUCLOCK_PROF].nextevt = cpu_limit * NSEC_PER_SEC;
28 pct->timers_active = true;
29 }
30}
31
32
33
34
35
36
37
38void update_rlimit_cpu(struct task_struct *task, unsigned long rlim_new)
39{
40 u64 nsecs = rlim_new * NSEC_PER_SEC;
41
42 spin_lock_irq(&task->sighand->siglock);
43 set_process_cpu_timer(task, CPUCLOCK_PROF, &nsecs, NULL);
44 spin_unlock_irq(&task->sighand->siglock);
45}
46
47
48
49
50static struct pid *pid_for_clock(const clockid_t clock, bool gettime)
51{
52 const bool thread = !!CPUCLOCK_PERTHREAD(clock);
53 const pid_t upid = CPUCLOCK_PID(clock);
54 struct pid *pid;
55
56 if (CPUCLOCK_WHICH(clock) >= CPUCLOCK_MAX)
57 return NULL;
58
59
60
61
62
63 if (upid == 0)
64 return thread ? task_pid(current) : task_tgid(current);
65
66 pid = find_vpid(upid);
67 if (!pid)
68 return NULL;
69
70 if (thread) {
71 struct task_struct *tsk = pid_task(pid, PIDTYPE_PID);
72 return (tsk && same_thread_group(tsk, current)) ? pid : NULL;
73 }
74
75
76
77
78
79
80
81 if (gettime && (pid == task_pid(current)))
82 return task_tgid(current);
83
84
85
86
87 return pid_has_task(pid, PIDTYPE_TGID) ? pid : NULL;
88}
89
90static inline int validate_clock_permissions(const clockid_t clock)
91{
92 int ret;
93
94 rcu_read_lock();
95 ret = pid_for_clock(clock, false) ? 0 : -EINVAL;
96 rcu_read_unlock();
97
98 return ret;
99}
100
101static inline enum pid_type clock_pid_type(const clockid_t clock)
102{
103 return CPUCLOCK_PERTHREAD(clock) ? PIDTYPE_PID : PIDTYPE_TGID;
104}
105
106static inline struct task_struct *cpu_timer_task_rcu(struct k_itimer *timer)
107{
108 return pid_task(timer->it.cpu.pid, clock_pid_type(timer->it_clock));
109}
110
111
112
113
114
115static u64 bump_cpu_timer(struct k_itimer *timer, u64 now)
116{
117 u64 delta, incr, expires = timer->it.cpu.node.expires;
118 int i;
119
120 if (!timer->it_interval)
121 return expires;
122
123 if (now < expires)
124 return expires;
125
126 incr = timer->it_interval;
127 delta = now + incr - expires;
128
129
130 for (i = 0; incr < delta - incr; i++)
131 incr = incr << 1;
132
133 for (; i >= 0; incr >>= 1, i--) {
134 if (delta < incr)
135 continue;
136
137 timer->it.cpu.node.expires += incr;
138 timer->it_overrun += 1LL << i;
139 delta -= incr;
140 }
141 return timer->it.cpu.node.expires;
142}
143
144
145static inline bool expiry_cache_is_inactive(const struct posix_cputimers *pct)
146{
147 return !(~pct->bases[CPUCLOCK_PROF].nextevt |
148 ~pct->bases[CPUCLOCK_VIRT].nextevt |
149 ~pct->bases[CPUCLOCK_SCHED].nextevt);
150}
151
152static int
153posix_cpu_clock_getres(const clockid_t which_clock, struct timespec64 *tp)
154{
155 int error = validate_clock_permissions(which_clock);
156
157 if (!error) {
158 tp->tv_sec = 0;
159 tp->tv_nsec = ((NSEC_PER_SEC + HZ - 1) / HZ);
160 if (CPUCLOCK_WHICH(which_clock) == CPUCLOCK_SCHED) {
161
162
163
164
165
166 tp->tv_nsec = 1;
167 }
168 }
169 return error;
170}
171
172static int
173posix_cpu_clock_set(const clockid_t clock, const struct timespec64 *tp)
174{
175 int error = validate_clock_permissions(clock);
176
177
178
179
180
181 return error ? : -EPERM;
182}
183
184
185
186
187static u64 cpu_clock_sample(const clockid_t clkid, struct task_struct *p)
188{
189 u64 utime, stime;
190
191 if (clkid == CPUCLOCK_SCHED)
192 return task_sched_runtime(p);
193
194 task_cputime(p, &utime, &stime);
195
196 switch (clkid) {
197 case CPUCLOCK_PROF:
198 return utime + stime;
199 case CPUCLOCK_VIRT:
200 return utime;
201 default:
202 WARN_ON_ONCE(1);
203 }
204 return 0;
205}
206
207static inline void store_samples(u64 *samples, u64 stime, u64 utime, u64 rtime)
208{
209 samples[CPUCLOCK_PROF] = stime + utime;
210 samples[CPUCLOCK_VIRT] = utime;
211 samples[CPUCLOCK_SCHED] = rtime;
212}
213
214static void task_sample_cputime(struct task_struct *p, u64 *samples)
215{
216 u64 stime, utime;
217
218 task_cputime(p, &utime, &stime);
219 store_samples(samples, stime, utime, p->se.sum_exec_runtime);
220}
221
222static void proc_sample_cputime_atomic(struct task_cputime_atomic *at,
223 u64 *samples)
224{
225 u64 stime, utime, rtime;
226
227 utime = atomic64_read(&at->utime);
228 stime = atomic64_read(&at->stime);
229 rtime = atomic64_read(&at->sum_exec_runtime);
230 store_samples(samples, stime, utime, rtime);
231}
232
233
234
235
236
237static inline void __update_gt_cputime(atomic64_t *cputime, u64 sum_cputime)
238{
239 u64 curr_cputime;
240retry:
241 curr_cputime = atomic64_read(cputime);
242 if (sum_cputime > curr_cputime) {
243 if (atomic64_cmpxchg(cputime, curr_cputime, sum_cputime) != curr_cputime)
244 goto retry;
245 }
246}
247
248static void update_gt_cputime(struct task_cputime_atomic *cputime_atomic,
249 struct task_cputime *sum)
250{
251 __update_gt_cputime(&cputime_atomic->utime, sum->utime);
252 __update_gt_cputime(&cputime_atomic->stime, sum->stime);
253 __update_gt_cputime(&cputime_atomic->sum_exec_runtime, sum->sum_exec_runtime);
254}
255
256
257
258
259
260
261
262
263
264
265
266
267void thread_group_sample_cputime(struct task_struct *tsk, u64 *samples)
268{
269 struct thread_group_cputimer *cputimer = &tsk->signal->cputimer;
270 struct posix_cputimers *pct = &tsk->signal->posix_cputimers;
271
272 WARN_ON_ONCE(!pct->timers_active);
273
274 proc_sample_cputime_atomic(&cputimer->cputime_atomic, samples);
275}
276
277
278
279
280
281
282
283
284
285
286
287
288
289static void thread_group_start_cputime(struct task_struct *tsk, u64 *samples)
290{
291 struct thread_group_cputimer *cputimer = &tsk->signal->cputimer;
292 struct posix_cputimers *pct = &tsk->signal->posix_cputimers;
293
294
295 if (!READ_ONCE(pct->timers_active)) {
296 struct task_cputime sum;
297
298
299
300
301
302
303 thread_group_cputime(tsk, &sum);
304 update_gt_cputime(&cputimer->cputime_atomic, &sum);
305
306
307
308
309
310
311
312
313 WRITE_ONCE(pct->timers_active, true);
314 }
315 proc_sample_cputime_atomic(&cputimer->cputime_atomic, samples);
316}
317
318static void __thread_group_cputime(struct task_struct *tsk, u64 *samples)
319{
320 struct task_cputime ct;
321
322 thread_group_cputime(tsk, &ct);
323 store_samples(samples, ct.stime, ct.utime, ct.sum_exec_runtime);
324}
325
326
327
328
329
330
331static u64 cpu_clock_sample_group(const clockid_t clkid, struct task_struct *p,
332 bool start)
333{
334 struct thread_group_cputimer *cputimer = &p->signal->cputimer;
335 struct posix_cputimers *pct = &p->signal->posix_cputimers;
336 u64 samples[CPUCLOCK_MAX];
337
338 if (!READ_ONCE(pct->timers_active)) {
339 if (start)
340 thread_group_start_cputime(p, samples);
341 else
342 __thread_group_cputime(p, samples);
343 } else {
344 proc_sample_cputime_atomic(&cputimer->cputime_atomic, samples);
345 }
346
347 return samples[clkid];
348}
349
350static int posix_cpu_clock_get(const clockid_t clock, struct timespec64 *tp)
351{
352 const clockid_t clkid = CPUCLOCK_WHICH(clock);
353 struct task_struct *tsk;
354 u64 t;
355
356 rcu_read_lock();
357 tsk = pid_task(pid_for_clock(clock, true), clock_pid_type(clock));
358 if (!tsk) {
359 rcu_read_unlock();
360 return -EINVAL;
361 }
362
363 if (CPUCLOCK_PERTHREAD(clock))
364 t = cpu_clock_sample(clkid, tsk);
365 else
366 t = cpu_clock_sample_group(clkid, tsk, false);
367 rcu_read_unlock();
368
369 *tp = ns_to_timespec64(t);
370 return 0;
371}
372
373
374
375
376
377
378static int posix_cpu_timer_create(struct k_itimer *new_timer)
379{
380 static struct lock_class_key posix_cpu_timers_key;
381 struct pid *pid;
382
383 rcu_read_lock();
384 pid = pid_for_clock(new_timer->it_clock, false);
385 if (!pid) {
386 rcu_read_unlock();
387 return -EINVAL;
388 }
389
390
391
392
393
394
395
396
397
398 if (IS_ENABLED(CONFIG_POSIX_CPU_TIMERS_TASK_WORK))
399 lockdep_set_class(&new_timer->it_lock, &posix_cpu_timers_key);
400
401 new_timer->kclock = &clock_posix_cpu;
402 timerqueue_init(&new_timer->it.cpu.node);
403 new_timer->it.cpu.pid = get_pid(pid);
404 rcu_read_unlock();
405 return 0;
406}
407
408
409
410
411
412
413
414static int posix_cpu_timer_del(struct k_itimer *timer)
415{
416 struct cpu_timer *ctmr = &timer->it.cpu;
417 struct sighand_struct *sighand;
418 struct task_struct *p;
419 unsigned long flags;
420 int ret = 0;
421
422 rcu_read_lock();
423 p = cpu_timer_task_rcu(timer);
424 if (!p)
425 goto out;
426
427
428
429
430
431 sighand = lock_task_sighand(p, &flags);
432 if (unlikely(sighand == NULL)) {
433
434
435
436
437 WARN_ON_ONCE(ctmr->head || timerqueue_node_queued(&ctmr->node));
438 } else {
439 if (timer->it.cpu.firing)
440 ret = TIMER_RETRY;
441 else
442 cpu_timer_dequeue(ctmr);
443
444 unlock_task_sighand(p, &flags);
445 }
446
447out:
448 rcu_read_unlock();
449 if (!ret)
450 put_pid(ctmr->pid);
451
452 return ret;
453}
454
455static void cleanup_timerqueue(struct timerqueue_head *head)
456{
457 struct timerqueue_node *node;
458 struct cpu_timer *ctmr;
459
460 while ((node = timerqueue_getnext(head))) {
461 timerqueue_del(head, node);
462 ctmr = container_of(node, struct cpu_timer, node);
463 ctmr->head = NULL;
464 }
465}
466
467
468
469
470
471
472
473
474static void cleanup_timers(struct posix_cputimers *pct)
475{
476 cleanup_timerqueue(&pct->bases[CPUCLOCK_PROF].tqhead);
477 cleanup_timerqueue(&pct->bases[CPUCLOCK_VIRT].tqhead);
478 cleanup_timerqueue(&pct->bases[CPUCLOCK_SCHED].tqhead);
479}
480
481
482
483
484
485
486void posix_cpu_timers_exit(struct task_struct *tsk)
487{
488 cleanup_timers(&tsk->posix_cputimers);
489}
490void posix_cpu_timers_exit_group(struct task_struct *tsk)
491{
492 cleanup_timers(&tsk->signal->posix_cputimers);
493}
494
495
496
497
498
499static void arm_timer(struct k_itimer *timer, struct task_struct *p)
500{
501 int clkidx = CPUCLOCK_WHICH(timer->it_clock);
502 struct cpu_timer *ctmr = &timer->it.cpu;
503 u64 newexp = cpu_timer_getexpires(ctmr);
504 struct posix_cputimer_base *base;
505
506 if (CPUCLOCK_PERTHREAD(timer->it_clock))
507 base = p->posix_cputimers.bases + clkidx;
508 else
509 base = p->signal->posix_cputimers.bases + clkidx;
510
511 if (!cpu_timer_enqueue(&base->tqhead, ctmr))
512 return;
513
514
515
516
517
518
519
520 if (newexp < base->nextevt)
521 base->nextevt = newexp;
522
523 if (CPUCLOCK_PERTHREAD(timer->it_clock))
524 tick_dep_set_task(p, TICK_DEP_BIT_POSIX_TIMER);
525 else
526 tick_dep_set_signal(p->signal, TICK_DEP_BIT_POSIX_TIMER);
527}
528
529
530
531
532static void cpu_timer_fire(struct k_itimer *timer)
533{
534 struct cpu_timer *ctmr = &timer->it.cpu;
535
536 if ((timer->it_sigev_notify & ~SIGEV_THREAD_ID) == SIGEV_NONE) {
537
538
539
540 cpu_timer_setexpires(ctmr, 0);
541 } else if (unlikely(timer->sigq == NULL)) {
542
543
544
545
546 wake_up_process(timer->it_process);
547 cpu_timer_setexpires(ctmr, 0);
548 } else if (!timer->it_interval) {
549
550
551
552 posix_timer_event(timer, 0);
553 cpu_timer_setexpires(ctmr, 0);
554 } else if (posix_timer_event(timer, ++timer->it_requeue_pending)) {
555
556
557
558
559
560
561 posix_cpu_timer_rearm(timer);
562 ++timer->it_requeue_pending;
563 }
564}
565
566
567
568
569
570
571
572static int posix_cpu_timer_set(struct k_itimer *timer, int timer_flags,
573 struct itimerspec64 *new, struct itimerspec64 *old)
574{
575 clockid_t clkid = CPUCLOCK_WHICH(timer->it_clock);
576 u64 old_expires, new_expires, old_incr, val;
577 struct cpu_timer *ctmr = &timer->it.cpu;
578 struct sighand_struct *sighand;
579 struct task_struct *p;
580 unsigned long flags;
581 int ret = 0;
582
583 rcu_read_lock();
584 p = cpu_timer_task_rcu(timer);
585 if (!p) {
586
587
588
589
590 rcu_read_unlock();
591 return -ESRCH;
592 }
593
594
595
596
597
598 new_expires = ktime_to_ns(timespec64_to_ktime(new->it_value));
599
600
601
602
603
604 sighand = lock_task_sighand(p, &flags);
605
606
607
608
609 if (unlikely(sighand == NULL)) {
610 rcu_read_unlock();
611 return -ESRCH;
612 }
613
614
615
616
617 old_incr = timer->it_interval;
618 old_expires = cpu_timer_getexpires(ctmr);
619
620 if (unlikely(timer->it.cpu.firing)) {
621 timer->it.cpu.firing = -1;
622 ret = TIMER_RETRY;
623 } else {
624 cpu_timer_dequeue(ctmr);
625 }
626
627
628
629
630
631
632
633
634
635 if (CPUCLOCK_PERTHREAD(timer->it_clock))
636 val = cpu_clock_sample(clkid, p);
637 else
638 val = cpu_clock_sample_group(clkid, p, true);
639
640 if (old) {
641 if (old_expires == 0) {
642 old->it_value.tv_sec = 0;
643 old->it_value.tv_nsec = 0;
644 } else {
645
646
647
648
649
650
651
652 u64 exp = bump_cpu_timer(timer, val);
653
654 if (val < exp) {
655 old_expires = exp - val;
656 old->it_value = ns_to_timespec64(old_expires);
657 } else {
658 old->it_value.tv_nsec = 1;
659 old->it_value.tv_sec = 0;
660 }
661 }
662 }
663
664 if (unlikely(ret)) {
665
666
667
668
669
670
671 unlock_task_sighand(p, &flags);
672 goto out;
673 }
674
675 if (new_expires != 0 && !(timer_flags & TIMER_ABSTIME)) {
676 new_expires += val;
677 }
678
679
680
681
682
683
684 cpu_timer_setexpires(ctmr, new_expires);
685 if (new_expires != 0 && val < new_expires) {
686 arm_timer(timer, p);
687 }
688
689 unlock_task_sighand(p, &flags);
690
691
692
693
694 timer->it_interval = timespec64_to_ktime(new->it_interval);
695
696
697
698
699
700
701 timer->it_requeue_pending = (timer->it_requeue_pending + 2) &
702 ~REQUEUE_PENDING;
703 timer->it_overrun_last = 0;
704 timer->it_overrun = -1;
705
706 if (new_expires != 0 && !(val < new_expires)) {
707
708
709
710
711
712 cpu_timer_fire(timer);
713 }
714
715 ret = 0;
716 out:
717 rcu_read_unlock();
718 if (old)
719 old->it_interval = ns_to_timespec64(old_incr);
720
721 return ret;
722}
723
724static void posix_cpu_timer_get(struct k_itimer *timer, struct itimerspec64 *itp)
725{
726 clockid_t clkid = CPUCLOCK_WHICH(timer->it_clock);
727 struct cpu_timer *ctmr = &timer->it.cpu;
728 u64 now, expires = cpu_timer_getexpires(ctmr);
729 struct task_struct *p;
730
731 rcu_read_lock();
732 p = cpu_timer_task_rcu(timer);
733 if (!p)
734 goto out;
735
736
737
738
739 itp->it_interval = ktime_to_timespec64(timer->it_interval);
740
741 if (!expires)
742 goto out;
743
744
745
746
747 if (CPUCLOCK_PERTHREAD(timer->it_clock))
748 now = cpu_clock_sample(clkid, p);
749 else
750 now = cpu_clock_sample_group(clkid, p, false);
751
752 if (now < expires) {
753 itp->it_value = ns_to_timespec64(expires - now);
754 } else {
755
756
757
758
759 itp->it_value.tv_nsec = 1;
760 itp->it_value.tv_sec = 0;
761 }
762out:
763 rcu_read_unlock();
764}
765
766#define MAX_COLLECTED 20
767
768static u64 collect_timerqueue(struct timerqueue_head *head,
769 struct list_head *firing, u64 now)
770{
771 struct timerqueue_node *next;
772 int i = 0;
773
774 while ((next = timerqueue_getnext(head))) {
775 struct cpu_timer *ctmr;
776 u64 expires;
777
778 ctmr = container_of(next, struct cpu_timer, node);
779 expires = cpu_timer_getexpires(ctmr);
780
781 if (++i == MAX_COLLECTED || now < expires)
782 return expires;
783
784 ctmr->firing = 1;
785 cpu_timer_dequeue(ctmr);
786 list_add_tail(&ctmr->elist, firing);
787 }
788
789 return U64_MAX;
790}
791
792static void collect_posix_cputimers(struct posix_cputimers *pct, u64 *samples,
793 struct list_head *firing)
794{
795 struct posix_cputimer_base *base = pct->bases;
796 int i;
797
798 for (i = 0; i < CPUCLOCK_MAX; i++, base++) {
799 base->nextevt = collect_timerqueue(&base->tqhead, firing,
800 samples[i]);
801 }
802}
803
804static inline void check_dl_overrun(struct task_struct *tsk)
805{
806 if (tsk->dl.dl_overrun) {
807 tsk->dl.dl_overrun = 0;
808 __group_send_sig_info(SIGXCPU, SEND_SIG_PRIV, tsk);
809 }
810}
811
812static bool check_rlimit(u64 time, u64 limit, int signo, bool rt, bool hard)
813{
814 if (time < limit)
815 return false;
816
817 if (print_fatal_signals) {
818 pr_info("%s Watchdog Timeout (%s): %s[%d]\n",
819 rt ? "RT" : "CPU", hard ? "hard" : "soft",
820 current->comm, task_pid_nr(current));
821 }
822 __group_send_sig_info(signo, SEND_SIG_PRIV, current);
823 return true;
824}
825
826
827
828
829
830
831static void check_thread_timers(struct task_struct *tsk,
832 struct list_head *firing)
833{
834 struct posix_cputimers *pct = &tsk->posix_cputimers;
835 u64 samples[CPUCLOCK_MAX];
836 unsigned long soft;
837
838 if (dl_task(tsk))
839 check_dl_overrun(tsk);
840
841 if (expiry_cache_is_inactive(pct))
842 return;
843
844 task_sample_cputime(tsk, samples);
845 collect_posix_cputimers(pct, samples, firing);
846
847
848
849
850 soft = task_rlimit(tsk, RLIMIT_RTTIME);
851 if (soft != RLIM_INFINITY) {
852
853 unsigned long rttime = tsk->rt.timeout * (USEC_PER_SEC / HZ);
854 unsigned long hard = task_rlimit_max(tsk, RLIMIT_RTTIME);
855
856
857 if (hard != RLIM_INFINITY &&
858 check_rlimit(rttime, hard, SIGKILL, true, true))
859 return;
860
861
862 if (check_rlimit(rttime, soft, SIGXCPU, true, false)) {
863 soft += USEC_PER_SEC;
864 tsk->signal->rlim[RLIMIT_RTTIME].rlim_cur = soft;
865 }
866 }
867
868 if (expiry_cache_is_inactive(pct))
869 tick_dep_clear_task(tsk, TICK_DEP_BIT_POSIX_TIMER);
870}
871
872static inline void stop_process_timers(struct signal_struct *sig)
873{
874 struct posix_cputimers *pct = &sig->posix_cputimers;
875
876
877 WRITE_ONCE(pct->timers_active, false);
878 tick_dep_clear_signal(sig, TICK_DEP_BIT_POSIX_TIMER);
879}
880
881static void check_cpu_itimer(struct task_struct *tsk, struct cpu_itimer *it,
882 u64 *expires, u64 cur_time, int signo)
883{
884 if (!it->expires)
885 return;
886
887 if (cur_time >= it->expires) {
888 if (it->incr)
889 it->expires += it->incr;
890 else
891 it->expires = 0;
892
893 trace_itimer_expire(signo == SIGPROF ?
894 ITIMER_PROF : ITIMER_VIRTUAL,
895 task_tgid(tsk), cur_time);
896 __group_send_sig_info(signo, SEND_SIG_PRIV, tsk);
897 }
898
899 if (it->expires && it->expires < *expires)
900 *expires = it->expires;
901}
902
903
904
905
906
907
908static void check_process_timers(struct task_struct *tsk,
909 struct list_head *firing)
910{
911 struct signal_struct *const sig = tsk->signal;
912 struct posix_cputimers *pct = &sig->posix_cputimers;
913 u64 samples[CPUCLOCK_MAX];
914 unsigned long soft;
915
916
917
918
919
920
921 if (!READ_ONCE(pct->timers_active) || pct->expiry_active)
922 return;
923
924
925
926
927
928 pct->expiry_active = true;
929
930
931
932
933
934 proc_sample_cputime_atomic(&sig->cputimer.cputime_atomic, samples);
935 collect_posix_cputimers(pct, samples, firing);
936
937
938
939
940 check_cpu_itimer(tsk, &sig->it[CPUCLOCK_PROF],
941 &pct->bases[CPUCLOCK_PROF].nextevt,
942 samples[CPUCLOCK_PROF], SIGPROF);
943 check_cpu_itimer(tsk, &sig->it[CPUCLOCK_VIRT],
944 &pct->bases[CPUCLOCK_VIRT].nextevt,
945 samples[CPUCLOCK_VIRT], SIGVTALRM);
946
947 soft = task_rlimit(tsk, RLIMIT_CPU);
948 if (soft != RLIM_INFINITY) {
949
950 unsigned long hard = task_rlimit_max(tsk, RLIMIT_CPU);
951 u64 ptime = samples[CPUCLOCK_PROF];
952 u64 softns = (u64)soft * NSEC_PER_SEC;
953 u64 hardns = (u64)hard * NSEC_PER_SEC;
954
955
956 if (hard != RLIM_INFINITY &&
957 check_rlimit(ptime, hardns, SIGKILL, false, true))
958 return;
959
960
961 if (check_rlimit(ptime, softns, SIGXCPU, false, false)) {
962 sig->rlim[RLIMIT_CPU].rlim_cur = soft + 1;
963 softns += NSEC_PER_SEC;
964 }
965
966
967 if (softns < pct->bases[CPUCLOCK_PROF].nextevt)
968 pct->bases[CPUCLOCK_PROF].nextevt = softns;
969 }
970
971 if (expiry_cache_is_inactive(pct))
972 stop_process_timers(sig);
973
974 pct->expiry_active = false;
975}
976
977
978
979
980
981static void posix_cpu_timer_rearm(struct k_itimer *timer)
982{
983 clockid_t clkid = CPUCLOCK_WHICH(timer->it_clock);
984 struct task_struct *p;
985 struct sighand_struct *sighand;
986 unsigned long flags;
987 u64 now;
988
989 rcu_read_lock();
990 p = cpu_timer_task_rcu(timer);
991 if (!p)
992 goto out;
993
994
995
996
997 if (CPUCLOCK_PERTHREAD(timer->it_clock))
998 now = cpu_clock_sample(clkid, p);
999 else
1000 now = cpu_clock_sample_group(clkid, p, true);
1001
1002 bump_cpu_timer(timer, now);
1003
1004
1005 sighand = lock_task_sighand(p, &flags);
1006 if (unlikely(sighand == NULL))
1007 goto out;
1008
1009
1010
1011
1012 arm_timer(timer, p);
1013 unlock_task_sighand(p, &flags);
1014out:
1015 rcu_read_unlock();
1016}
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027static inline bool
1028task_cputimers_expired(const u64 *samples, struct posix_cputimers *pct)
1029{
1030 int i;
1031
1032 for (i = 0; i < CPUCLOCK_MAX; i++) {
1033 if (samples[i] >= pct->bases[i].nextevt)
1034 return true;
1035 }
1036 return false;
1037}
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049static inline bool fastpath_timer_check(struct task_struct *tsk)
1050{
1051 struct posix_cputimers *pct = &tsk->posix_cputimers;
1052 struct signal_struct *sig;
1053
1054 if (!expiry_cache_is_inactive(pct)) {
1055 u64 samples[CPUCLOCK_MAX];
1056
1057 task_sample_cputime(tsk, samples);
1058 if (task_cputimers_expired(samples, pct))
1059 return true;
1060 }
1061
1062 sig = tsk->signal;
1063 pct = &sig->posix_cputimers;
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079 if (READ_ONCE(pct->timers_active) && !READ_ONCE(pct->expiry_active)) {
1080 u64 samples[CPUCLOCK_MAX];
1081
1082 proc_sample_cputime_atomic(&sig->cputimer.cputime_atomic,
1083 samples);
1084
1085 if (task_cputimers_expired(samples, pct))
1086 return true;
1087 }
1088
1089 if (dl_task(tsk) && tsk->dl.dl_overrun)
1090 return true;
1091
1092 return false;
1093}
1094
1095static void handle_posix_cpu_timers(struct task_struct *tsk);
1096
1097#ifdef CONFIG_POSIX_CPU_TIMERS_TASK_WORK
1098static void posix_cpu_timers_work(struct callback_head *work)
1099{
1100 handle_posix_cpu_timers(current);
1101}
1102
1103
1104
1105
1106
1107void __init posix_cputimers_init_work(void)
1108{
1109 init_task_work(¤t->posix_cputimers_work.work,
1110 posix_cpu_timers_work);
1111}
1112
1113
1114
1115
1116
1117
1118
1119static inline bool posix_cpu_timers_work_scheduled(struct task_struct *tsk)
1120{
1121 return tsk->posix_cputimers_work.scheduled;
1122}
1123
1124static inline void __run_posix_cpu_timers(struct task_struct *tsk)
1125{
1126 if (WARN_ON_ONCE(tsk->posix_cputimers_work.scheduled))
1127 return;
1128
1129
1130 tsk->posix_cputimers_work.scheduled = true;
1131 task_work_add(tsk, &tsk->posix_cputimers_work.work, TWA_RESUME);
1132}
1133
1134static inline bool posix_cpu_timers_enable_work(struct task_struct *tsk,
1135 unsigned long start)
1136{
1137 bool ret = true;
1138
1139
1140
1141
1142
1143
1144 if (!IS_ENABLED(CONFIG_PREEMPT_RT)) {
1145 tsk->posix_cputimers_work.scheduled = false;
1146 return true;
1147 }
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162 local_irq_disable();
1163 if (start != jiffies && fastpath_timer_check(tsk))
1164 ret = false;
1165 else
1166 tsk->posix_cputimers_work.scheduled = false;
1167 local_irq_enable();
1168
1169 return ret;
1170}
1171#else
1172static inline void __run_posix_cpu_timers(struct task_struct *tsk)
1173{
1174 lockdep_posixtimer_enter();
1175 handle_posix_cpu_timers(tsk);
1176 lockdep_posixtimer_exit();
1177}
1178
1179static inline bool posix_cpu_timers_work_scheduled(struct task_struct *tsk)
1180{
1181 return false;
1182}
1183
1184static inline bool posix_cpu_timers_enable_work(struct task_struct *tsk,
1185 unsigned long start)
1186{
1187 return true;
1188}
1189#endif
1190
1191static void handle_posix_cpu_timers(struct task_struct *tsk)
1192{
1193 struct k_itimer *timer, *next;
1194 unsigned long flags, start;
1195 LIST_HEAD(firing);
1196
1197 if (!lock_task_sighand(tsk, &flags))
1198 return;
1199
1200 do {
1201
1202
1203
1204
1205
1206 start = READ_ONCE(jiffies);
1207 barrier();
1208
1209
1210
1211
1212
1213
1214 check_thread_timers(tsk, &firing);
1215
1216 check_process_timers(tsk, &firing);
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248 } while (!posix_cpu_timers_enable_work(tsk, start));
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258 unlock_task_sighand(tsk, &flags);
1259
1260
1261
1262
1263
1264
1265
1266 list_for_each_entry_safe(timer, next, &firing, it.cpu.elist) {
1267 int cpu_firing;
1268
1269
1270
1271
1272
1273
1274
1275
1276 spin_lock(&timer->it_lock);
1277 list_del_init(&timer->it.cpu.elist);
1278 cpu_firing = timer->it.cpu.firing;
1279 timer->it.cpu.firing = 0;
1280
1281
1282
1283
1284
1285 if (likely(cpu_firing >= 0))
1286 cpu_timer_fire(timer);
1287 spin_unlock(&timer->it_lock);
1288 }
1289}
1290
1291
1292
1293
1294
1295
1296void run_posix_cpu_timers(void)
1297{
1298 struct task_struct *tsk = current;
1299
1300 lockdep_assert_irqs_disabled();
1301
1302
1303
1304
1305
1306 if (posix_cpu_timers_work_scheduled(tsk))
1307 return;
1308
1309
1310
1311
1312
1313 if (!fastpath_timer_check(tsk))
1314 return;
1315
1316 __run_posix_cpu_timers(tsk);
1317}
1318
1319
1320
1321
1322
1323void set_process_cpu_timer(struct task_struct *tsk, unsigned int clkid,
1324 u64 *newval, u64 *oldval)
1325{
1326 u64 now, *nextevt;
1327
1328 if (WARN_ON_ONCE(clkid >= CPUCLOCK_SCHED))
1329 return;
1330
1331 nextevt = &tsk->signal->posix_cputimers.bases[clkid].nextevt;
1332 now = cpu_clock_sample_group(clkid, tsk, true);
1333
1334 if (oldval) {
1335
1336
1337
1338
1339
1340 if (*oldval) {
1341 if (*oldval <= now) {
1342
1343 *oldval = TICK_NSEC;
1344 } else {
1345 *oldval -= now;
1346 }
1347 }
1348
1349 if (!*newval)
1350 return;
1351 *newval += now;
1352 }
1353
1354
1355
1356
1357
1358 if (*newval < *nextevt)
1359 *nextevt = *newval;
1360
1361 tick_dep_set_signal(tsk->signal, TICK_DEP_BIT_POSIX_TIMER);
1362}
1363
1364static int do_cpu_nanosleep(const clockid_t which_clock, int flags,
1365 const struct timespec64 *rqtp)
1366{
1367 struct itimerspec64 it;
1368 struct k_itimer timer;
1369 u64 expires;
1370 int error;
1371
1372
1373
1374
1375 memset(&timer, 0, sizeof timer);
1376 spin_lock_init(&timer.it_lock);
1377 timer.it_clock = which_clock;
1378 timer.it_overrun = -1;
1379 error = posix_cpu_timer_create(&timer);
1380 timer.it_process = current;
1381
1382 if (!error) {
1383 static struct itimerspec64 zero_it;
1384 struct restart_block *restart;
1385
1386 memset(&it, 0, sizeof(it));
1387 it.it_value = *rqtp;
1388
1389 spin_lock_irq(&timer.it_lock);
1390 error = posix_cpu_timer_set(&timer, flags, &it, NULL);
1391 if (error) {
1392 spin_unlock_irq(&timer.it_lock);
1393 return error;
1394 }
1395
1396 while (!signal_pending(current)) {
1397 if (!cpu_timer_getexpires(&timer.it.cpu)) {
1398
1399
1400
1401
1402 posix_cpu_timer_del(&timer);
1403 spin_unlock_irq(&timer.it_lock);
1404 return 0;
1405 }
1406
1407
1408
1409
1410 __set_current_state(TASK_INTERRUPTIBLE);
1411 spin_unlock_irq(&timer.it_lock);
1412 schedule();
1413 spin_lock_irq(&timer.it_lock);
1414 }
1415
1416
1417
1418
1419 expires = cpu_timer_getexpires(&timer.it.cpu);
1420 error = posix_cpu_timer_set(&timer, 0, &zero_it, &it);
1421 if (!error) {
1422
1423
1424
1425 posix_cpu_timer_del(&timer);
1426 }
1427 spin_unlock_irq(&timer.it_lock);
1428
1429 while (error == TIMER_RETRY) {
1430
1431
1432
1433
1434
1435 spin_lock_irq(&timer.it_lock);
1436 error = posix_cpu_timer_del(&timer);
1437 spin_unlock_irq(&timer.it_lock);
1438 }
1439
1440 if ((it.it_value.tv_sec | it.it_value.tv_nsec) == 0) {
1441
1442
1443
1444 return 0;
1445 }
1446
1447 error = -ERESTART_RESTARTBLOCK;
1448
1449
1450
1451 restart = ¤t->restart_block;
1452 restart->nanosleep.expires = expires;
1453 if (restart->nanosleep.type != TT_NONE)
1454 error = nanosleep_copyout(restart, &it.it_value);
1455 }
1456
1457 return error;
1458}
1459
1460static long posix_cpu_nsleep_restart(struct restart_block *restart_block);
1461
1462static int posix_cpu_nsleep(const clockid_t which_clock, int flags,
1463 const struct timespec64 *rqtp)
1464{
1465 struct restart_block *restart_block = ¤t->restart_block;
1466 int error;
1467
1468
1469
1470
1471 if (CPUCLOCK_PERTHREAD(which_clock) &&
1472 (CPUCLOCK_PID(which_clock) == 0 ||
1473 CPUCLOCK_PID(which_clock) == task_pid_vnr(current)))
1474 return -EINVAL;
1475
1476 error = do_cpu_nanosleep(which_clock, flags, rqtp);
1477
1478 if (error == -ERESTART_RESTARTBLOCK) {
1479
1480 if (flags & TIMER_ABSTIME)
1481 return -ERESTARTNOHAND;
1482
1483 restart_block->fn = posix_cpu_nsleep_restart;
1484 restart_block->nanosleep.clockid = which_clock;
1485 }
1486 return error;
1487}
1488
1489static long posix_cpu_nsleep_restart(struct restart_block *restart_block)
1490{
1491 clockid_t which_clock = restart_block->nanosleep.clockid;
1492 struct timespec64 t;
1493
1494 t = ns_to_timespec64(restart_block->nanosleep.expires);
1495
1496 return do_cpu_nanosleep(which_clock, TIMER_ABSTIME, &t);
1497}
1498
1499#define PROCESS_CLOCK make_process_cpuclock(0, CPUCLOCK_SCHED)
1500#define THREAD_CLOCK make_thread_cpuclock(0, CPUCLOCK_SCHED)
1501
1502static int process_cpu_clock_getres(const clockid_t which_clock,
1503 struct timespec64 *tp)
1504{
1505 return posix_cpu_clock_getres(PROCESS_CLOCK, tp);
1506}
1507static int process_cpu_clock_get(const clockid_t which_clock,
1508 struct timespec64 *tp)
1509{
1510 return posix_cpu_clock_get(PROCESS_CLOCK, tp);
1511}
1512static int process_cpu_timer_create(struct k_itimer *timer)
1513{
1514 timer->it_clock = PROCESS_CLOCK;
1515 return posix_cpu_timer_create(timer);
1516}
1517static int process_cpu_nsleep(const clockid_t which_clock, int flags,
1518 const struct timespec64 *rqtp)
1519{
1520 return posix_cpu_nsleep(PROCESS_CLOCK, flags, rqtp);
1521}
1522static int thread_cpu_clock_getres(const clockid_t which_clock,
1523 struct timespec64 *tp)
1524{
1525 return posix_cpu_clock_getres(THREAD_CLOCK, tp);
1526}
1527static int thread_cpu_clock_get(const clockid_t which_clock,
1528 struct timespec64 *tp)
1529{
1530 return posix_cpu_clock_get(THREAD_CLOCK, tp);
1531}
1532static int thread_cpu_timer_create(struct k_itimer *timer)
1533{
1534 timer->it_clock = THREAD_CLOCK;
1535 return posix_cpu_timer_create(timer);
1536}
1537
1538const struct k_clock clock_posix_cpu = {
1539 .clock_getres = posix_cpu_clock_getres,
1540 .clock_set = posix_cpu_clock_set,
1541 .clock_get_timespec = posix_cpu_clock_get,
1542 .timer_create = posix_cpu_timer_create,
1543 .nsleep = posix_cpu_nsleep,
1544 .timer_set = posix_cpu_timer_set,
1545 .timer_del = posix_cpu_timer_del,
1546 .timer_get = posix_cpu_timer_get,
1547 .timer_rearm = posix_cpu_timer_rearm,
1548};
1549
1550const struct k_clock clock_process = {
1551 .clock_getres = process_cpu_clock_getres,
1552 .clock_get_timespec = process_cpu_clock_get,
1553 .timer_create = process_cpu_timer_create,
1554 .nsleep = process_cpu_nsleep,
1555};
1556
1557const struct k_clock clock_thread = {
1558 .clock_getres = thread_cpu_clock_getres,
1559 .clock_get_timespec = thread_cpu_clock_get,
1560 .timer_create = thread_cpu_timer_create,
1561};
1562