depmod: pass -P $CONFIG_SYMBOL_PREFIX
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / kernel / posix-cpu-timers.c
CommitLineData
1da177e4
LT
1/*
2 * Implement CPU time clocks for the POSIX clock interface.
3 */
4
5#include <linux/sched.h>
6#include <linux/posix-timers.h>
1da177e4 7#include <linux/errno.h>
f8bd2258
RZ
8#include <linux/math64.h>
9#include <asm/uaccess.h>
bb34d92f 10#include <linux/kernel_stat.h>
3f0a525e 11#include <trace/events/timer.h>
61337054 12#include <linux/random.h>
1da177e4 13
f06febc9 14/*
f55db609
SG
15 * Called after updating RLIMIT_CPU to run cpu timer and update
16 * tsk->signal->cputime_expires expiration cache if necessary. Needs
17 * siglock protection since other code may update expiration cache as
18 * well.
f06febc9 19 */
5ab46b34 20void update_rlimit_cpu(struct task_struct *task, unsigned long rlim_new)
f06febc9 21{
42c4ab41 22 cputime_t cputime = secs_to_cputime(rlim_new);
f06febc9 23
5ab46b34
JS
24 spin_lock_irq(&task->sighand->siglock);
25 set_process_cpu_timer(task, CPUCLOCK_PROF, &cputime, NULL);
26 spin_unlock_irq(&task->sighand->siglock);
f06febc9
FM
27}
28
a924b04d 29static int check_clock(const clockid_t which_clock)
1da177e4
LT
30{
31 int error = 0;
32 struct task_struct *p;
33 const pid_t pid = CPUCLOCK_PID(which_clock);
34
35 if (CPUCLOCK_WHICH(which_clock) >= CPUCLOCK_MAX)
36 return -EINVAL;
37
38 if (pid == 0)
39 return 0;
40
c0deae8c 41 rcu_read_lock();
8dc86af0 42 p = find_task_by_vpid(pid);
bac0abd6 43 if (!p || !(CPUCLOCK_PERTHREAD(which_clock) ?
c0deae8c 44 same_thread_group(p, current) : has_group_leader_pid(p))) {
1da177e4
LT
45 error = -EINVAL;
46 }
c0deae8c 47 rcu_read_unlock();
1da177e4
LT
48
49 return error;
50}
51
52static inline union cpu_time_count
a924b04d 53timespec_to_sample(const clockid_t which_clock, const struct timespec *tp)
1da177e4
LT
54{
55 union cpu_time_count ret;
56 ret.sched = 0; /* high half always zero when .cpu used */
57 if (CPUCLOCK_WHICH(which_clock) == CPUCLOCK_SCHED) {
ee500f27 58 ret.sched = (unsigned long long)tp->tv_sec * NSEC_PER_SEC + tp->tv_nsec;
1da177e4
LT
59 } else {
60 ret.cpu = timespec_to_cputime(tp);
61 }
62 return ret;
63}
64
a924b04d 65static void sample_to_timespec(const clockid_t which_clock,
1da177e4
LT
66 union cpu_time_count cpu,
67 struct timespec *tp)
68{
f8bd2258
RZ
69 if (CPUCLOCK_WHICH(which_clock) == CPUCLOCK_SCHED)
70 *tp = ns_to_timespec(cpu.sched);
71 else
1da177e4 72 cputime_to_timespec(cpu.cpu, tp);
1da177e4
LT
73}
74
a924b04d 75static inline int cpu_time_before(const clockid_t which_clock,
1da177e4
LT
76 union cpu_time_count now,
77 union cpu_time_count then)
78{
79 if (CPUCLOCK_WHICH(which_clock) == CPUCLOCK_SCHED) {
80 return now.sched < then.sched;
81 } else {
64861634 82 return now.cpu < then.cpu;
1da177e4
LT
83 }
84}
a924b04d 85static inline void cpu_time_add(const clockid_t which_clock,
1da177e4
LT
86 union cpu_time_count *acc,
87 union cpu_time_count val)
88{
89 if (CPUCLOCK_WHICH(which_clock) == CPUCLOCK_SCHED) {
90 acc->sched += val.sched;
91 } else {
64861634 92 acc->cpu += val.cpu;
1da177e4
LT
93 }
94}
a924b04d 95static inline union cpu_time_count cpu_time_sub(const clockid_t which_clock,
1da177e4
LT
96 union cpu_time_count a,
97 union cpu_time_count b)
98{
99 if (CPUCLOCK_WHICH(which_clock) == CPUCLOCK_SCHED) {
100 a.sched -= b.sched;
101 } else {
64861634 102 a.cpu -= b.cpu;
1da177e4
LT
103 }
104 return a;
105}
106
107/*
108 * Update expiry time from increment, and increase overrun count,
109 * given the current clock sample.
110 */
7a4ed937 111static void bump_cpu_timer(struct k_itimer *timer,
1da177e4
LT
112 union cpu_time_count now)
113{
114 int i;
115
116 if (timer->it.cpu.incr.sched == 0)
117 return;
118
119 if (CPUCLOCK_WHICH(timer->it_clock) == CPUCLOCK_SCHED) {
120 unsigned long long delta, incr;
121
122 if (now.sched < timer->it.cpu.expires.sched)
123 return;
124 incr = timer->it.cpu.incr.sched;
125 delta = now.sched + incr - timer->it.cpu.expires.sched;
126 /* Don't use (incr*2 < delta), incr*2 might overflow. */
127 for (i = 0; incr < delta - incr; i++)
128 incr = incr << 1;
129 for (; i >= 0; incr >>= 1, i--) {
7a4ed937 130 if (delta < incr)
1da177e4
LT
131 continue;
132 timer->it.cpu.expires.sched += incr;
133 timer->it_overrun += 1 << i;
134 delta -= incr;
135 }
136 } else {
137 cputime_t delta, incr;
138
64861634 139 if (now.cpu < timer->it.cpu.expires.cpu)
1da177e4
LT
140 return;
141 incr = timer->it.cpu.incr.cpu;
64861634 142 delta = now.cpu + incr - timer->it.cpu.expires.cpu;
1da177e4 143 /* Don't use (incr*2 < delta), incr*2 might overflow. */
64861634
MS
144 for (i = 0; incr < delta - incr; i++)
145 incr += incr;
146 for (; i >= 0; incr = incr >> 1, i--) {
147 if (delta < incr)
1da177e4 148 continue;
64861634 149 timer->it.cpu.expires.cpu += incr;
1da177e4 150 timer->it_overrun += 1 << i;
64861634 151 delta -= incr;
1da177e4
LT
152 }
153 }
154}
155
156static inline cputime_t prof_ticks(struct task_struct *p)
157{
64861634 158 return p->utime + p->stime;
1da177e4
LT
159}
160static inline cputime_t virt_ticks(struct task_struct *p)
161{
162 return p->utime;
163}
1da177e4 164
bc2c8ea4
TG
165static int
166posix_cpu_clock_getres(const clockid_t which_clock, struct timespec *tp)
1da177e4
LT
167{
168 int error = check_clock(which_clock);
169 if (!error) {
170 tp->tv_sec = 0;
171 tp->tv_nsec = ((NSEC_PER_SEC + HZ - 1) / HZ);
172 if (CPUCLOCK_WHICH(which_clock) == CPUCLOCK_SCHED) {
173 /*
174 * If sched_clock is using a cycle counter, we
175 * don't have any idea of its true resolution
176 * exported, but it is much more than 1s/HZ.
177 */
178 tp->tv_nsec = 1;
179 }
180 }
181 return error;
182}
183
bc2c8ea4
TG
184static int
185posix_cpu_clock_set(const clockid_t which_clock, const struct timespec *tp)
1da177e4
LT
186{
187 /*
188 * You can never reset a CPU clock, but we check for other errors
189 * in the call before failing with EPERM.
190 */
191 int error = check_clock(which_clock);
192 if (error == 0) {
193 error = -EPERM;
194 }
195 return error;
196}
197
198
199/*
200 * Sample a per-thread clock for the given task.
201 */
a924b04d 202static int cpu_clock_sample(const clockid_t which_clock, struct task_struct *p,
1da177e4
LT
203 union cpu_time_count *cpu)
204{
205 switch (CPUCLOCK_WHICH(which_clock)) {
206 default:
207 return -EINVAL;
208 case CPUCLOCK_PROF:
209 cpu->cpu = prof_ticks(p);
210 break;
211 case CPUCLOCK_VIRT:
212 cpu->cpu = virt_ticks(p);
213 break;
214 case CPUCLOCK_SCHED:
c5f8d995 215 cpu->sched = task_sched_runtime(p);
1da177e4
LT
216 break;
217 }
218 return 0;
219}
220
4da94d49
PZ
221static void update_gt_cputime(struct task_cputime *a, struct task_cputime *b)
222{
64861634 223 if (b->utime > a->utime)
4da94d49
PZ
224 a->utime = b->utime;
225
64861634 226 if (b->stime > a->stime)
4da94d49
PZ
227 a->stime = b->stime;
228
229 if (b->sum_exec_runtime > a->sum_exec_runtime)
230 a->sum_exec_runtime = b->sum_exec_runtime;
231}
232
233void thread_group_cputimer(struct task_struct *tsk, struct task_cputime *times)
234{
235 struct thread_group_cputimer *cputimer = &tsk->signal->cputimer;
236 struct task_cputime sum;
237 unsigned long flags;
238
4da94d49 239 if (!cputimer->running) {
4da94d49
PZ
240 /*
241 * The POSIX timer interface allows for absolute time expiry
242 * values through the TIMER_ABSTIME flag, therefore we have
243 * to synchronize the timer to the clock every time we start
244 * it.
245 */
246 thread_group_cputime(tsk, &sum);
3cfef952 247 raw_spin_lock_irqsave(&cputimer->lock, flags);
bcd5cff7 248 cputimer->running = 1;
4da94d49 249 update_gt_cputime(&cputimer->cputime, &sum);
bcd5cff7 250 } else
3cfef952 251 raw_spin_lock_irqsave(&cputimer->lock, flags);
4da94d49 252 *times = cputimer->cputime;
ee30a7b2 253 raw_spin_unlock_irqrestore(&cputimer->lock, flags);
4da94d49
PZ
254}
255
1da177e4
LT
256/*
257 * Sample a process (thread group) clock for the given group_leader task.
258 * Must be called with tasklist_lock held for reading.
1da177e4 259 */
bb34d92f
FM
260static int cpu_clock_sample_group(const clockid_t which_clock,
261 struct task_struct *p,
262 union cpu_time_count *cpu)
1da177e4 263{
f06febc9
FM
264 struct task_cputime cputime;
265
eccdaeaf 266 switch (CPUCLOCK_WHICH(which_clock)) {
1da177e4
LT
267 default:
268 return -EINVAL;
269 case CPUCLOCK_PROF:
c5f8d995 270 thread_group_cputime(p, &cputime);
64861634 271 cpu->cpu = cputime.utime + cputime.stime;
1da177e4
LT
272 break;
273 case CPUCLOCK_VIRT:
c5f8d995 274 thread_group_cputime(p, &cputime);
f06febc9 275 cpu->cpu = cputime.utime;
1da177e4
LT
276 break;
277 case CPUCLOCK_SCHED:
d670ec13
PZ
278 thread_group_cputime(p, &cputime);
279 cpu->sched = cputime.sum_exec_runtime;
1da177e4
LT
280 break;
281 }
282 return 0;
283}
284
1da177e4 285
bc2c8ea4 286static int posix_cpu_clock_get(const clockid_t which_clock, struct timespec *tp)
1da177e4
LT
287{
288 const pid_t pid = CPUCLOCK_PID(which_clock);
289 int error = -EINVAL;
290 union cpu_time_count rtn;
291
292 if (pid == 0) {
293 /*
294 * Special case constant value for our own clocks.
295 * We don't have to do any lookup to find ourselves.
296 */
297 if (CPUCLOCK_PERTHREAD(which_clock)) {
298 /*
299 * Sampling just ourselves we can do with no locking.
300 */
301 error = cpu_clock_sample(which_clock,
302 current, &rtn);
303 } else {
304 read_lock(&tasklist_lock);
305 error = cpu_clock_sample_group(which_clock,
306 current, &rtn);
307 read_unlock(&tasklist_lock);
308 }
309 } else {
310 /*
311 * Find the given PID, and validate that the caller
312 * should be able to see it.
313 */
314 struct task_struct *p;
1f2ea083 315 rcu_read_lock();
8dc86af0 316 p = find_task_by_vpid(pid);
1da177e4
LT
317 if (p) {
318 if (CPUCLOCK_PERTHREAD(which_clock)) {
bac0abd6 319 if (same_thread_group(p, current)) {
1da177e4
LT
320 error = cpu_clock_sample(which_clock,
321 p, &rtn);
322 }
1f2ea083
PM
323 } else {
324 read_lock(&tasklist_lock);
d30fda35 325 if (thread_group_leader(p) && p->sighand) {
1f2ea083
PM
326 error =
327 cpu_clock_sample_group(which_clock,
328 p, &rtn);
329 }
330 read_unlock(&tasklist_lock);
1da177e4
LT
331 }
332 }
1f2ea083 333 rcu_read_unlock();
1da177e4
LT
334 }
335
336 if (error)
337 return error;
338 sample_to_timespec(which_clock, rtn, tp);
339 return 0;
340}
341
342
343/*
344 * Validate the clockid_t for a new CPU-clock timer, and initialize the timer.
ba5ea951
SG
345 * This is called from sys_timer_create() and do_cpu_nanosleep() with the
346 * new timer already all-zeros initialized.
1da177e4 347 */
bc2c8ea4 348static int posix_cpu_timer_create(struct k_itimer *new_timer)
1da177e4
LT
349{
350 int ret = 0;
351 const pid_t pid = CPUCLOCK_PID(new_timer->it_clock);
352 struct task_struct *p;
353
354 if (CPUCLOCK_WHICH(new_timer->it_clock) >= CPUCLOCK_MAX)
355 return -EINVAL;
356
357 INIT_LIST_HEAD(&new_timer->it.cpu.entry);
1da177e4 358
c0deae8c 359 rcu_read_lock();
1da177e4
LT
360 if (CPUCLOCK_PERTHREAD(new_timer->it_clock)) {
361 if (pid == 0) {
362 p = current;
363 } else {
8dc86af0 364 p = find_task_by_vpid(pid);
bac0abd6 365 if (p && !same_thread_group(p, current))
1da177e4
LT
366 p = NULL;
367 }
368 } else {
369 if (pid == 0) {
370 p = current->group_leader;
371 } else {
8dc86af0 372 p = find_task_by_vpid(pid);
c0deae8c 373 if (p && !has_group_leader_pid(p))
1da177e4
LT
374 p = NULL;
375 }
376 }
377 new_timer->it.cpu.task = p;
378 if (p) {
379 get_task_struct(p);
380 } else {
381 ret = -EINVAL;
382 }
c0deae8c 383 rcu_read_unlock();
1da177e4
LT
384
385 return ret;
386}
387
388/*
389 * Clean up a CPU-clock timer that is about to be destroyed.
390 * This is called from timer deletion with the timer already locked.
391 * If we return TIMER_RETRY, it's necessary to release the timer's lock
392 * and try again. (This happens when the timer is in the middle of firing.)
393 */
bc2c8ea4 394static int posix_cpu_timer_del(struct k_itimer *timer)
1da177e4
LT
395{
396 struct task_struct *p = timer->it.cpu.task;
108150ea 397 int ret = 0;
1da177e4 398
108150ea 399 if (likely(p != NULL)) {
9465bee8 400 read_lock(&tasklist_lock);
d30fda35 401 if (unlikely(p->sighand == NULL)) {
9465bee8
LT
402 /*
403 * We raced with the reaping of the task.
404 * The deletion should have cleared us off the list.
405 */
406 BUG_ON(!list_empty(&timer->it.cpu.entry));
407 } else {
9465bee8 408 spin_lock(&p->sighand->siglock);
108150ea
ON
409 if (timer->it.cpu.firing)
410 ret = TIMER_RETRY;
411 else
412 list_del(&timer->it.cpu.entry);
9465bee8
LT
413 spin_unlock(&p->sighand->siglock);
414 }
415 read_unlock(&tasklist_lock);
108150ea
ON
416
417 if (!ret)
418 put_task_struct(p);
1da177e4 419 }
1da177e4 420
108150ea 421 return ret;
1da177e4
LT
422}
423
424/*
425 * Clean out CPU timers still ticking when a thread exited. The task
426 * pointer is cleared, and the expiry time is replaced with the residual
427 * time for later timer_gettime calls to return.
428 * This must be called with the siglock held.
429 */
430static void cleanup_timers(struct list_head *head,
431 cputime_t utime, cputime_t stime,
41b86e9c 432 unsigned long long sum_exec_runtime)
1da177e4
LT
433{
434 struct cpu_timer_list *timer, *next;
64861634 435 cputime_t ptime = utime + stime;
1da177e4
LT
436
437 list_for_each_entry_safe(timer, next, head, entry) {
1da177e4 438 list_del_init(&timer->entry);
64861634
MS
439 if (timer->expires.cpu < ptime) {
440 timer->expires.cpu = 0;
1da177e4 441 } else {
64861634 442 timer->expires.cpu -= ptime;
1da177e4
LT
443 }
444 }
445
446 ++head;
447 list_for_each_entry_safe(timer, next, head, entry) {
1da177e4 448 list_del_init(&timer->entry);
64861634
MS
449 if (timer->expires.cpu < utime) {
450 timer->expires.cpu = 0;
1da177e4 451 } else {
64861634 452 timer->expires.cpu -= utime;
1da177e4
LT
453 }
454 }
455
456 ++head;
457 list_for_each_entry_safe(timer, next, head, entry) {
1da177e4 458 list_del_init(&timer->entry);
41b86e9c 459 if (timer->expires.sched < sum_exec_runtime) {
1da177e4
LT
460 timer->expires.sched = 0;
461 } else {
41b86e9c 462 timer->expires.sched -= sum_exec_runtime;
1da177e4
LT
463 }
464 }
465}
466
467/*
468 * These are both called with the siglock held, when the current thread
469 * is being reaped. When the final (leader) thread in the group is reaped,
470 * posix_cpu_timers_exit_group will be called after posix_cpu_timers_exit.
471 */
472void posix_cpu_timers_exit(struct task_struct *tsk)
473{
61337054
NK
474 add_device_randomness((const void*) &tsk->se.sum_exec_runtime,
475 sizeof(unsigned long long));
1da177e4 476 cleanup_timers(tsk->cpu_timers,
41b86e9c 477 tsk->utime, tsk->stime, tsk->se.sum_exec_runtime);
1da177e4
LT
478
479}
480void posix_cpu_timers_exit_group(struct task_struct *tsk)
481{
17d42c1c 482 struct signal_struct *const sig = tsk->signal;
ca531a0a 483
f06febc9 484 cleanup_timers(tsk->signal->cpu_timers,
64861634 485 tsk->utime + sig->utime, tsk->stime + sig->stime,
17d42c1c 486 tsk->se.sum_exec_runtime + sig->sum_sched_runtime);
1da177e4
LT
487}
488
489static void clear_dead_task(struct k_itimer *timer, union cpu_time_count now)
490{
491 /*
492 * That's all for this thread or process.
493 * We leave our residual in expires to be reported.
494 */
495 put_task_struct(timer->it.cpu.task);
496 timer->it.cpu.task = NULL;
497 timer->it.cpu.expires = cpu_time_sub(timer->it_clock,
498 timer->it.cpu.expires,
499 now);
500}
501
d1e3b6d1
SG
502static inline int expires_gt(cputime_t expires, cputime_t new_exp)
503{
64861634 504 return expires == 0 || expires > new_exp;
d1e3b6d1
SG
505}
506
1da177e4
LT
507/*
508 * Insert the timer on the appropriate list before any timers that
509 * expire later. This must be called with the tasklist_lock held
c2873937 510 * for reading, interrupts disabled and p->sighand->siglock taken.
1da177e4 511 */
5eb9aa64 512static void arm_timer(struct k_itimer *timer)
1da177e4
LT
513{
514 struct task_struct *p = timer->it.cpu.task;
515 struct list_head *head, *listpos;
5eb9aa64 516 struct task_cputime *cputime_expires;
1da177e4
LT
517 struct cpu_timer_list *const nt = &timer->it.cpu;
518 struct cpu_timer_list *next;
1da177e4 519
5eb9aa64
SG
520 if (CPUCLOCK_PERTHREAD(timer->it_clock)) {
521 head = p->cpu_timers;
522 cputime_expires = &p->cputime_expires;
523 } else {
524 head = p->signal->cpu_timers;
525 cputime_expires = &p->signal->cputime_expires;
526 }
1da177e4
LT
527 head += CPUCLOCK_WHICH(timer->it_clock);
528
1da177e4 529 listpos = head;
5eb9aa64
SG
530 list_for_each_entry(next, head, entry) {
531 if (cpu_time_before(timer->it_clock, nt->expires, next->expires))
532 break;
533 listpos = &next->entry;
1da177e4
LT
534 }
535 list_add(&nt->entry, listpos);
536
537 if (listpos == head) {
5eb9aa64
SG
538 union cpu_time_count *exp = &nt->expires;
539
1da177e4 540 /*
5eb9aa64
SG
541 * We are the new earliest-expiring POSIX 1.b timer, hence
542 * need to update expiration cache. Take into account that
543 * for process timers we share expiration cache with itimers
544 * and RLIMIT_CPU and for thread timers with RLIMIT_RTTIME.
1da177e4
LT
545 */
546
5eb9aa64
SG
547 switch (CPUCLOCK_WHICH(timer->it_clock)) {
548 case CPUCLOCK_PROF:
549 if (expires_gt(cputime_expires->prof_exp, exp->cpu))
550 cputime_expires->prof_exp = exp->cpu;
551 break;
552 case CPUCLOCK_VIRT:
553 if (expires_gt(cputime_expires->virt_exp, exp->cpu))
554 cputime_expires->virt_exp = exp->cpu;
555 break;
556 case CPUCLOCK_SCHED:
557 if (cputime_expires->sched_exp == 0 ||
558 cputime_expires->sched_exp > exp->sched)
559 cputime_expires->sched_exp = exp->sched;
560 break;
1da177e4
LT
561 }
562 }
1da177e4
LT
563}
564
565/*
566 * The timer is locked, fire it and arrange for its reload.
567 */
568static void cpu_timer_fire(struct k_itimer *timer)
569{
1f169f84
SG
570 if ((timer->it_sigev_notify & ~SIGEV_THREAD_ID) == SIGEV_NONE) {
571 /*
572 * User don't want any signal.
573 */
574 timer->it.cpu.expires.sched = 0;
575 } else if (unlikely(timer->sigq == NULL)) {
1da177e4
LT
576 /*
577 * This a special case for clock_nanosleep,
578 * not a normal timer from sys_timer_create.
579 */
580 wake_up_process(timer->it_process);
581 timer->it.cpu.expires.sched = 0;
582 } else if (timer->it.cpu.incr.sched == 0) {
583 /*
584 * One-shot timer. Clear it as soon as it's fired.
585 */
586 posix_timer_event(timer, 0);
587 timer->it.cpu.expires.sched = 0;
588 } else if (posix_timer_event(timer, ++timer->it_requeue_pending)) {
589 /*
590 * The signal did not get queued because the signal
591 * was ignored, so we won't get any callback to
592 * reload the timer. But we need to keep it
593 * ticking in case the signal is deliverable next time.
594 */
595 posix_cpu_timer_schedule(timer);
596 }
597}
598
3997ad31
PZ
599/*
600 * Sample a process (thread group) timer for the given group_leader task.
601 * Must be called with tasklist_lock held for reading.
602 */
603static int cpu_timer_sample_group(const clockid_t which_clock,
604 struct task_struct *p,
605 union cpu_time_count *cpu)
606{
607 struct task_cputime cputime;
608
609 thread_group_cputimer(p, &cputime);
610 switch (CPUCLOCK_WHICH(which_clock)) {
611 default:
612 return -EINVAL;
613 case CPUCLOCK_PROF:
64861634 614 cpu->cpu = cputime.utime + cputime.stime;
3997ad31
PZ
615 break;
616 case CPUCLOCK_VIRT:
617 cpu->cpu = cputime.utime;
618 break;
619 case CPUCLOCK_SCHED:
620 cpu->sched = cputime.sum_exec_runtime + task_delta_exec(p);
621 break;
622 }
623 return 0;
624}
625
1da177e4
LT
626/*
627 * Guts of sys_timer_settime for CPU timers.
628 * This is called with the timer locked and interrupts disabled.
629 * If we return TIMER_RETRY, it's necessary to release the timer's lock
630 * and try again. (This happens when the timer is in the middle of firing.)
631 */
bc2c8ea4
TG
632static int posix_cpu_timer_set(struct k_itimer *timer, int flags,
633 struct itimerspec *new, struct itimerspec *old)
1da177e4
LT
634{
635 struct task_struct *p = timer->it.cpu.task;
ae1a78ee 636 union cpu_time_count old_expires, new_expires, old_incr, val;
1da177e4
LT
637 int ret;
638
639 if (unlikely(p == NULL)) {
640 /*
641 * Timer refers to a dead task's clock.
642 */
643 return -ESRCH;
644 }
645
646 new_expires = timespec_to_sample(timer->it_clock, &new->it_value);
647
648 read_lock(&tasklist_lock);
649 /*
650 * We need the tasklist_lock to protect against reaping that
d30fda35 651 * clears p->sighand. If p has just been reaped, we can no
1da177e4
LT
652 * longer get any information about it at all.
653 */
d30fda35 654 if (unlikely(p->sighand == NULL)) {
1da177e4
LT
655 read_unlock(&tasklist_lock);
656 put_task_struct(p);
657 timer->it.cpu.task = NULL;
658 return -ESRCH;
659 }
660
661 /*
662 * Disarm any old timer after extracting its expiry time.
663 */
664 BUG_ON(!irqs_disabled());
a69ac4a7
ON
665
666 ret = 0;
ae1a78ee 667 old_incr = timer->it.cpu.incr;
1da177e4
LT
668 spin_lock(&p->sighand->siglock);
669 old_expires = timer->it.cpu.expires;
a69ac4a7
ON
670 if (unlikely(timer->it.cpu.firing)) {
671 timer->it.cpu.firing = -1;
672 ret = TIMER_RETRY;
673 } else
674 list_del_init(&timer->it.cpu.entry);
1da177e4
LT
675
676 /*
677 * We need to sample the current value to convert the new
678 * value from to relative and absolute, and to convert the
679 * old value from absolute to relative. To set a process
680 * timer, we need a sample to balance the thread expiry
681 * times (in arm_timer). With an absolute time, we must
682 * check if it's already passed. In short, we need a sample.
683 */
684 if (CPUCLOCK_PERTHREAD(timer->it_clock)) {
685 cpu_clock_sample(timer->it_clock, p, &val);
686 } else {
3997ad31 687 cpu_timer_sample_group(timer->it_clock, p, &val);
1da177e4
LT
688 }
689
690 if (old) {
691 if (old_expires.sched == 0) {
692 old->it_value.tv_sec = 0;
693 old->it_value.tv_nsec = 0;
694 } else {
695 /*
696 * Update the timer in case it has
697 * overrun already. If it has,
698 * we'll report it as having overrun
699 * and with the next reloaded timer
700 * already ticking, though we are
701 * swallowing that pending
702 * notification here to install the
703 * new setting.
704 */
705 bump_cpu_timer(timer, val);
706 if (cpu_time_before(timer->it_clock, val,
707 timer->it.cpu.expires)) {
708 old_expires = cpu_time_sub(
709 timer->it_clock,
710 timer->it.cpu.expires, val);
711 sample_to_timespec(timer->it_clock,
712 old_expires,
713 &old->it_value);
714 } else {
715 old->it_value.tv_nsec = 1;
716 old->it_value.tv_sec = 0;
717 }
718 }
719 }
720
a69ac4a7 721 if (unlikely(ret)) {
1da177e4
LT
722 /*
723 * We are colliding with the timer actually firing.
724 * Punt after filling in the timer's old value, and
725 * disable this firing since we are already reporting
726 * it as an overrun (thanks to bump_cpu_timer above).
727 */
c2873937 728 spin_unlock(&p->sighand->siglock);
1da177e4 729 read_unlock(&tasklist_lock);
1da177e4
LT
730 goto out;
731 }
732
733 if (new_expires.sched != 0 && !(flags & TIMER_ABSTIME)) {
734 cpu_time_add(timer->it_clock, &new_expires, val);
735 }
736
737 /*
738 * Install the new expiry time (or zero).
739 * For a timer with no notification action, we don't actually
740 * arm the timer (we'll just fake it for timer_gettime).
741 */
742 timer->it.cpu.expires = new_expires;
743 if (new_expires.sched != 0 &&
1da177e4 744 cpu_time_before(timer->it_clock, val, new_expires)) {
5eb9aa64 745 arm_timer(timer);
1da177e4
LT
746 }
747
c2873937 748 spin_unlock(&p->sighand->siglock);
1da177e4
LT
749 read_unlock(&tasklist_lock);
750
751 /*
752 * Install the new reload setting, and
753 * set up the signal and overrun bookkeeping.
754 */
755 timer->it.cpu.incr = timespec_to_sample(timer->it_clock,
756 &new->it_interval);
757
758 /*
759 * This acts as a modification timestamp for the timer,
760 * so any automatic reload attempt will punt on seeing
761 * that we have reset the timer manually.
762 */
763 timer->it_requeue_pending = (timer->it_requeue_pending + 2) &
764 ~REQUEUE_PENDING;
765 timer->it_overrun_last = 0;
766 timer->it_overrun = -1;
767
768 if (new_expires.sched != 0 &&
1da177e4
LT
769 !cpu_time_before(timer->it_clock, val, new_expires)) {
770 /*
771 * The designated time already passed, so we notify
772 * immediately, even if the thread never runs to
773 * accumulate more time on this clock.
774 */
775 cpu_timer_fire(timer);
776 }
777
778 ret = 0;
779 out:
780 if (old) {
781 sample_to_timespec(timer->it_clock,
ae1a78ee 782 old_incr, &old->it_interval);
1da177e4
LT
783 }
784 return ret;
785}
786
bc2c8ea4 787static void posix_cpu_timer_get(struct k_itimer *timer, struct itimerspec *itp)
1da177e4
LT
788{
789 union cpu_time_count now;
790 struct task_struct *p = timer->it.cpu.task;
791 int clear_dead;
792
793 /*
794 * Easy part: convert the reload time.
795 */
796 sample_to_timespec(timer->it_clock,
797 timer->it.cpu.incr, &itp->it_interval);
798
799 if (timer->it.cpu.expires.sched == 0) { /* Timer not armed at all. */
800 itp->it_value.tv_sec = itp->it_value.tv_nsec = 0;
801 return;
802 }
803
804 if (unlikely(p == NULL)) {
805 /*
806 * This task already died and the timer will never fire.
807 * In this case, expires is actually the dead value.
808 */
809 dead:
810 sample_to_timespec(timer->it_clock, timer->it.cpu.expires,
811 &itp->it_value);
812 return;
813 }
814
815 /*
816 * Sample the clock to take the difference with the expiry time.
817 */
818 if (CPUCLOCK_PERTHREAD(timer->it_clock)) {
819 cpu_clock_sample(timer->it_clock, p, &now);
820 clear_dead = p->exit_state;
821 } else {
822 read_lock(&tasklist_lock);
d30fda35 823 if (unlikely(p->sighand == NULL)) {
1da177e4
LT
824 /*
825 * The process has been reaped.
826 * We can't even collect a sample any more.
827 * Call the timer disarmed, nothing else to do.
828 */
829 put_task_struct(p);
830 timer->it.cpu.task = NULL;
831 timer->it.cpu.expires.sched = 0;
832 read_unlock(&tasklist_lock);
833 goto dead;
834 } else {
3997ad31 835 cpu_timer_sample_group(timer->it_clock, p, &now);
1da177e4
LT
836 clear_dead = (unlikely(p->exit_state) &&
837 thread_group_empty(p));
838 }
839 read_unlock(&tasklist_lock);
840 }
841
1da177e4
LT
842 if (unlikely(clear_dead)) {
843 /*
844 * We've noticed that the thread is dead, but
845 * not yet reaped. Take this opportunity to
846 * drop our task ref.
847 */
848 clear_dead_task(timer, now);
849 goto dead;
850 }
851
852 if (cpu_time_before(timer->it_clock, now, timer->it.cpu.expires)) {
853 sample_to_timespec(timer->it_clock,
854 cpu_time_sub(timer->it_clock,
855 timer->it.cpu.expires, now),
856 &itp->it_value);
857 } else {
858 /*
859 * The timer should have expired already, but the firing
860 * hasn't taken place yet. Say it's just about to expire.
861 */
862 itp->it_value.tv_nsec = 1;
863 itp->it_value.tv_sec = 0;
864 }
865}
866
867/*
868 * Check for any per-thread CPU timers that have fired and move them off
869 * the tsk->cpu_timers[N] list onto the firing list. Here we update the
870 * tsk->it_*_expires values to reflect the remaining thread CPU timers.
871 */
872static void check_thread_timers(struct task_struct *tsk,
873 struct list_head *firing)
874{
e80eda94 875 int maxfire;
1da177e4 876 struct list_head *timers = tsk->cpu_timers;
78f2c7db 877 struct signal_struct *const sig = tsk->signal;
d4bb5274 878 unsigned long soft;
1da177e4 879
e80eda94 880 maxfire = 20;
64861634 881 tsk->cputime_expires.prof_exp = 0;
1da177e4 882 while (!list_empty(timers)) {
b5e61818 883 struct cpu_timer_list *t = list_first_entry(timers,
1da177e4
LT
884 struct cpu_timer_list,
885 entry);
64861634 886 if (!--maxfire || prof_ticks(tsk) < t->expires.cpu) {
f06febc9 887 tsk->cputime_expires.prof_exp = t->expires.cpu;
1da177e4
LT
888 break;
889 }
890 t->firing = 1;
891 list_move_tail(&t->entry, firing);
892 }
893
894 ++timers;
e80eda94 895 maxfire = 20;
64861634 896 tsk->cputime_expires.virt_exp = 0;
1da177e4 897 while (!list_empty(timers)) {
b5e61818 898 struct cpu_timer_list *t = list_first_entry(timers,
1da177e4
LT
899 struct cpu_timer_list,
900 entry);
64861634 901 if (!--maxfire || virt_ticks(tsk) < t->expires.cpu) {
f06febc9 902 tsk->cputime_expires.virt_exp = t->expires.cpu;
1da177e4
LT
903 break;
904 }
905 t->firing = 1;
906 list_move_tail(&t->entry, firing);
907 }
908
909 ++timers;
e80eda94 910 maxfire = 20;
f06febc9 911 tsk->cputime_expires.sched_exp = 0;
1da177e4 912 while (!list_empty(timers)) {
b5e61818 913 struct cpu_timer_list *t = list_first_entry(timers,
1da177e4
LT
914 struct cpu_timer_list,
915 entry);
41b86e9c 916 if (!--maxfire || tsk->se.sum_exec_runtime < t->expires.sched) {
f06febc9 917 tsk->cputime_expires.sched_exp = t->expires.sched;
1da177e4
LT
918 break;
919 }
920 t->firing = 1;
921 list_move_tail(&t->entry, firing);
922 }
78f2c7db
PZ
923
924 /*
925 * Check for the special case thread timers.
926 */
78d7d407 927 soft = ACCESS_ONCE(sig->rlim[RLIMIT_RTTIME].rlim_cur);
d4bb5274 928 if (soft != RLIM_INFINITY) {
78d7d407
JS
929 unsigned long hard =
930 ACCESS_ONCE(sig->rlim[RLIMIT_RTTIME].rlim_max);
78f2c7db 931
5a52dd50
PZ
932 if (hard != RLIM_INFINITY &&
933 tsk->rt.timeout > DIV_ROUND_UP(hard, USEC_PER_SEC/HZ)) {
78f2c7db
PZ
934 /*
935 * At the hard limit, we just die.
936 * No need to calculate anything else now.
937 */
938 __group_send_sig_info(SIGKILL, SEND_SIG_PRIV, tsk);
939 return;
940 }
d4bb5274 941 if (tsk->rt.timeout > DIV_ROUND_UP(soft, USEC_PER_SEC/HZ)) {
78f2c7db
PZ
942 /*
943 * At the soft limit, send a SIGXCPU every second.
944 */
d4bb5274
JS
945 if (soft < hard) {
946 soft += USEC_PER_SEC;
947 sig->rlim[RLIMIT_RTTIME].rlim_cur = soft;
78f2c7db 948 }
81d50bb2
HS
949 printk(KERN_INFO
950 "RT Watchdog Timeout: %s[%d]\n",
951 tsk->comm, task_pid_nr(tsk));
78f2c7db
PZ
952 __group_send_sig_info(SIGXCPU, SEND_SIG_PRIV, tsk);
953 }
954 }
1da177e4
LT
955}
956
15365c10 957static void stop_process_timers(struct signal_struct *sig)
3fccfd67 958{
15365c10 959 struct thread_group_cputimer *cputimer = &sig->cputimer;
3fccfd67
PZ
960 unsigned long flags;
961
ee30a7b2 962 raw_spin_lock_irqsave(&cputimer->lock, flags);
3fccfd67 963 cputimer->running = 0;
ee30a7b2 964 raw_spin_unlock_irqrestore(&cputimer->lock, flags);
3fccfd67
PZ
965}
966
8356b5f9
SG
967static u32 onecputick;
968
42c4ab41
SG
969static void check_cpu_itimer(struct task_struct *tsk, struct cpu_itimer *it,
970 cputime_t *expires, cputime_t cur_time, int signo)
971{
64861634 972 if (!it->expires)
42c4ab41
SG
973 return;
974
64861634
MS
975 if (cur_time >= it->expires) {
976 if (it->incr) {
977 it->expires += it->incr;
8356b5f9
SG
978 it->error += it->incr_error;
979 if (it->error >= onecputick) {
64861634 980 it->expires -= cputime_one_jiffy;
8356b5f9
SG
981 it->error -= onecputick;
982 }
3f0a525e 983 } else {
64861634 984 it->expires = 0;
3f0a525e 985 }
42c4ab41 986
3f0a525e
XG
987 trace_itimer_expire(signo == SIGPROF ?
988 ITIMER_PROF : ITIMER_VIRTUAL,
989 tsk->signal->leader_pid, cur_time);
42c4ab41
SG
990 __group_send_sig_info(signo, SEND_SIG_PRIV, tsk);
991 }
992
64861634 993 if (it->expires && (!*expires || it->expires < *expires)) {
42c4ab41
SG
994 *expires = it->expires;
995 }
996}
997
29f87b79
SG
998/**
999 * task_cputime_zero - Check a task_cputime struct for all zero fields.
1000 *
1001 * @cputime: The struct to compare.
1002 *
1003 * Checks @cputime to see if all fields are zero. Returns true if all fields
1004 * are zero, false if any field is nonzero.
1005 */
1006static inline int task_cputime_zero(const struct task_cputime *cputime)
1007{
64861634 1008 if (!cputime->utime && !cputime->stime && !cputime->sum_exec_runtime)
29f87b79
SG
1009 return 1;
1010 return 0;
1011}
1012
1da177e4
LT
1013/*
1014 * Check for any per-thread CPU timers that have fired and move them
1015 * off the tsk->*_timers list onto the firing list. Per-thread timers
1016 * have already been taken off.
1017 */
1018static void check_process_timers(struct task_struct *tsk,
1019 struct list_head *firing)
1020{
e80eda94 1021 int maxfire;
1da177e4 1022 struct signal_struct *const sig = tsk->signal;
f06febc9 1023 cputime_t utime, ptime, virt_expires, prof_expires;
41b86e9c 1024 unsigned long long sum_sched_runtime, sched_expires;
1da177e4 1025 struct list_head *timers = sig->cpu_timers;
f06febc9 1026 struct task_cputime cputime;
d4bb5274 1027 unsigned long soft;
1da177e4 1028
1da177e4
LT
1029 /*
1030 * Collect the current process totals.
1031 */
4cd4c1b4 1032 thread_group_cputimer(tsk, &cputime);
f06febc9 1033 utime = cputime.utime;
64861634 1034 ptime = utime + cputime.stime;
f06febc9 1035 sum_sched_runtime = cputime.sum_exec_runtime;
e80eda94 1036 maxfire = 20;
64861634 1037 prof_expires = 0;
1da177e4 1038 while (!list_empty(timers)) {
ee7dd205 1039 struct cpu_timer_list *tl = list_first_entry(timers,
1da177e4
LT
1040 struct cpu_timer_list,
1041 entry);
64861634 1042 if (!--maxfire || ptime < tl->expires.cpu) {
ee7dd205 1043 prof_expires = tl->expires.cpu;
1da177e4
LT
1044 break;
1045 }
ee7dd205
WC
1046 tl->firing = 1;
1047 list_move_tail(&tl->entry, firing);
1da177e4
LT
1048 }
1049
1050 ++timers;
e80eda94 1051 maxfire = 20;
64861634 1052 virt_expires = 0;
1da177e4 1053 while (!list_empty(timers)) {
ee7dd205 1054 struct cpu_timer_list *tl = list_first_entry(timers,
1da177e4
LT
1055 struct cpu_timer_list,
1056 entry);
64861634 1057 if (!--maxfire || utime < tl->expires.cpu) {
ee7dd205 1058 virt_expires = tl->expires.cpu;
1da177e4
LT
1059 break;
1060 }
ee7dd205
WC
1061 tl->firing = 1;
1062 list_move_tail(&tl->entry, firing);
1da177e4
LT
1063 }
1064
1065 ++timers;
e80eda94 1066 maxfire = 20;
1da177e4
LT
1067 sched_expires = 0;
1068 while (!list_empty(timers)) {
ee7dd205 1069 struct cpu_timer_list *tl = list_first_entry(timers,
1da177e4
LT
1070 struct cpu_timer_list,
1071 entry);
ee7dd205
WC
1072 if (!--maxfire || sum_sched_runtime < tl->expires.sched) {
1073 sched_expires = tl->expires.sched;
1da177e4
LT
1074 break;
1075 }
ee7dd205
WC
1076 tl->firing = 1;
1077 list_move_tail(&tl->entry, firing);
1da177e4
LT
1078 }
1079
1080 /*
1081 * Check for the special case process timers.
1082 */
42c4ab41
SG
1083 check_cpu_itimer(tsk, &sig->it[CPUCLOCK_PROF], &prof_expires, ptime,
1084 SIGPROF);
1085 check_cpu_itimer(tsk, &sig->it[CPUCLOCK_VIRT], &virt_expires, utime,
1086 SIGVTALRM);
78d7d407 1087 soft = ACCESS_ONCE(sig->rlim[RLIMIT_CPU].rlim_cur);
d4bb5274 1088 if (soft != RLIM_INFINITY) {
1da177e4 1089 unsigned long psecs = cputime_to_secs(ptime);
78d7d407
JS
1090 unsigned long hard =
1091 ACCESS_ONCE(sig->rlim[RLIMIT_CPU].rlim_max);
1da177e4 1092 cputime_t x;
d4bb5274 1093 if (psecs >= hard) {
1da177e4
LT
1094 /*
1095 * At the hard limit, we just die.
1096 * No need to calculate anything else now.
1097 */
1098 __group_send_sig_info(SIGKILL, SEND_SIG_PRIV, tsk);
1099 return;
1100 }
d4bb5274 1101 if (psecs >= soft) {
1da177e4
LT
1102 /*
1103 * At the soft limit, send a SIGXCPU every second.
1104 */
1105 __group_send_sig_info(SIGXCPU, SEND_SIG_PRIV, tsk);
d4bb5274
JS
1106 if (soft < hard) {
1107 soft++;
1108 sig->rlim[RLIMIT_CPU].rlim_cur = soft;
1da177e4
LT
1109 }
1110 }
d4bb5274 1111 x = secs_to_cputime(soft);
64861634 1112 if (!prof_expires || x < prof_expires) {
1da177e4
LT
1113 prof_expires = x;
1114 }
1115 }
1116
29f87b79
SG
1117 sig->cputime_expires.prof_exp = prof_expires;
1118 sig->cputime_expires.virt_exp = virt_expires;
1119 sig->cputime_expires.sched_exp = sched_expires;
1120 if (task_cputime_zero(&sig->cputime_expires))
1121 stop_process_timers(sig);
1da177e4
LT
1122}
1123
1124/*
1125 * This is called from the signal code (via do_schedule_next_timer)
1126 * when the last timer signal was delivered and we have to reload the timer.
1127 */
1128void posix_cpu_timer_schedule(struct k_itimer *timer)
1129{
1130 struct task_struct *p = timer->it.cpu.task;
1131 union cpu_time_count now;
1132
1133 if (unlikely(p == NULL))
1134 /*
1135 * The task was cleaned up already, no future firings.
1136 */
708f430d 1137 goto out;
1da177e4
LT
1138
1139 /*
1140 * Fetch the current sample and update the timer's expiry time.
1141 */
1142 if (CPUCLOCK_PERTHREAD(timer->it_clock)) {
1143 cpu_clock_sample(timer->it_clock, p, &now);
1144 bump_cpu_timer(timer, now);
1145 if (unlikely(p->exit_state)) {
1146 clear_dead_task(timer, now);
708f430d 1147 goto out;
1da177e4
LT
1148 }
1149 read_lock(&tasklist_lock); /* arm_timer needs it. */
c2873937 1150 spin_lock(&p->sighand->siglock);
1da177e4
LT
1151 } else {
1152 read_lock(&tasklist_lock);
d30fda35 1153 if (unlikely(p->sighand == NULL)) {
1da177e4
LT
1154 /*
1155 * The process has been reaped.
1156 * We can't even collect a sample any more.
1157 */
1158 put_task_struct(p);
1159 timer->it.cpu.task = p = NULL;
1160 timer->it.cpu.expires.sched = 0;
708f430d 1161 goto out_unlock;
1da177e4
LT
1162 } else if (unlikely(p->exit_state) && thread_group_empty(p)) {
1163 /*
1164 * We've noticed that the thread is dead, but
1165 * not yet reaped. Take this opportunity to
1166 * drop our task ref.
1167 */
1168 clear_dead_task(timer, now);
708f430d 1169 goto out_unlock;
1da177e4 1170 }
c2873937 1171 spin_lock(&p->sighand->siglock);
3997ad31 1172 cpu_timer_sample_group(timer->it_clock, p, &now);
1da177e4
LT
1173 bump_cpu_timer(timer, now);
1174 /* Leave the tasklist_lock locked for the call below. */
1175 }
1176
1177 /*
1178 * Now re-arm for the new expiry time.
1179 */
c2873937 1180 BUG_ON(!irqs_disabled());
5eb9aa64 1181 arm_timer(timer);
c2873937 1182 spin_unlock(&p->sighand->siglock);
1da177e4 1183
708f430d 1184out_unlock:
1da177e4 1185 read_unlock(&tasklist_lock);
708f430d
RM
1186
1187out:
1188 timer->it_overrun_last = timer->it_overrun;
1189 timer->it_overrun = -1;
1190 ++timer->it_requeue_pending;
1da177e4
LT
1191}
1192
f06febc9
FM
1193/**
1194 * task_cputime_expired - Compare two task_cputime entities.
1195 *
1196 * @sample: The task_cputime structure to be checked for expiration.
1197 * @expires: Expiration times, against which @sample will be checked.
1198 *
1199 * Checks @sample against @expires to see if any field of @sample has expired.
1200 * Returns true if any field of the former is greater than the corresponding
1201 * field of the latter if the latter field is set. Otherwise returns false.
1202 */
1203static inline int task_cputime_expired(const struct task_cputime *sample,
1204 const struct task_cputime *expires)
1205{
64861634 1206 if (expires->utime && sample->utime >= expires->utime)
f06febc9 1207 return 1;
64861634 1208 if (expires->stime && sample->utime + sample->stime >= expires->stime)
f06febc9
FM
1209 return 1;
1210 if (expires->sum_exec_runtime != 0 &&
1211 sample->sum_exec_runtime >= expires->sum_exec_runtime)
1212 return 1;
1213 return 0;
1214}
1215
1216/**
1217 * fastpath_timer_check - POSIX CPU timers fast path.
1218 *
1219 * @tsk: The task (thread) being checked.
f06febc9 1220 *
bb34d92f
FM
1221 * Check the task and thread group timers. If both are zero (there are no
1222 * timers set) return false. Otherwise snapshot the task and thread group
1223 * timers and compare them with the corresponding expiration times. Return
1224 * true if a timer has expired, else return false.
f06febc9 1225 */
bb34d92f 1226static inline int fastpath_timer_check(struct task_struct *tsk)
f06febc9 1227{
ad133ba3 1228 struct signal_struct *sig;
bb34d92f 1229
bb34d92f
FM
1230 if (!task_cputime_zero(&tsk->cputime_expires)) {
1231 struct task_cputime task_sample = {
1232 .utime = tsk->utime,
1233 .stime = tsk->stime,
1234 .sum_exec_runtime = tsk->se.sum_exec_runtime
1235 };
1236
1237 if (task_cputime_expired(&task_sample, &tsk->cputime_expires))
1238 return 1;
1239 }
ad133ba3
ON
1240
1241 sig = tsk->signal;
29f87b79 1242 if (sig->cputimer.running) {
bb34d92f
FM
1243 struct task_cputime group_sample;
1244
ee30a7b2 1245 raw_spin_lock(&sig->cputimer.lock);
8d1f431c 1246 group_sample = sig->cputimer.cputime;
ee30a7b2 1247 raw_spin_unlock(&sig->cputimer.lock);
8d1f431c 1248
bb34d92f
FM
1249 if (task_cputime_expired(&group_sample, &sig->cputime_expires))
1250 return 1;
1251 }
37bebc70 1252
f55db609 1253 return 0;
f06febc9
FM
1254}
1255
1da177e4
LT
1256/*
1257 * This is called from the timer interrupt handler. The irq handler has
1258 * already updated our counts. We need to check if any timers fire now.
1259 * Interrupts are disabled.
1260 */
1261void run_posix_cpu_timers(struct task_struct *tsk)
1262{
1263 LIST_HEAD(firing);
1264 struct k_itimer *timer, *next;
0bdd2ed4 1265 unsigned long flags;
1da177e4
LT
1266
1267 BUG_ON(!irqs_disabled());
1268
1da177e4 1269 /*
f06febc9 1270 * The fast path checks that there are no expired thread or thread
bb34d92f 1271 * group timers. If that's so, just return.
1da177e4 1272 */
bb34d92f 1273 if (!fastpath_timer_check(tsk))
f06febc9 1274 return;
5ce73a4a 1275
0bdd2ed4
ON
1276 if (!lock_task_sighand(tsk, &flags))
1277 return;
bb34d92f
FM
1278 /*
1279 * Here we take off tsk->signal->cpu_timers[N] and
1280 * tsk->cpu_timers[N] all the timers that are firing, and
1281 * put them on the firing list.
1282 */
1283 check_thread_timers(tsk, &firing);
29f87b79
SG
1284 /*
1285 * If there are any active process wide timers (POSIX 1.b, itimers,
1286 * RLIMIT_CPU) cputimer must be running.
1287 */
1288 if (tsk->signal->cputimer.running)
1289 check_process_timers(tsk, &firing);
1da177e4 1290
bb34d92f
FM
1291 /*
1292 * We must release these locks before taking any timer's lock.
1293 * There is a potential race with timer deletion here, as the
1294 * siglock now protects our private firing list. We have set
1295 * the firing flag in each timer, so that a deletion attempt
1296 * that gets the timer lock before we do will give it up and
1297 * spin until we've taken care of that timer below.
1298 */
0bdd2ed4 1299 unlock_task_sighand(tsk, &flags);
1da177e4
LT
1300
1301 /*
1302 * Now that all the timers on our list have the firing flag,
25985edc 1303 * no one will touch their list entries but us. We'll take
1da177e4
LT
1304 * each timer's lock before clearing its firing flag, so no
1305 * timer call will interfere.
1306 */
1307 list_for_each_entry_safe(timer, next, &firing, it.cpu.entry) {
6e85c5ba
HS
1308 int cpu_firing;
1309
1da177e4
LT
1310 spin_lock(&timer->it_lock);
1311 list_del_init(&timer->it.cpu.entry);
6e85c5ba 1312 cpu_firing = timer->it.cpu.firing;
1da177e4
LT
1313 timer->it.cpu.firing = 0;
1314 /*
1315 * The firing flag is -1 if we collided with a reset
1316 * of the timer, which already reported this
1317 * almost-firing as an overrun. So don't generate an event.
1318 */
6e85c5ba 1319 if (likely(cpu_firing >= 0))
1da177e4 1320 cpu_timer_fire(timer);
1da177e4
LT
1321 spin_unlock(&timer->it_lock);
1322 }
1323}
1324
1325/*
f55db609 1326 * Set one of the process-wide special case CPU timers or RLIMIT_CPU.
f06febc9 1327 * The tsk->sighand->siglock must be held by the caller.
1da177e4
LT
1328 */
1329void set_process_cpu_timer(struct task_struct *tsk, unsigned int clock_idx,
1330 cputime_t *newval, cputime_t *oldval)
1331{
1332 union cpu_time_count now;
1da177e4
LT
1333
1334 BUG_ON(clock_idx == CPUCLOCK_SCHED);
4cd4c1b4 1335 cpu_timer_sample_group(clock_idx, tsk, &now);
1da177e4
LT
1336
1337 if (oldval) {
f55db609
SG
1338 /*
1339 * We are setting itimer. The *oldval is absolute and we update
1340 * it to be relative, *newval argument is relative and we update
1341 * it to be absolute.
1342 */
64861634
MS
1343 if (*oldval) {
1344 if (*oldval <= now.cpu) {
1da177e4 1345 /* Just about to fire. */
a42548a1 1346 *oldval = cputime_one_jiffy;
1da177e4 1347 } else {
64861634 1348 *oldval -= now.cpu;
1da177e4
LT
1349 }
1350 }
1351
64861634 1352 if (!*newval)
1da177e4 1353 return;
64861634 1354 *newval += now.cpu;
1da177e4
LT
1355 }
1356
1357 /*
f55db609
SG
1358 * Update expiration cache if we are the earliest timer, or eventually
1359 * RLIMIT_CPU limit is earlier than prof_exp cpu timer expire.
1da177e4 1360 */
f55db609
SG
1361 switch (clock_idx) {
1362 case CPUCLOCK_PROF:
1363 if (expires_gt(tsk->signal->cputime_expires.prof_exp, *newval))
f06febc9 1364 tsk->signal->cputime_expires.prof_exp = *newval;
f55db609
SG
1365 break;
1366 case CPUCLOCK_VIRT:
1367 if (expires_gt(tsk->signal->cputime_expires.virt_exp, *newval))
f06febc9 1368 tsk->signal->cputime_expires.virt_exp = *newval;
f55db609 1369 break;
1da177e4
LT
1370 }
1371}
1372
e4b76555
TA
1373static int do_cpu_nanosleep(const clockid_t which_clock, int flags,
1374 struct timespec *rqtp, struct itimerspec *it)
1da177e4 1375{
1da177e4
LT
1376 struct k_itimer timer;
1377 int error;
1378
1da177e4
LT
1379 /*
1380 * Set up a temporary timer and then wait for it to go off.
1381 */
1382 memset(&timer, 0, sizeof timer);
1383 spin_lock_init(&timer.it_lock);
1384 timer.it_clock = which_clock;
1385 timer.it_overrun = -1;
1386 error = posix_cpu_timer_create(&timer);
1387 timer.it_process = current;
1388 if (!error) {
1da177e4 1389 static struct itimerspec zero_it;
e4b76555
TA
1390
1391 memset(it, 0, sizeof *it);
1392 it->it_value = *rqtp;
1da177e4
LT
1393
1394 spin_lock_irq(&timer.it_lock);
e4b76555 1395 error = posix_cpu_timer_set(&timer, flags, it, NULL);
1da177e4
LT
1396 if (error) {
1397 spin_unlock_irq(&timer.it_lock);
1398 return error;
1399 }
1400
1401 while (!signal_pending(current)) {
1402 if (timer.it.cpu.expires.sched == 0) {
1403 /*
1404 * Our timer fired and was reset.
1405 */
1406 spin_unlock_irq(&timer.it_lock);
1407 return 0;
1408 }
1409
1410 /*
1411 * Block until cpu_timer_fire (or a signal) wakes us.
1412 */
1413 __set_current_state(TASK_INTERRUPTIBLE);
1414 spin_unlock_irq(&timer.it_lock);
1415 schedule();
1416 spin_lock_irq(&timer.it_lock);
1417 }
1418
1419 /*
1420 * We were interrupted by a signal.
1421 */
1422 sample_to_timespec(which_clock, timer.it.cpu.expires, rqtp);
e4b76555 1423 posix_cpu_timer_set(&timer, 0, &zero_it, it);
1da177e4
LT
1424 spin_unlock_irq(&timer.it_lock);
1425
e4b76555 1426 if ((it->it_value.tv_sec | it->it_value.tv_nsec) == 0) {
1da177e4
LT
1427 /*
1428 * It actually did fire already.
1429 */
1430 return 0;
1431 }
1432
e4b76555
TA
1433 error = -ERESTART_RESTARTBLOCK;
1434 }
1435
1436 return error;
1437}
1438
bc2c8ea4
TG
1439static long posix_cpu_nsleep_restart(struct restart_block *restart_block);
1440
1441static int posix_cpu_nsleep(const clockid_t which_clock, int flags,
1442 struct timespec *rqtp, struct timespec __user *rmtp)
e4b76555
TA
1443{
1444 struct restart_block *restart_block =
3751f9f2 1445 &current_thread_info()->restart_block;
e4b76555
TA
1446 struct itimerspec it;
1447 int error;
1448
1449 /*
1450 * Diagnose required errors first.
1451 */
1452 if (CPUCLOCK_PERTHREAD(which_clock) &&
1453 (CPUCLOCK_PID(which_clock) == 0 ||
1454 CPUCLOCK_PID(which_clock) == current->pid))
1455 return -EINVAL;
1456
1457 error = do_cpu_nanosleep(which_clock, flags, rqtp, &it);
1458
1459 if (error == -ERESTART_RESTARTBLOCK) {
1460
3751f9f2 1461 if (flags & TIMER_ABSTIME)
e4b76555 1462 return -ERESTARTNOHAND;
1da177e4 1463 /*
3751f9f2
TG
1464 * Report back to the user the time still remaining.
1465 */
1466 if (rmtp && copy_to_user(rmtp, &it.it_value, sizeof *rmtp))
1da177e4
LT
1467 return -EFAULT;
1468
1711ef38 1469 restart_block->fn = posix_cpu_nsleep_restart;
ab8177bc 1470 restart_block->nanosleep.clockid = which_clock;
3751f9f2
TG
1471 restart_block->nanosleep.rmtp = rmtp;
1472 restart_block->nanosleep.expires = timespec_to_ns(rqtp);
1da177e4 1473 }
1da177e4
LT
1474 return error;
1475}
1476
bc2c8ea4 1477static long posix_cpu_nsleep_restart(struct restart_block *restart_block)
1da177e4 1478{
ab8177bc 1479 clockid_t which_clock = restart_block->nanosleep.clockid;
97735f25 1480 struct timespec t;
e4b76555
TA
1481 struct itimerspec it;
1482 int error;
97735f25 1483
3751f9f2 1484 t = ns_to_timespec(restart_block->nanosleep.expires);
97735f25 1485
e4b76555
TA
1486 error = do_cpu_nanosleep(which_clock, TIMER_ABSTIME, &t, &it);
1487
1488 if (error == -ERESTART_RESTARTBLOCK) {
3751f9f2 1489 struct timespec __user *rmtp = restart_block->nanosleep.rmtp;
e4b76555 1490 /*
3751f9f2
TG
1491 * Report back to the user the time still remaining.
1492 */
1493 if (rmtp && copy_to_user(rmtp, &it.it_value, sizeof *rmtp))
e4b76555
TA
1494 return -EFAULT;
1495
3751f9f2 1496 restart_block->nanosleep.expires = timespec_to_ns(&t);
e4b76555
TA
1497 }
1498 return error;
1499
1da177e4
LT
1500}
1501
1da177e4
LT
1502#define PROCESS_CLOCK MAKE_PROCESS_CPUCLOCK(0, CPUCLOCK_SCHED)
1503#define THREAD_CLOCK MAKE_THREAD_CPUCLOCK(0, CPUCLOCK_SCHED)
1504
a924b04d
TG
1505static int process_cpu_clock_getres(const clockid_t which_clock,
1506 struct timespec *tp)
1da177e4
LT
1507{
1508 return posix_cpu_clock_getres(PROCESS_CLOCK, tp);
1509}
a924b04d
TG
1510static int process_cpu_clock_get(const clockid_t which_clock,
1511 struct timespec *tp)
1da177e4
LT
1512{
1513 return posix_cpu_clock_get(PROCESS_CLOCK, tp);
1514}
1515static int process_cpu_timer_create(struct k_itimer *timer)
1516{
1517 timer->it_clock = PROCESS_CLOCK;
1518 return posix_cpu_timer_create(timer);
1519}
a924b04d 1520static int process_cpu_nsleep(const clockid_t which_clock, int flags,
97735f25
TG
1521 struct timespec *rqtp,
1522 struct timespec __user *rmtp)
1da177e4 1523{
97735f25 1524 return posix_cpu_nsleep(PROCESS_CLOCK, flags, rqtp, rmtp);
1da177e4 1525}
1711ef38
TA
1526static long process_cpu_nsleep_restart(struct restart_block *restart_block)
1527{
1528 return -EINVAL;
1529}
a924b04d
TG
1530static int thread_cpu_clock_getres(const clockid_t which_clock,
1531 struct timespec *tp)
1da177e4
LT
1532{
1533 return posix_cpu_clock_getres(THREAD_CLOCK, tp);
1534}
a924b04d
TG
1535static int thread_cpu_clock_get(const clockid_t which_clock,
1536 struct timespec *tp)
1da177e4
LT
1537{
1538 return posix_cpu_clock_get(THREAD_CLOCK, tp);
1539}
1540static int thread_cpu_timer_create(struct k_itimer *timer)
1541{
1542 timer->it_clock = THREAD_CLOCK;
1543 return posix_cpu_timer_create(timer);
1544}
1da177e4 1545
1976945e
TG
1546struct k_clock clock_posix_cpu = {
1547 .clock_getres = posix_cpu_clock_getres,
1548 .clock_set = posix_cpu_clock_set,
1549 .clock_get = posix_cpu_clock_get,
1550 .timer_create = posix_cpu_timer_create,
1551 .nsleep = posix_cpu_nsleep,
1552 .nsleep_restart = posix_cpu_nsleep_restart,
1553 .timer_set = posix_cpu_timer_set,
1554 .timer_del = posix_cpu_timer_del,
1555 .timer_get = posix_cpu_timer_get,
1556};
1557
1da177e4
LT
1558static __init int init_posix_cpu_timers(void)
1559{
1560 struct k_clock process = {
2fd1f040
TG
1561 .clock_getres = process_cpu_clock_getres,
1562 .clock_get = process_cpu_clock_get,
2fd1f040
TG
1563 .timer_create = process_cpu_timer_create,
1564 .nsleep = process_cpu_nsleep,
1565 .nsleep_restart = process_cpu_nsleep_restart,
1da177e4
LT
1566 };
1567 struct k_clock thread = {
2fd1f040
TG
1568 .clock_getres = thread_cpu_clock_getres,
1569 .clock_get = thread_cpu_clock_get,
2fd1f040 1570 .timer_create = thread_cpu_timer_create,
1da177e4 1571 };
8356b5f9 1572 struct timespec ts;
1da177e4 1573
52708737
TG
1574 posix_timers_register_clock(CLOCK_PROCESS_CPUTIME_ID, &process);
1575 posix_timers_register_clock(CLOCK_THREAD_CPUTIME_ID, &thread);
1da177e4 1576
a42548a1 1577 cputime_to_timespec(cputime_one_jiffy, &ts);
8356b5f9
SG
1578 onecputick = ts.tv_nsec;
1579 WARN_ON(ts.tv_sec != 0);
1580
1da177e4
LT
1581 return 0;
1582}
1583__initcall(init_posix_cpu_timers);