xref: /linux/kernel/time/posix-cpu-timers.c (revision f4cdf7ca9a1fdcca413157df19753f388a5a224e)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Implement CPU time clocks for the POSIX clock interface.
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 #include <linux/task_work.h>
19 
20 #include "posix-timers.h"
21 
22 static bool posix_cpu_timer_rearm(struct k_itimer *timer);
23 
24 void posix_cputimers_group_init(struct posix_cputimers *pct, u64 cpu_limit)
25 {
26 	posix_cputimers_init(pct);
27 	if (cpu_limit != RLIM_INFINITY) {
28 		pct->bases[CPUCLOCK_PROF].nextevt = cpu_limit * NSEC_PER_SEC;
29 		pct->timers_active = true;
30 	}
31 }
32 
33 /*
34  * Called after updating RLIMIT_CPU to run cpu timer and update
35  * tsk->signal->posix_cputimers.bases[clock].nextevt expiration cache if
36  * necessary. Needs siglock protection since other code may update the
37  * expiration cache as well.
38  *
39  * Returns 0 on success, -ESRCH on failure.  Can fail if the task is exiting and
40  * we cannot lock_task_sighand.  Cannot fail if task is current.
41  */
42 int update_rlimit_cpu(struct task_struct *task, unsigned long rlim_new)
43 {
44 	u64 nsecs = (u64)rlim_new * NSEC_PER_SEC;
45 	unsigned long irq_fl;
46 
47 	if (!lock_task_sighand(task, &irq_fl))
48 		return -ESRCH;
49 	set_process_cpu_timer(task, CPUCLOCK_PROF, &nsecs, NULL);
50 	unlock_task_sighand(task, &irq_fl);
51 	return 0;
52 }
53 
54 /*
55  * Functions for validating access to tasks.
56  */
57 static struct pid *pid_for_clock(const clockid_t clock, bool gettime)
58 {
59 	const bool thread = !!CPUCLOCK_PERTHREAD(clock);
60 	const pid_t upid = CPUCLOCK_PID(clock);
61 	struct pid *pid;
62 
63 	if (CPUCLOCK_WHICH(clock) >= CPUCLOCK_MAX)
64 		return NULL;
65 
66 	/*
67 	 * If the encoded PID is 0, then the timer is targeted at current
68 	 * or the process to which current belongs.
69 	 */
70 	if (upid == 0)
71 		return thread ? task_pid(current) : task_tgid(current);
72 
73 	pid = find_vpid(upid);
74 	if (!pid)
75 		return NULL;
76 
77 	if (thread) {
78 		struct task_struct *tsk = pid_task(pid, PIDTYPE_PID);
79 		return (tsk && same_thread_group(tsk, current)) ? pid : NULL;
80 	}
81 
82 	/*
83 	 * For clock_gettime(PROCESS) allow finding the process by
84 	 * with the pid of the current task.  The code needs the tgid
85 	 * of the process so that pid_task(pid, PIDTYPE_TGID) can be
86 	 * used to find the process.
87 	 */
88 	if (gettime && (pid == task_pid(current)))
89 		return task_tgid(current);
90 
91 	/*
92 	 * For processes require that pid identifies a process.
93 	 */
94 	return pid_has_task(pid, PIDTYPE_TGID) ? pid : NULL;
95 }
96 
97 static inline int validate_clock_permissions(const clockid_t clock)
98 {
99 	int ret;
100 
101 	rcu_read_lock();
102 	ret = pid_for_clock(clock, false) ? 0 : -EINVAL;
103 	rcu_read_unlock();
104 
105 	return ret;
106 }
107 
108 static inline enum pid_type clock_pid_type(const clockid_t clock)
109 {
110 	return CPUCLOCK_PERTHREAD(clock) ? PIDTYPE_PID : PIDTYPE_TGID;
111 }
112 
113 static inline struct task_struct *cpu_timer_task_rcu(struct k_itimer *timer)
114 {
115 	return pid_task(timer->it.cpu.pid, clock_pid_type(timer->it_clock));
116 }
117 
118 /*
119  * Update expiry time from increment, and increase overrun count,
120  * given the current clock sample.
121  */
122 static u64 bump_cpu_timer(struct k_itimer *timer, u64 now)
123 {
124 	u64 delta, incr, expires = timer->it.cpu.node.expires;
125 	int i;
126 
127 	if (!timer->it_interval)
128 		return expires;
129 
130 	if (now < expires)
131 		return expires;
132 
133 	incr = timer->it_interval;
134 	delta = now + incr - expires;
135 
136 	/* Don't use (incr*2 < delta), incr*2 might overflow. */
137 	for (i = 0; incr < delta - incr; i++)
138 		incr = incr << 1;
139 
140 	for (; i >= 0; incr >>= 1, i--) {
141 		if (delta < incr)
142 			continue;
143 
144 		timer->it.cpu.node.expires += incr;
145 		timer->it_overrun += 1LL << i;
146 		delta -= incr;
147 	}
148 	return timer->it.cpu.node.expires;
149 }
150 
151 /* Check whether all cache entries contain U64_MAX, i.e. eternal expiry time */
152 static inline bool expiry_cache_is_inactive(const struct posix_cputimers *pct)
153 {
154 	return !(~pct->bases[CPUCLOCK_PROF].nextevt |
155 		 ~pct->bases[CPUCLOCK_VIRT].nextevt |
156 		 ~pct->bases[CPUCLOCK_SCHED].nextevt);
157 }
158 
159 static int
160 posix_cpu_clock_getres(const clockid_t which_clock, struct timespec64 *tp)
161 {
162 	int error = validate_clock_permissions(which_clock);
163 
164 	if (!error) {
165 		tp->tv_sec = 0;
166 		tp->tv_nsec = ((NSEC_PER_SEC + HZ - 1) / HZ);
167 		if (CPUCLOCK_WHICH(which_clock) == CPUCLOCK_SCHED) {
168 			/*
169 			 * If sched_clock is using a cycle counter, we
170 			 * don't have any idea of its true resolution
171 			 * exported, but it is much more than 1s/HZ.
172 			 */
173 			tp->tv_nsec = 1;
174 		}
175 	}
176 	return error;
177 }
178 
179 static int
180 posix_cpu_clock_set(const clockid_t clock, const struct timespec64 *tp)
181 {
182 	int error = validate_clock_permissions(clock);
183 
184 	/*
185 	 * You can never reset a CPU clock, but we check for other errors
186 	 * in the call before failing with EPERM.
187 	 */
188 	return error ? : -EPERM;
189 }
190 
191 /*
192  * Sample a per-thread clock for the given task. clkid is validated.
193  */
194 static u64 cpu_clock_sample(const clockid_t clkid, struct task_struct *p)
195 {
196 	u64 utime, stime;
197 
198 	if (clkid == CPUCLOCK_SCHED)
199 		return task_sched_runtime(p);
200 
201 	task_cputime(p, &utime, &stime);
202 
203 	switch (clkid) {
204 	case CPUCLOCK_PROF:
205 		return utime + stime;
206 	case CPUCLOCK_VIRT:
207 		return utime;
208 	default:
209 		WARN_ON_ONCE(1);
210 	}
211 	return 0;
212 }
213 
214 static inline void store_samples(u64 *samples, u64 stime, u64 utime, u64 rtime)
215 {
216 	samples[CPUCLOCK_PROF] = stime + utime;
217 	samples[CPUCLOCK_VIRT] = utime;
218 	samples[CPUCLOCK_SCHED] = rtime;
219 }
220 
221 static void task_sample_cputime(struct task_struct *p, u64 *samples)
222 {
223 	u64 stime, utime;
224 
225 	task_cputime(p, &utime, &stime);
226 	store_samples(samples, stime, utime, p->se.sum_exec_runtime);
227 }
228 
229 static void proc_sample_cputime_atomic(struct task_cputime_atomic *at,
230 				       u64 *samples)
231 {
232 	u64 stime, utime, rtime;
233 
234 	utime = atomic64_read(&at->utime);
235 	stime = atomic64_read(&at->stime);
236 	rtime = atomic64_read(&at->sum_exec_runtime);
237 	store_samples(samples, stime, utime, rtime);
238 }
239 
240 /*
241  * Set cputime to sum_cputime if sum_cputime > cputime. Use cmpxchg
242  * to avoid race conditions with concurrent updates to cputime.
243  */
244 static inline void __update_gt_cputime(atomic64_t *cputime, u64 sum_cputime)
245 {
246 	u64 curr_cputime = atomic64_read(cputime);
247 
248 	do {
249 		if (sum_cputime <= curr_cputime)
250 			return;
251 	} while (!atomic64_try_cmpxchg(cputime, &curr_cputime, sum_cputime));
252 }
253 
254 static void update_gt_cputime(struct task_cputime_atomic *cputime_atomic,
255 			      struct task_cputime *sum)
256 {
257 	__update_gt_cputime(&cputime_atomic->utime, sum->utime);
258 	__update_gt_cputime(&cputime_atomic->stime, sum->stime);
259 	__update_gt_cputime(&cputime_atomic->sum_exec_runtime, sum->sum_exec_runtime);
260 }
261 
262 /**
263  * thread_group_sample_cputime - Sample cputime for a given task
264  * @tsk:	Task for which cputime needs to be started
265  * @samples:	Storage for time samples
266  *
267  * Called from sys_getitimer() to calculate the expiry time of an active
268  * timer. That means group cputime accounting is already active. Called
269  * with task sighand lock held.
270  *
271  * Updates @times with an uptodate sample of the thread group cputimes.
272  */
273 void thread_group_sample_cputime(struct task_struct *tsk, u64 *samples)
274 {
275 	struct thread_group_cputimer *cputimer = &tsk->signal->cputimer;
276 	struct posix_cputimers *pct = &tsk->signal->posix_cputimers;
277 
278 	WARN_ON_ONCE(!pct->timers_active);
279 
280 	proc_sample_cputime_atomic(&cputimer->cputime_atomic, samples);
281 }
282 
283 /**
284  * thread_group_start_cputime - Start cputime and return a sample
285  * @tsk:	Task for which cputime needs to be started
286  * @samples:	Storage for time samples
287  *
288  * The thread group cputime accounting is avoided when there are no posix
289  * CPU timers armed. Before starting a timer it's required to check whether
290  * the time accounting is active. If not, a full update of the atomic
291  * accounting store needs to be done and the accounting enabled.
292  *
293  * Updates @times with an uptodate sample of the thread group cputimes.
294  */
295 static void thread_group_start_cputime(struct task_struct *tsk, u64 *samples)
296 {
297 	struct thread_group_cputimer *cputimer = &tsk->signal->cputimer;
298 	struct posix_cputimers *pct = &tsk->signal->posix_cputimers;
299 
300 	lockdep_assert_task_sighand_held(tsk);
301 
302 	/* Check if cputimer isn't running. This is accessed without locking. */
303 	if (!READ_ONCE(pct->timers_active)) {
304 		struct task_cputime sum;
305 
306 		/*
307 		 * The POSIX timer interface allows for absolute time expiry
308 		 * values through the TIMER_ABSTIME flag, therefore we have
309 		 * to synchronize the timer to the clock every time we start it.
310 		 */
311 		thread_group_cputime(tsk, &sum);
312 		update_gt_cputime(&cputimer->cputime_atomic, &sum);
313 
314 		/*
315 		 * We're setting timers_active without a lock. Ensure this
316 		 * only gets written to in one operation. We set it after
317 		 * update_gt_cputime() as a small optimization, but
318 		 * barriers are not required because update_gt_cputime()
319 		 * can handle concurrent updates.
320 		 */
321 		WRITE_ONCE(pct->timers_active, true);
322 	}
323 	proc_sample_cputime_atomic(&cputimer->cputime_atomic, samples);
324 }
325 
326 static void __thread_group_cputime(struct task_struct *tsk, u64 *samples)
327 {
328 	struct task_cputime ct;
329 
330 	thread_group_cputime(tsk, &ct);
331 	store_samples(samples, ct.stime, ct.utime, ct.sum_exec_runtime);
332 }
333 
334 /*
335  * Sample a process (thread group) clock for the given task clkid. If the
336  * group's cputime accounting is already enabled, read the atomic
337  * store. Otherwise a full update is required.  clkid is already validated.
338  */
339 static u64 cpu_clock_sample_group(const clockid_t clkid, struct task_struct *p,
340 				  bool start)
341 {
342 	struct thread_group_cputimer *cputimer = &p->signal->cputimer;
343 	struct posix_cputimers *pct = &p->signal->posix_cputimers;
344 	u64 samples[CPUCLOCK_MAX];
345 
346 	if (!READ_ONCE(pct->timers_active)) {
347 		if (start)
348 			thread_group_start_cputime(p, samples);
349 		else
350 			__thread_group_cputime(p, samples);
351 	} else {
352 		proc_sample_cputime_atomic(&cputimer->cputime_atomic, samples);
353 	}
354 
355 	return samples[clkid];
356 }
357 
358 static int posix_cpu_clock_get(const clockid_t clock, struct timespec64 *tp)
359 {
360 	const clockid_t clkid = CPUCLOCK_WHICH(clock);
361 	struct task_struct *tsk;
362 	u64 t;
363 
364 	rcu_read_lock();
365 	tsk = pid_task(pid_for_clock(clock, true), clock_pid_type(clock));
366 	if (!tsk) {
367 		rcu_read_unlock();
368 		return -EINVAL;
369 	}
370 
371 	if (CPUCLOCK_PERTHREAD(clock))
372 		t = cpu_clock_sample(clkid, tsk);
373 	else
374 		t = cpu_clock_sample_group(clkid, tsk, false);
375 	rcu_read_unlock();
376 
377 	*tp = ns_to_timespec64(t);
378 	return 0;
379 }
380 
381 /*
382  * Validate the clockid_t for a new CPU-clock timer, and initialize the timer.
383  * This is called from sys_timer_create() and do_cpu_nanosleep() with the
384  * new timer already all-zeros initialized.
385  */
386 static int posix_cpu_timer_create(struct k_itimer *new_timer)
387 {
388 	static struct lock_class_key posix_cpu_timers_key;
389 	struct pid *pid;
390 
391 	rcu_read_lock();
392 	pid = pid_for_clock(new_timer->it_clock, false);
393 	if (!pid) {
394 		rcu_read_unlock();
395 		return -EINVAL;
396 	}
397 
398 	/*
399 	 * If posix timer expiry is handled in task work context then
400 	 * timer::it_lock can be taken without disabling interrupts as all
401 	 * other locking happens in task context. This requires a separate
402 	 * lock class key otherwise regular posix timer expiry would record
403 	 * the lock class being taken in interrupt context and generate a
404 	 * false positive warning.
405 	 */
406 	if (IS_ENABLED(CONFIG_POSIX_CPU_TIMERS_TASK_WORK))
407 		lockdep_set_class(&new_timer->it_lock, &posix_cpu_timers_key);
408 
409 	new_timer->kclock = &clock_posix_cpu;
410 	timerqueue_init(&new_timer->it.cpu.node);
411 	new_timer->it.cpu.pid = get_pid(pid);
412 	rcu_read_unlock();
413 	return 0;
414 }
415 
416 static struct posix_cputimer_base *timer_base(struct k_itimer *timer,
417 					      struct task_struct *tsk)
418 {
419 	int clkidx = CPUCLOCK_WHICH(timer->it_clock);
420 
421 	if (CPUCLOCK_PERTHREAD(timer->it_clock))
422 		return tsk->posix_cputimers.bases + clkidx;
423 	else
424 		return tsk->signal->posix_cputimers.bases + clkidx;
425 }
426 
427 /*
428  * Force recalculating the base earliest expiration on the next tick.
429  * This will also re-evaluate the need to keep around the process wide
430  * cputime counter and tick dependency and eventually shut these down
431  * if necessary.
432  */
433 static void trigger_base_recalc_expires(struct k_itimer *timer,
434 					struct task_struct *tsk)
435 {
436 	struct posix_cputimer_base *base = timer_base(timer, tsk);
437 
438 	base->nextevt = 0;
439 }
440 
441 /*
442  * Dequeue the timer and reset the base if it was its earliest expiration.
443  * It makes sure the next tick recalculates the base next expiration so we
444  * don't keep the costly process wide cputime counter around for a random
445  * amount of time, along with the tick dependency.
446  *
447  * If another timer gets queued between this and the next tick, its
448  * expiration will update the base next event if necessary on the next
449  * tick.
450  */
451 static void disarm_timer(struct k_itimer *timer, struct task_struct *p)
452 {
453 	struct cpu_timer *ctmr = &timer->it.cpu;
454 	struct posix_cputimer_base *base;
455 
456 	if (!cpu_timer_dequeue(ctmr))
457 		return;
458 
459 	base = timer_base(timer, p);
460 	if (cpu_timer_getexpires(ctmr) == base->nextevt)
461 		trigger_base_recalc_expires(timer, p);
462 }
463 
464 /*
465  * Lookup the task via timer->it.cpu.pid and attempt to lock the task's sighand.
466  *
467  * This can race with the reaping of the task:
468  *
469  * CPU0					CPU1
470  *
471  * // Finds task
472  * p = pid_task(pid, pid_type);		__exit_signal(p)
473  *					  lock(p, sighand);
474  *					  posix_cpu_timers*_exit();
475  * sighand = lock_task_sighand(p);	  unhash_task(p);
476  *					  p->sighand = NULL;
477  *					  unlock(sighand);
478  *
479  * In this case sighand is NULL, which means the task and the associated timer
480  * queue cannot be longer accessed safely.
481  *
482  * __exit_signal() invokes posix_cpu_timers_exit() and if the thread group is
483  * dead it also invokes posix_cpu_timers_group_exit(). These functions delete
484  * all pending timers from the related timer queues. The POSIX timers (k_itimer)
485  * themself are still accessible, but not longer connected to the task.
486  *
487  * exec() works slightly differently. The task which exec()'s terminates all
488  * other threads in the thread group and runs __exit_signal() on them. As the
489  * thread group is not dead they only clean up the per task timers via
490  * posix_cpu_timers_exit().
491  *
492  * As the TGID on exec() stays the same per process timers stay queued, if they
493  * are armed. This works without a problem when exec() is done by the thread
494  * group leader. If a non-leader thread exec()'s this can end up in the
495  * following scenario:
496  *
497  * CPU0					CPU1
498  * // Returns old leader
499  * p = pid_task(pid, pid_type);		de_thread()
500  *					switch_leader()
501  *					release_task(old leader)
502  *					  __exit_signal()
503  *					  old_leader->sighand = NULL;
504  * // Returns NULL
505  * sighand = lock_task_sighand(p)
506  *
507  * That's problematic for several functions:
508  *
509  *  - posix_cpu_timer_del(): If the timer is still enqueued on the task the
510  *    underlying k_itimer will be freed which results in a UAF in
511  *    run_posix_cpu_timers() or on timerqueue related add/delete operations.
512  *    If the timer is not enqueued, the failure is harmless
513  *
514  *  - posix_cpu_timer_set(): Independent of the enqueued state that results in a
515  *    transient failure which is user space visible (-ESRCH) for regular posix
516  *    timers. But for the use case in do_cpu_nanosleep() it's the same UAF
517  *    problem just that the timer is allocated on the stack.
518  *
519  *  - posix_cpu_timer_rearm(): Timer is not enqueued at that point, but this
520  *    silently ignores the rearm request, which is a functional problem as the
521  *    timer wont expire anymore.
522  */
523 static struct task_struct *timer_lock_sighand(struct k_itimer *timer, unsigned long *flags)
524 {
525 	enum pid_type type = clock_pid_type(timer->it_clock);
526 	struct cpu_timer *ctmr = &timer->it.cpu;
527 
528 	guard(rcu)();
529 
530 	for (;;) {
531 		struct task_struct *t = pid_task(timer->it.cpu.pid, type);
532 
533 		/* Fail if the task cannot be found. */
534 		if (!t)
535 			break;
536 
537 		/* Try to lock the task's sighand */
538 		if (lock_task_sighand(t, flags))
539 			return t;
540 
541 		/*
542 		 * The next PID lookup might either fail or return the new
543 		 * leader. This is correct for both exit() and exec().
544 		 */
545 	}
546 
547 	/*
548 	 * If the timer is still enqueued, warn. There is nothing safe to do
549 	 * here as there might be two timers in there which are removed in
550 	 * parallel and that will cause more damage than good. This should never
551 	 * happen!
552 	 *
553 	 * Ensure that the stores to the timer and timerqueue are visible:
554 	 *
555 	 * __exit_signal()
556 	 *   posix_cpu_timers*_exit()
557 	 *   write_seqlock(seqlock)
558 	 *	smp_wmb(); <-------
559 	 *   __unhash_process()	  |	!pid_task()
560 	 *			  ---->	smp_rmb();
561 	 *				WARN_ON_ONCE(...)
562 	 */
563 	smp_rmb();
564 	WARN_ON_ONCE(ctmr->head || timerqueue_node_queued(&ctmr->node));
565 	return NULL;
566 }
567 
568 /*
569  * Clean up a CPU-clock timer that is about to be destroyed.
570  * This is called from timer deletion with the timer already locked.
571  * If we return TIMER_RETRY, it's necessary to release the timer's lock
572  * and try again.  (This happens when the timer is in the middle of firing.)
573  */
574 static int posix_cpu_timer_del(struct k_itimer *timer)
575 {
576 	struct task_struct *p;
577 	unsigned long flags;
578 	int ret = 0;
579 
580 	p = timer_lock_sighand(timer, &flags);
581 
582 	if (likely(p)) {
583 		if (timer->it.cpu.firing) {
584 			/*
585 			 * Prevent signal delivery. The timer cannot be dequeued
586 			 * because it is on the firing list which is not protected
587 			 * by sighand->lock. The delivery path is waiting for
588 			 * the timer lock. So go back, unlock and retry.
589 			 */
590 			timer->it.cpu.firing = false;
591 			ret = TIMER_RETRY;
592 		} else {
593 			disarm_timer(timer, p);
594 		}
595 		unlock_task_sighand(p, &flags);
596 	}
597 
598 	if (!ret) {
599 		put_pid(timer->it.cpu.pid);
600 		timer->it_status = POSIX_TIMER_DISARMED;
601 	}
602 	return ret;
603 }
604 
605 static void cleanup_timerqueue(struct timerqueue_head *head)
606 {
607 	struct timerqueue_node *node;
608 	struct cpu_timer *ctmr;
609 
610 	while ((node = timerqueue_getnext(head))) {
611 		timerqueue_del(head, node);
612 		ctmr = container_of(node, struct cpu_timer, node);
613 		ctmr->head = NULL;
614 	}
615 }
616 
617 /*
618  * Clean out CPU timers which are still armed when a thread exits. The
619  * timers are only removed from the list. No other updates are done. The
620  * corresponding posix timers are still accessible, but cannot be rearmed.
621  *
622  * This must be called with the siglock held.
623  */
624 static void cleanup_timers(struct posix_cputimers *pct)
625 {
626 	cleanup_timerqueue(&pct->bases[CPUCLOCK_PROF].tqhead);
627 	cleanup_timerqueue(&pct->bases[CPUCLOCK_VIRT].tqhead);
628 	cleanup_timerqueue(&pct->bases[CPUCLOCK_SCHED].tqhead);
629 }
630 
631 /*
632  * These are both called with the siglock held, when the current thread
633  * is being reaped.  When the final (leader) thread in the group is reaped,
634  * posix_cpu_timers_exit_group will be called after posix_cpu_timers_exit.
635  */
636 void posix_cpu_timers_exit(struct task_struct *tsk)
637 {
638 	cleanup_timers(&tsk->posix_cputimers);
639 }
640 void posix_cpu_timers_exit_group(struct task_struct *tsk)
641 {
642 	cleanup_timers(&tsk->signal->posix_cputimers);
643 }
644 
645 /*
646  * Insert the timer on the appropriate list before any timers that
647  * expire later.  This must be called with the sighand lock held.
648  */
649 static void arm_timer(struct k_itimer *timer, struct task_struct *p)
650 {
651 	struct posix_cputimer_base *base = timer_base(timer, p);
652 	struct cpu_timer *ctmr = &timer->it.cpu;
653 	u64 newexp = cpu_timer_getexpires(ctmr);
654 
655 	timer->it_status = POSIX_TIMER_ARMED;
656 	if (!cpu_timer_enqueue(&base->tqhead, ctmr))
657 		return;
658 
659 	/*
660 	 * We are the new earliest-expiring POSIX 1.b timer, hence
661 	 * need to update expiration cache. Take into account that
662 	 * for process timers we share expiration cache with itimers
663 	 * and RLIMIT_CPU and for thread timers with RLIMIT_RTTIME.
664 	 */
665 	if (newexp < base->nextevt)
666 		base->nextevt = newexp;
667 
668 	if (CPUCLOCK_PERTHREAD(timer->it_clock))
669 		tick_dep_set_task(p, TICK_DEP_BIT_POSIX_TIMER);
670 	else
671 		tick_dep_set_signal(p, TICK_DEP_BIT_POSIX_TIMER);
672 }
673 
674 /*
675  * The timer is locked, fire it and arrange for its reload.
676  */
677 static void cpu_timer_fire(struct k_itimer *timer)
678 {
679 	struct cpu_timer *ctmr = &timer->it.cpu;
680 
681 	timer->it_status = POSIX_TIMER_DISARMED;
682 
683 	if (unlikely(ctmr->nanosleep)) {
684 		/*
685 		 * This a special case for clock_nanosleep,
686 		 * not a normal timer from sys_timer_create.
687 		 */
688 		wake_up_process(timer->it_process);
689 		cpu_timer_setexpires(ctmr, 0);
690 	} else {
691 		posix_timer_queue_signal(timer);
692 		/* Disable oneshot timers */
693 		if (!timer->it_interval)
694 			cpu_timer_setexpires(ctmr, 0);
695 	}
696 }
697 
698 static void __posix_cpu_timer_get(struct k_itimer *timer, struct itimerspec64 *itp, u64 now);
699 
700 /*
701  * Guts of sys_timer_settime for CPU timers.
702  * This is called with the timer locked and interrupts disabled.
703  * If we return TIMER_RETRY, it's necessary to release the timer's lock
704  * and try again.  (This happens when the timer is in the middle of firing.)
705  */
706 static int posix_cpu_timer_set(struct k_itimer *timer, int timer_flags,
707 			       struct itimerspec64 *new, struct itimerspec64 *old)
708 {
709 	bool sigev_none = timer->it_sigev_notify == SIGEV_NONE;
710 	clockid_t clkid = CPUCLOCK_WHICH(timer->it_clock);
711 	struct cpu_timer *ctmr = &timer->it.cpu;
712 	u64 old_expires, new_expires, now;
713 	struct task_struct *p;
714 	unsigned long flags;
715 	int ret = 0;
716 
717 	p = timer_lock_sighand(timer, &flags);
718 	/*
719 	 * If p has just been reaped, we can no longer get any information about
720 	 * it at all.
721 	 */
722 	if (!p)
723 		return -ESRCH;
724 
725 	/*
726 	 * Use the to_ktime conversion because that clamps the maximum
727 	 * value to KTIME_MAX and avoid multiplication overflows.
728 	 */
729 	new_expires = ktime_to_ns(timespec64_to_ktime(new->it_value));
730 
731 	/* Retrieve the current expiry time before disarming the timer */
732 	old_expires = cpu_timer_getexpires(ctmr);
733 
734 	if (unlikely(timer->it.cpu.firing)) {
735 		/*
736 		 * Prevent signal delivery. The timer cannot be dequeued
737 		 * because it is on the firing list which is not protected
738 		 * by sighand->lock. The delivery path is waiting for
739 		 * the timer lock. So go back, unlock and retry.
740 		 */
741 		timer->it.cpu.firing = false;
742 		ret = TIMER_RETRY;
743 	} else {
744 		cpu_timer_dequeue(ctmr);
745 		timer->it_status = POSIX_TIMER_DISARMED;
746 	}
747 
748 	/*
749 	 * Sample the current clock for saving the previous setting
750 	 * and for rearming the timer.
751 	 */
752 	if (CPUCLOCK_PERTHREAD(timer->it_clock))
753 		now = cpu_clock_sample(clkid, p);
754 	else
755 		now = cpu_clock_sample_group(clkid, p, !sigev_none);
756 
757 	/* Retrieve the previous expiry value if requested. */
758 	if (old) {
759 		old->it_value = (struct timespec64){ };
760 		if (old_expires)
761 			__posix_cpu_timer_get(timer, old, now);
762 	}
763 
764 	/* Retry if the timer expiry is running concurrently */
765 	if (unlikely(ret)) {
766 		unlock_task_sighand(p, &flags);
767 		return ret;
768 	}
769 
770 	/* Convert relative expiry time to absolute */
771 	if (new_expires && !(timer_flags & TIMER_ABSTIME))
772 		new_expires += now;
773 
774 	/* Set the new expiry time (might be 0) */
775 	cpu_timer_setexpires(ctmr, new_expires);
776 
777 	/*
778 	 * Arm the timer if it is not disabled, the new expiry value has
779 	 * not yet expired and the timer requires signal delivery.
780 	 * SIGEV_NONE timers are never armed. In case the timer is not
781 	 * armed, enforce the reevaluation of the timer base so that the
782 	 * process wide cputime counter can be disabled eventually.
783 	 */
784 	if (likely(!sigev_none)) {
785 		if (new_expires && now < new_expires)
786 			arm_timer(timer, p);
787 		else
788 			trigger_base_recalc_expires(timer, p);
789 	}
790 
791 	unlock_task_sighand(p, &flags);
792 
793 	posix_timer_set_common(timer, new);
794 
795 	/*
796 	 * If the new expiry time was already in the past the timer was not
797 	 * queued. Fire it immediately even if the thread never runs to
798 	 * accumulate more time on this clock.
799 	 */
800 	if (!sigev_none && new_expires && now >= new_expires)
801 		cpu_timer_fire(timer);
802 	return ret;
803 }
804 
805 static void __posix_cpu_timer_get(struct k_itimer *timer, struct itimerspec64 *itp, u64 now)
806 {
807 	bool sigev_none = timer->it_sigev_notify == SIGEV_NONE;
808 	u64 expires, iv = timer->it_interval;
809 
810 	/*
811 	 * Make sure that interval timers are moved forward for the
812 	 * following cases:
813 	 *  - SIGEV_NONE timers which are never armed
814 	 *  - Timers which expired, but the signal has not yet been
815 	 *    delivered
816 	 */
817 	if (iv && timer->it_status != POSIX_TIMER_ARMED)
818 		expires = bump_cpu_timer(timer, now);
819 	else
820 		expires = cpu_timer_getexpires(&timer->it.cpu);
821 
822 	/*
823 	 * Expired interval timers cannot have a remaining time <= 0.
824 	 * The kernel has to move them forward so that the next
825 	 * timer expiry is > @now.
826 	 */
827 	if (now < expires) {
828 		itp->it_value = ns_to_timespec64(expires - now);
829 	} else {
830 		/*
831 		 * A single shot SIGEV_NONE timer must return 0, when it is
832 		 * expired! Timers which have a real signal delivery mode
833 		 * must return a remaining time greater than 0 because the
834 		 * signal has not yet been delivered.
835 		 */
836 		if (!sigev_none)
837 			itp->it_value.tv_nsec = 1;
838 	}
839 }
840 
841 static void posix_cpu_timer_get(struct k_itimer *timer, struct itimerspec64 *itp)
842 {
843 	clockid_t clkid = CPUCLOCK_WHICH(timer->it_clock);
844 	struct task_struct *p;
845 	u64 now;
846 
847 	rcu_read_lock();
848 	p = cpu_timer_task_rcu(timer);
849 	if (p && cpu_timer_getexpires(&timer->it.cpu)) {
850 		itp->it_interval = ktime_to_timespec64(timer->it_interval);
851 
852 		if (CPUCLOCK_PERTHREAD(timer->it_clock))
853 			now = cpu_clock_sample(clkid, p);
854 		else
855 			now = cpu_clock_sample_group(clkid, p, false);
856 
857 		__posix_cpu_timer_get(timer, itp, now);
858 	}
859 	rcu_read_unlock();
860 }
861 
862 #define MAX_COLLECTED	20
863 
864 static u64 collect_timerqueue(struct timerqueue_head *head,
865 			      struct list_head *firing, u64 now)
866 {
867 	struct timerqueue_node *next;
868 	int i = 0;
869 
870 	while ((next = timerqueue_getnext(head))) {
871 		struct cpu_timer *ctmr;
872 		u64 expires;
873 
874 		ctmr = container_of(next, struct cpu_timer, node);
875 		expires = cpu_timer_getexpires(ctmr);
876 		/* Limit the number of timers to expire at once */
877 		if (++i == MAX_COLLECTED || now < expires)
878 			return expires;
879 
880 		ctmr->firing = true;
881 		/* See posix_cpu_timer_wait_running() */
882 		rcu_assign_pointer(ctmr->handling, current);
883 		cpu_timer_dequeue(ctmr);
884 		list_add_tail(&ctmr->elist, firing);
885 	}
886 
887 	return U64_MAX;
888 }
889 
890 static void collect_posix_cputimers(struct posix_cputimers *pct, u64 *samples,
891 				    struct list_head *firing)
892 {
893 	struct posix_cputimer_base *base = pct->bases;
894 	int i;
895 
896 	for (i = 0; i < CPUCLOCK_MAX; i++, base++) {
897 		base->nextevt = collect_timerqueue(&base->tqhead, firing,
898 						    samples[i]);
899 	}
900 }
901 
902 static inline void check_dl_overrun(struct task_struct *tsk)
903 {
904 	if (tsk->dl.dl_overrun) {
905 		tsk->dl.dl_overrun = 0;
906 		send_signal_locked(SIGXCPU, SEND_SIG_PRIV, tsk, PIDTYPE_TGID);
907 	}
908 }
909 
910 static bool check_rlimit(u64 time, u64 limit, int signo, bool rt, bool hard)
911 {
912 	if (time < limit)
913 		return false;
914 
915 	if (print_fatal_signals) {
916 		pr_info("%s Watchdog Timeout (%s): %s[%d]\n",
917 			rt ? "RT" : "CPU", hard ? "hard" : "soft",
918 			current->comm, task_pid_nr(current));
919 	}
920 	send_signal_locked(signo, SEND_SIG_PRIV, current, PIDTYPE_TGID);
921 	return true;
922 }
923 
924 /*
925  * Check for any per-thread CPU timers that have fired and move them off
926  * the tsk->cpu_timers[N] list onto the firing list.  Here we update the
927  * tsk->it_*_expires values to reflect the remaining thread CPU timers.
928  */
929 static void check_thread_timers(struct task_struct *tsk,
930 				struct list_head *firing)
931 {
932 	struct posix_cputimers *pct = &tsk->posix_cputimers;
933 	u64 samples[CPUCLOCK_MAX];
934 	unsigned long soft;
935 
936 	if (dl_task(tsk))
937 		check_dl_overrun(tsk);
938 
939 	if (expiry_cache_is_inactive(pct))
940 		return;
941 
942 	task_sample_cputime(tsk, samples);
943 	collect_posix_cputimers(pct, samples, firing);
944 
945 	/*
946 	 * Check for the special case thread timers.
947 	 */
948 	soft = task_rlimit(tsk, RLIMIT_RTTIME);
949 	if (soft != RLIM_INFINITY) {
950 		/* Task RT timeout is accounted in jiffies. RTTIME is usec */
951 		unsigned long rttime = tsk->rt.timeout * (USEC_PER_SEC / HZ);
952 		unsigned long hard = task_rlimit_max(tsk, RLIMIT_RTTIME);
953 
954 		/* At the hard limit, send SIGKILL. No further action. */
955 		if (hard != RLIM_INFINITY &&
956 		    check_rlimit(rttime, hard, SIGKILL, true, true))
957 			return;
958 
959 		/* At the soft limit, send a SIGXCPU every second */
960 		if (check_rlimit(rttime, soft, SIGXCPU, true, false)) {
961 			soft += USEC_PER_SEC;
962 			tsk->signal->rlim[RLIMIT_RTTIME].rlim_cur = soft;
963 		}
964 	}
965 
966 	if (expiry_cache_is_inactive(pct))
967 		tick_dep_clear_task(tsk, TICK_DEP_BIT_POSIX_TIMER);
968 }
969 
970 static inline void stop_process_timers(struct signal_struct *sig)
971 {
972 	struct posix_cputimers *pct = &sig->posix_cputimers;
973 
974 	/* Turn off the active flag. This is done without locking. */
975 	WRITE_ONCE(pct->timers_active, false);
976 	tick_dep_clear_signal(sig, TICK_DEP_BIT_POSIX_TIMER);
977 }
978 
979 static void check_cpu_itimer(struct task_struct *tsk, struct cpu_itimer *it,
980 			     u64 *expires, u64 cur_time, int signo)
981 {
982 	if (!it->expires)
983 		return;
984 
985 	if (cur_time >= it->expires) {
986 		if (it->incr)
987 			it->expires += it->incr;
988 		else
989 			it->expires = 0;
990 
991 		trace_itimer_expire(signo == SIGPROF ?
992 				    ITIMER_PROF : ITIMER_VIRTUAL,
993 				    task_tgid(tsk), cur_time);
994 		send_signal_locked(signo, SEND_SIG_PRIV, tsk, PIDTYPE_TGID);
995 	}
996 
997 	if (it->expires && it->expires < *expires)
998 		*expires = it->expires;
999 }
1000 
1001 /*
1002  * Check for any per-thread CPU timers that have fired and move them
1003  * off the tsk->*_timers list onto the firing list.  Per-thread timers
1004  * have already been taken off.
1005  */
1006 static void check_process_timers(struct task_struct *tsk,
1007 				 struct list_head *firing)
1008 {
1009 	struct signal_struct *const sig = tsk->signal;
1010 	struct posix_cputimers *pct = &sig->posix_cputimers;
1011 	u64 samples[CPUCLOCK_MAX];
1012 	unsigned long soft;
1013 
1014 	/*
1015 	 * If there are no active process wide timers (POSIX 1.b, itimers,
1016 	 * RLIMIT_CPU) nothing to check. Also skip the process wide timer
1017 	 * processing when there is already another task handling them.
1018 	 */
1019 	if (!READ_ONCE(pct->timers_active) || pct->expiry_active)
1020 		return;
1021 
1022 	/*
1023 	 * Signify that a thread is checking for process timers.
1024 	 * Write access to this field is protected by the sighand lock.
1025 	 */
1026 	pct->expiry_active = true;
1027 
1028 	/*
1029 	 * Collect the current process totals. Group accounting is active
1030 	 * so the sample can be taken directly.
1031 	 */
1032 	proc_sample_cputime_atomic(&sig->cputimer.cputime_atomic, samples);
1033 	collect_posix_cputimers(pct, samples, firing);
1034 
1035 	/*
1036 	 * Check for the special case process timers.
1037 	 */
1038 	check_cpu_itimer(tsk, &sig->it[CPUCLOCK_PROF],
1039 			 &pct->bases[CPUCLOCK_PROF].nextevt,
1040 			 samples[CPUCLOCK_PROF], SIGPROF);
1041 	check_cpu_itimer(tsk, &sig->it[CPUCLOCK_VIRT],
1042 			 &pct->bases[CPUCLOCK_VIRT].nextevt,
1043 			 samples[CPUCLOCK_VIRT], SIGVTALRM);
1044 
1045 	soft = task_rlimit(tsk, RLIMIT_CPU);
1046 	if (soft != RLIM_INFINITY) {
1047 		/* RLIMIT_CPU is in seconds. Samples are nanoseconds */
1048 		unsigned long hard = task_rlimit_max(tsk, RLIMIT_CPU);
1049 		u64 ptime = samples[CPUCLOCK_PROF];
1050 		u64 softns = (u64)soft * NSEC_PER_SEC;
1051 		u64 hardns = (u64)hard * NSEC_PER_SEC;
1052 
1053 		/* At the hard limit, send SIGKILL. No further action. */
1054 		if (hard != RLIM_INFINITY &&
1055 		    check_rlimit(ptime, hardns, SIGKILL, false, true))
1056 			return;
1057 
1058 		/* At the soft limit, send a SIGXCPU every second */
1059 		if (check_rlimit(ptime, softns, SIGXCPU, false, false)) {
1060 			sig->rlim[RLIMIT_CPU].rlim_cur = soft + 1;
1061 			softns += NSEC_PER_SEC;
1062 		}
1063 
1064 		/* Update the expiry cache */
1065 		if (softns < pct->bases[CPUCLOCK_PROF].nextevt)
1066 			pct->bases[CPUCLOCK_PROF].nextevt = softns;
1067 	}
1068 
1069 	if (expiry_cache_is_inactive(pct))
1070 		stop_process_timers(sig);
1071 
1072 	pct->expiry_active = false;
1073 }
1074 
1075 /*
1076  * This is called from the signal code (via posixtimer_rearm)
1077  * when the last timer signal was delivered and we have to reload the timer.
1078  *
1079  * Return true unconditionally so the core code assumes the timer to be
1080  * armed. Otherwise it would requeue the signal.
1081  */
1082 static bool posix_cpu_timer_rearm(struct k_itimer *timer)
1083 {
1084 	clockid_t clkid = CPUCLOCK_WHICH(timer->it_clock);
1085 	struct task_struct *p;
1086 	unsigned long flags;
1087 	u64 now;
1088 
1089 	p = timer_lock_sighand(timer, &flags);
1090 	if (unlikely(!p))
1091 		return true;
1092 
1093 	/*
1094 	 * Fetch the current sample and update the timer's expiry time.
1095 	 */
1096 	if (CPUCLOCK_PERTHREAD(timer->it_clock))
1097 		now = cpu_clock_sample(clkid, p);
1098 	else
1099 		now = cpu_clock_sample_group(clkid, p, true);
1100 
1101 	bump_cpu_timer(timer, now);
1102 
1103 	/*
1104 	 * Now re-arm for the new expiry time.
1105 	 */
1106 	arm_timer(timer, p);
1107 	unlock_task_sighand(p, &flags);
1108 	return true;
1109 }
1110 
1111 /**
1112  * task_cputimers_expired - Check whether posix CPU timers are expired
1113  *
1114  * @samples:	Array of current samples for the CPUCLOCK clocks
1115  * @pct:	Pointer to a posix_cputimers container
1116  *
1117  * Returns true if any member of @samples is greater than the corresponding
1118  * member of @pct->bases[CLK].nextevt. False otherwise
1119  */
1120 static inline bool
1121 task_cputimers_expired(const u64 *samples, struct posix_cputimers *pct)
1122 {
1123 	int i;
1124 
1125 	for (i = 0; i < CPUCLOCK_MAX; i++) {
1126 		if (samples[i] >= pct->bases[i].nextevt)
1127 			return true;
1128 	}
1129 	return false;
1130 }
1131 
1132 /**
1133  * fastpath_timer_check - POSIX CPU timers fast path.
1134  *
1135  * @tsk:	The task (thread) being checked.
1136  *
1137  * Check the task and thread group timers.  If both are zero (there are no
1138  * timers set) return false.  Otherwise snapshot the task and thread group
1139  * timers and compare them with the corresponding expiration times.  Return
1140  * true if a timer has expired, else return false.
1141  */
1142 static inline bool fastpath_timer_check(struct task_struct *tsk)
1143 {
1144 	struct posix_cputimers *pct = &tsk->posix_cputimers;
1145 	struct signal_struct *sig;
1146 
1147 	if (!expiry_cache_is_inactive(pct)) {
1148 		u64 samples[CPUCLOCK_MAX];
1149 
1150 		task_sample_cputime(tsk, samples);
1151 		if (task_cputimers_expired(samples, pct))
1152 			return true;
1153 	}
1154 
1155 	sig = tsk->signal;
1156 	pct = &sig->posix_cputimers;
1157 	/*
1158 	 * Check if thread group timers expired when timers are active and
1159 	 * no other thread in the group is already handling expiry for
1160 	 * thread group cputimers. These fields are read without the
1161 	 * sighand lock. However, this is fine because this is meant to be
1162 	 * a fastpath heuristic to determine whether we should try to
1163 	 * acquire the sighand lock to handle timer expiry.
1164 	 *
1165 	 * In the worst case scenario, if concurrently timers_active is set
1166 	 * or expiry_active is cleared, but the current thread doesn't see
1167 	 * the change yet, the timer checks are delayed until the next
1168 	 * thread in the group gets a scheduler interrupt to handle the
1169 	 * timer. This isn't an issue in practice because these types of
1170 	 * delays with signals actually getting sent are expected.
1171 	 */
1172 	if (READ_ONCE(pct->timers_active) && !READ_ONCE(pct->expiry_active)) {
1173 		u64 samples[CPUCLOCK_MAX];
1174 
1175 		proc_sample_cputime_atomic(&sig->cputimer.cputime_atomic,
1176 					   samples);
1177 
1178 		if (task_cputimers_expired(samples, pct))
1179 			return true;
1180 	}
1181 
1182 	if (dl_task(tsk) && tsk->dl.dl_overrun)
1183 		return true;
1184 
1185 	return false;
1186 }
1187 
1188 static void handle_posix_cpu_timers(struct task_struct *tsk);
1189 
1190 #ifdef CONFIG_POSIX_CPU_TIMERS_TASK_WORK
1191 static void posix_cpu_timers_work(struct callback_head *work)
1192 {
1193 	struct posix_cputimers_work *cw = container_of(work, typeof(*cw), work);
1194 
1195 	mutex_lock(&cw->mutex);
1196 	handle_posix_cpu_timers(current);
1197 	mutex_unlock(&cw->mutex);
1198 }
1199 
1200 /*
1201  * Invoked from the posix-timer core when a cancel operation failed because
1202  * the timer is marked firing. The caller holds rcu_read_lock(), which
1203  * protects the timer and the task which is expiring it from being freed.
1204  */
1205 static void posix_cpu_timer_wait_running(struct k_itimer *timr)
1206 {
1207 	struct task_struct *tsk = rcu_dereference(timr->it.cpu.handling);
1208 
1209 	/* Has the handling task completed expiry already? */
1210 	if (!tsk)
1211 		return;
1212 
1213 	/* Ensure that the task cannot go away */
1214 	get_task_struct(tsk);
1215 	/* Now drop the RCU protection so the mutex can be locked */
1216 	rcu_read_unlock();
1217 	/* Wait on the expiry mutex */
1218 	mutex_lock(&tsk->posix_cputimers_work.mutex);
1219 	/* Release it immediately again. */
1220 	mutex_unlock(&tsk->posix_cputimers_work.mutex);
1221 	/* Drop the task reference. */
1222 	put_task_struct(tsk);
1223 	/* Relock RCU so the callsite is balanced */
1224 	rcu_read_lock();
1225 }
1226 
1227 static void posix_cpu_timer_wait_running_nsleep(struct k_itimer *timr)
1228 {
1229 	/* Ensure that timr->it.cpu.handling task cannot go away */
1230 	rcu_read_lock();
1231 	spin_unlock_irq(&timr->it_lock);
1232 	posix_cpu_timer_wait_running(timr);
1233 	rcu_read_unlock();
1234 	/* @timr is on stack and is valid */
1235 	spin_lock_irq(&timr->it_lock);
1236 }
1237 
1238 /*
1239  * Clear existing posix CPU timers task work.
1240  */
1241 void clear_posix_cputimers_work(struct task_struct *p)
1242 {
1243 	/*
1244 	 * A copied work entry from the old task is not meaningful, clear it.
1245 	 * N.B. init_task_work will not do this.
1246 	 */
1247 	memset(&p->posix_cputimers_work.work, 0,
1248 	       sizeof(p->posix_cputimers_work.work));
1249 	init_task_work(&p->posix_cputimers_work.work,
1250 		       posix_cpu_timers_work);
1251 	mutex_init(&p->posix_cputimers_work.mutex);
1252 	p->posix_cputimers_work.scheduled = false;
1253 }
1254 
1255 /*
1256  * Initialize posix CPU timers task work in init task. Out of line to
1257  * keep the callback static and to avoid header recursion hell.
1258  */
1259 void __init posix_cputimers_init_work(void)
1260 {
1261 	clear_posix_cputimers_work(current);
1262 }
1263 
1264 /*
1265  * Note: All operations on tsk->posix_cputimer_work.scheduled happen either
1266  * in hard interrupt context or in task context with interrupts
1267  * disabled. Aside of that the writer/reader interaction is always in the
1268  * context of the current task, which means they are strict per CPU.
1269  */
1270 static inline bool posix_cpu_timers_work_scheduled(struct task_struct *tsk)
1271 {
1272 	return tsk->posix_cputimers_work.scheduled;
1273 }
1274 
1275 static inline void __run_posix_cpu_timers(struct task_struct *tsk)
1276 {
1277 	if (WARN_ON_ONCE(tsk->posix_cputimers_work.scheduled))
1278 		return;
1279 
1280 	/* Schedule task work to actually expire the timers */
1281 	tsk->posix_cputimers_work.scheduled = true;
1282 	task_work_add(tsk, &tsk->posix_cputimers_work.work, TWA_RESUME);
1283 }
1284 
1285 static inline bool posix_cpu_timers_enable_work(struct task_struct *tsk,
1286 						unsigned long start)
1287 {
1288 	bool ret = true;
1289 
1290 	/*
1291 	 * On !RT kernels interrupts are disabled while collecting expired
1292 	 * timers, so no tick can happen and the fast path check can be
1293 	 * reenabled without further checks.
1294 	 */
1295 	if (!IS_ENABLED(CONFIG_PREEMPT_RT)) {
1296 		tsk->posix_cputimers_work.scheduled = false;
1297 		return true;
1298 	}
1299 
1300 	/*
1301 	 * On RT enabled kernels ticks can happen while the expired timers
1302 	 * are collected under sighand lock. But any tick which observes
1303 	 * the CPUTIMERS_WORK_SCHEDULED bit set, does not run the fastpath
1304 	 * checks. So reenabling the tick work has do be done carefully:
1305 	 *
1306 	 * Disable interrupts and run the fast path check if jiffies have
1307 	 * advanced since the collecting of expired timers started. If
1308 	 * jiffies have not advanced or the fast path check did not find
1309 	 * newly expired timers, reenable the fast path check in the timer
1310 	 * interrupt. If there are newly expired timers, return false and
1311 	 * let the collection loop repeat.
1312 	 */
1313 	local_irq_disable();
1314 	if (start != jiffies && fastpath_timer_check(tsk))
1315 		ret = false;
1316 	else
1317 		tsk->posix_cputimers_work.scheduled = false;
1318 	local_irq_enable();
1319 
1320 	return ret;
1321 }
1322 #else /* CONFIG_POSIX_CPU_TIMERS_TASK_WORK */
1323 static inline void __run_posix_cpu_timers(struct task_struct *tsk)
1324 {
1325 	lockdep_posixtimer_enter();
1326 	handle_posix_cpu_timers(tsk);
1327 	lockdep_posixtimer_exit();
1328 }
1329 
1330 static void posix_cpu_timer_wait_running(struct k_itimer *timr)
1331 {
1332 	cpu_relax();
1333 }
1334 
1335 static void posix_cpu_timer_wait_running_nsleep(struct k_itimer *timr)
1336 {
1337 	spin_unlock_irq(&timr->it_lock);
1338 	cpu_relax();
1339 	spin_lock_irq(&timr->it_lock);
1340 }
1341 
1342 static inline bool posix_cpu_timers_work_scheduled(struct task_struct *tsk)
1343 {
1344 	return false;
1345 }
1346 
1347 static inline bool posix_cpu_timers_enable_work(struct task_struct *tsk,
1348 						unsigned long start)
1349 {
1350 	return true;
1351 }
1352 #endif /* CONFIG_POSIX_CPU_TIMERS_TASK_WORK */
1353 
1354 static void handle_posix_cpu_timers(struct task_struct *tsk)
1355 {
1356 	struct k_itimer *timer, *next;
1357 	unsigned long flags, start;
1358 	LIST_HEAD(firing);
1359 
1360 	/*
1361 	 * tsk is current and ->sighand is stable, see the
1362 	 * tsk->exit_state check in run_posix_cpu_timers()
1363 	 */
1364 	spin_lock_irqsave(&tsk->sighand->siglock, flags);
1365 
1366 	do {
1367 		/*
1368 		 * On RT locking sighand lock does not disable interrupts,
1369 		 * so this needs to be careful vs. ticks. Store the current
1370 		 * jiffies value.
1371 		 */
1372 		start = READ_ONCE(jiffies);
1373 		barrier();
1374 
1375 		/*
1376 		 * Here we take off tsk->signal->cpu_timers[N] and
1377 		 * tsk->cpu_timers[N] all the timers that are firing, and
1378 		 * put them on the firing list.
1379 		 */
1380 		check_thread_timers(tsk, &firing);
1381 
1382 		check_process_timers(tsk, &firing);
1383 
1384 		/*
1385 		 * The above timer checks have updated the expiry cache and
1386 		 * because nothing can have queued or modified timers after
1387 		 * sighand lock was taken above it is guaranteed to be
1388 		 * consistent. So the next timer interrupt fastpath check
1389 		 * will find valid data.
1390 		 *
1391 		 * If timer expiry runs in the timer interrupt context then
1392 		 * the loop is not relevant as timers will be directly
1393 		 * expired in interrupt context. The stub function below
1394 		 * returns always true which allows the compiler to
1395 		 * optimize the loop out.
1396 		 *
1397 		 * If timer expiry is deferred to task work context then
1398 		 * the following rules apply:
1399 		 *
1400 		 * - On !RT kernels no tick can have happened on this CPU
1401 		 *   after sighand lock was acquired because interrupts are
1402 		 *   disabled. So reenabling task work before dropping
1403 		 *   sighand lock and reenabling interrupts is race free.
1404 		 *
1405 		 * - On RT kernels ticks might have happened but the tick
1406 		 *   work ignored posix CPU timer handling because the
1407 		 *   CPUTIMERS_WORK_SCHEDULED bit is set. Reenabling work
1408 		 *   must be done very carefully including a check whether
1409 		 *   ticks have happened since the start of the timer
1410 		 *   expiry checks. posix_cpu_timers_enable_work() takes
1411 		 *   care of that and eventually lets the expiry checks
1412 		 *   run again.
1413 		 */
1414 	} while (!posix_cpu_timers_enable_work(tsk, start));
1415 
1416 	/*
1417 	 * We must release sighand lock before taking any timer's lock.
1418 	 * There is a potential race with timer deletion here, as the
1419 	 * siglock now protects our private firing list.  We have set
1420 	 * the firing flag in each timer, so that a deletion attempt
1421 	 * that gets the timer lock before we do will give it up and
1422 	 * spin until we've taken care of that timer below.
1423 	 */
1424 	spin_unlock_irqrestore(&tsk->sighand->siglock, flags);
1425 
1426 	/*
1427 	 * Now that all the timers on our list have the firing flag,
1428 	 * no one will touch their list entries but us.  We'll take
1429 	 * each timer's lock before clearing its firing flag, so no
1430 	 * timer call will interfere.
1431 	 */
1432 	list_for_each_entry_safe(timer, next, &firing, it.cpu.elist) {
1433 		bool cpu_firing;
1434 
1435 		/*
1436 		 * spin_lock() is sufficient here even independent of the
1437 		 * expiry context. If expiry happens in hard interrupt
1438 		 * context it's obvious. For task work context it's safe
1439 		 * because all other operations on timer::it_lock happen in
1440 		 * task context (syscall or exit).
1441 		 */
1442 		spin_lock(&timer->it_lock);
1443 		list_del_init(&timer->it.cpu.elist);
1444 		cpu_firing = timer->it.cpu.firing;
1445 		timer->it.cpu.firing = false;
1446 		/*
1447 		 * If the firing flag is cleared then this raced with a
1448 		 * timer rearm/delete operation. So don't generate an
1449 		 * event.
1450 		 */
1451 		if (likely(cpu_firing))
1452 			cpu_timer_fire(timer);
1453 		/* See posix_cpu_timer_wait_running() */
1454 		rcu_assign_pointer(timer->it.cpu.handling, NULL);
1455 		spin_unlock(&timer->it_lock);
1456 	}
1457 }
1458 
1459 /*
1460  * This is called from the timer interrupt handler.  The irq handler has
1461  * already updated our counts.  We need to check if any timers fire now.
1462  * Interrupts are disabled.
1463  */
1464 void run_posix_cpu_timers(void)
1465 {
1466 	struct task_struct *tsk = current;
1467 
1468 	lockdep_assert_irqs_disabled();
1469 
1470 	/*
1471 	 * Ensure that release_task(tsk) can't happen while
1472 	 * handle_posix_cpu_timers() is running. Otherwise, a concurrent
1473 	 * posix_cpu_timer_del() may fail to lock_task_sighand(tsk) and
1474 	 * miss timer->it.cpu.firing != 0.
1475 	 */
1476 	if (tsk->exit_state)
1477 		return;
1478 
1479 	/*
1480 	 * If the actual expiry is deferred to task work context and the
1481 	 * work is already scheduled there is no point to do anything here.
1482 	 */
1483 	if (posix_cpu_timers_work_scheduled(tsk))
1484 		return;
1485 
1486 	/*
1487 	 * The fast path checks that there are no expired thread or thread
1488 	 * group timers.  If that's so, just return.
1489 	 */
1490 	if (!fastpath_timer_check(tsk))
1491 		return;
1492 
1493 	__run_posix_cpu_timers(tsk);
1494 }
1495 
1496 /*
1497  * Set one of the process-wide special case CPU timers or RLIMIT_CPU.
1498  * The tsk->sighand->siglock must be held by the caller.
1499  */
1500 void set_process_cpu_timer(struct task_struct *tsk, unsigned int clkid,
1501 			   u64 *newval, u64 *oldval)
1502 {
1503 	u64 now, *nextevt;
1504 
1505 	if (WARN_ON_ONCE(clkid >= CPUCLOCK_SCHED))
1506 		return;
1507 
1508 	nextevt = &tsk->signal->posix_cputimers.bases[clkid].nextevt;
1509 	now = cpu_clock_sample_group(clkid, tsk, true);
1510 
1511 	if (oldval) {
1512 		/*
1513 		 * We are setting itimer. The *oldval is absolute and we update
1514 		 * it to be relative, *newval argument is relative and we update
1515 		 * it to be absolute.
1516 		 */
1517 		if (*oldval) {
1518 			if (*oldval <= now) {
1519 				/* Just about to fire. */
1520 				*oldval = TICK_NSEC;
1521 			} else {
1522 				*oldval -= now;
1523 			}
1524 		}
1525 
1526 		if (*newval)
1527 			*newval += now;
1528 	}
1529 
1530 	/*
1531 	 * Update expiration cache if this is the earliest timer. CPUCLOCK_PROF
1532 	 * expiry cache is also used by RLIMIT_CPU!.
1533 	 */
1534 	if (*newval < *nextevt)
1535 		*nextevt = *newval;
1536 
1537 	tick_dep_set_signal(tsk, TICK_DEP_BIT_POSIX_TIMER);
1538 }
1539 
1540 static int do_cpu_nanosleep(const clockid_t which_clock, int flags,
1541 			    const struct timespec64 *rqtp)
1542 {
1543 	struct itimerspec64 it;
1544 	struct k_itimer timer;
1545 	u64 expires;
1546 	int error;
1547 
1548 	/*
1549 	 * Set up a temporary timer and then wait for it to go off.
1550 	 */
1551 	memset(&timer, 0, sizeof timer);
1552 	spin_lock_init(&timer.it_lock);
1553 	timer.it_clock = which_clock;
1554 	timer.it_overrun = -1;
1555 	error = posix_cpu_timer_create(&timer);
1556 	timer.it_process = current;
1557 	timer.it.cpu.nanosleep = true;
1558 
1559 	if (!error) {
1560 		static struct itimerspec64 zero_it;
1561 		struct restart_block *restart;
1562 
1563 		memset(&it, 0, sizeof(it));
1564 		it.it_value = *rqtp;
1565 
1566 		spin_lock_irq(&timer.it_lock);
1567 		error = posix_cpu_timer_set(&timer, flags, &it, NULL);
1568 		if (error) {
1569 			posix_cpu_timer_del(&timer);
1570 			spin_unlock_irq(&timer.it_lock);
1571 			return error;
1572 		}
1573 
1574 		while (!signal_pending(current)) {
1575 			if (!cpu_timer_getexpires(&timer.it.cpu)) {
1576 				/*
1577 				 * Our timer fired and was reset, below
1578 				 * deletion can not fail.
1579 				 */
1580 				posix_cpu_timer_del(&timer);
1581 				spin_unlock_irq(&timer.it_lock);
1582 				return 0;
1583 			}
1584 
1585 			/*
1586 			 * Block until cpu_timer_fire (or a signal) wakes us.
1587 			 */
1588 			__set_current_state(TASK_INTERRUPTIBLE);
1589 			spin_unlock_irq(&timer.it_lock);
1590 			schedule();
1591 			spin_lock_irq(&timer.it_lock);
1592 		}
1593 
1594 		/*
1595 		 * We were interrupted by a signal.
1596 		 */
1597 		expires = cpu_timer_getexpires(&timer.it.cpu);
1598 		error = posix_cpu_timer_set(&timer, 0, &zero_it, &it);
1599 		if (!error) {
1600 			/* Timer is now unarmed, deletion can not fail. */
1601 			posix_cpu_timer_del(&timer);
1602 		} else {
1603 			while (error == TIMER_RETRY) {
1604 				posix_cpu_timer_wait_running_nsleep(&timer);
1605 				error = posix_cpu_timer_del(&timer);
1606 			}
1607 		}
1608 
1609 		spin_unlock_irq(&timer.it_lock);
1610 
1611 		if ((it.it_value.tv_sec | it.it_value.tv_nsec) == 0) {
1612 			/*
1613 			 * It actually did fire already.
1614 			 */
1615 			return 0;
1616 		}
1617 
1618 		error = -ERESTART_RESTARTBLOCK;
1619 		/*
1620 		 * Report back to the user the time still remaining.
1621 		 */
1622 		restart = &current->restart_block;
1623 		restart->nanosleep.expires = ns_to_ktime(expires);
1624 		if (restart->nanosleep.type != TT_NONE)
1625 			error = nanosleep_copyout(restart, &it.it_value);
1626 	}
1627 
1628 	return error;
1629 }
1630 
1631 static long posix_cpu_nsleep_restart(struct restart_block *restart_block);
1632 
1633 static int posix_cpu_nsleep(const clockid_t which_clock, int flags,
1634 			    const struct timespec64 *rqtp)
1635 {
1636 	struct restart_block *restart_block = &current->restart_block;
1637 	int error;
1638 
1639 	/*
1640 	 * Diagnose required errors first.
1641 	 */
1642 	if (CPUCLOCK_PERTHREAD(which_clock) &&
1643 	    (CPUCLOCK_PID(which_clock) == 0 ||
1644 	     CPUCLOCK_PID(which_clock) == task_pid_vnr(current)))
1645 		return -EINVAL;
1646 
1647 	error = do_cpu_nanosleep(which_clock, flags, rqtp);
1648 
1649 	if (error == -ERESTART_RESTARTBLOCK) {
1650 
1651 		if (flags & TIMER_ABSTIME)
1652 			return -ERESTARTNOHAND;
1653 
1654 		restart_block->nanosleep.clockid = which_clock;
1655 		set_restart_fn(restart_block, posix_cpu_nsleep_restart);
1656 	}
1657 	return error;
1658 }
1659 
1660 static long posix_cpu_nsleep_restart(struct restart_block *restart_block)
1661 {
1662 	clockid_t which_clock = restart_block->nanosleep.clockid;
1663 	struct timespec64 t;
1664 
1665 	t = ktime_to_timespec64(restart_block->nanosleep.expires);
1666 
1667 	return do_cpu_nanosleep(which_clock, TIMER_ABSTIME, &t);
1668 }
1669 
1670 #define PROCESS_CLOCK	make_process_cpuclock(0, CPUCLOCK_SCHED)
1671 #define THREAD_CLOCK	make_thread_cpuclock(0, CPUCLOCK_SCHED)
1672 
1673 static int process_cpu_clock_getres(const clockid_t which_clock,
1674 				    struct timespec64 *tp)
1675 {
1676 	return posix_cpu_clock_getres(PROCESS_CLOCK, tp);
1677 }
1678 static int process_cpu_clock_get(const clockid_t which_clock,
1679 				 struct timespec64 *tp)
1680 {
1681 	return posix_cpu_clock_get(PROCESS_CLOCK, tp);
1682 }
1683 static int process_cpu_timer_create(struct k_itimer *timer)
1684 {
1685 	timer->it_clock = PROCESS_CLOCK;
1686 	return posix_cpu_timer_create(timer);
1687 }
1688 static int process_cpu_nsleep(const clockid_t which_clock, int flags,
1689 			      const struct timespec64 *rqtp)
1690 {
1691 	return posix_cpu_nsleep(PROCESS_CLOCK, flags, rqtp);
1692 }
1693 static int thread_cpu_clock_getres(const clockid_t which_clock,
1694 				   struct timespec64 *tp)
1695 {
1696 	return posix_cpu_clock_getres(THREAD_CLOCK, tp);
1697 }
1698 static int thread_cpu_clock_get(const clockid_t which_clock,
1699 				struct timespec64 *tp)
1700 {
1701 	return posix_cpu_clock_get(THREAD_CLOCK, tp);
1702 }
1703 static int thread_cpu_timer_create(struct k_itimer *timer)
1704 {
1705 	timer->it_clock = THREAD_CLOCK;
1706 	return posix_cpu_timer_create(timer);
1707 }
1708 
1709 const struct k_clock clock_posix_cpu = {
1710 	.clock_getres		= posix_cpu_clock_getres,
1711 	.clock_set		= posix_cpu_clock_set,
1712 	.clock_get_timespec	= posix_cpu_clock_get,
1713 	.timer_create		= posix_cpu_timer_create,
1714 	.nsleep			= posix_cpu_nsleep,
1715 	.timer_set		= posix_cpu_timer_set,
1716 	.timer_del		= posix_cpu_timer_del,
1717 	.timer_get		= posix_cpu_timer_get,
1718 	.timer_rearm		= posix_cpu_timer_rearm,
1719 	.timer_wait_running	= posix_cpu_timer_wait_running,
1720 };
1721 
1722 const struct k_clock clock_process = {
1723 	.clock_getres		= process_cpu_clock_getres,
1724 	.clock_get_timespec	= process_cpu_clock_get,
1725 	.timer_create		= process_cpu_timer_create,
1726 	.nsleep			= process_cpu_nsleep,
1727 };
1728 
1729 const struct k_clock clock_thread = {
1730 	.clock_getres		= thread_cpu_clock_getres,
1731 	.clock_get_timespec	= thread_cpu_clock_get,
1732 	.timer_create		= thread_cpu_timer_create,
1733 };
1734