Lines Matching full:it

115 	if (timer->it.cpu.incr.sched == 0)  in bump_cpu_timer()
121 if (now.sched < timer->it.cpu.expires.sched) in bump_cpu_timer()
123 incr = timer->it.cpu.incr.sched; in bump_cpu_timer()
124 delta = now.sched + incr - timer->it.cpu.expires.sched; in bump_cpu_timer()
131 timer->it.cpu.expires.sched += incr; in bump_cpu_timer()
138 if (now.cpu < timer->it.cpu.expires.cpu) in bump_cpu_timer()
140 incr = timer->it.cpu.incr.cpu; in bump_cpu_timer()
141 delta = now.cpu + incr - timer->it.cpu.expires.cpu; in bump_cpu_timer()
148 timer->it.cpu.expires.cpu += incr; in bump_cpu_timer()
175 * exported, but it is much more than 1s/HZ. in posix_cpu_clock_getres()
267 * it. in thread_group_cputimer()
335 * should be able to see it. in posix_cpu_clock_get()
380 INIT_LIST_HEAD(&new_timer->it.cpu.entry); in posix_cpu_timer_create()
400 new_timer->it.cpu.task = p; in posix_cpu_timer_create()
414 * If we return TIMER_RETRY, it's necessary to release the timer's lock
419 struct task_struct *p = timer->it.cpu.task; in posix_cpu_timer_del()
429 BUG_ON(!list_empty(&timer->it.cpu.entry)); in posix_cpu_timer_del()
432 if (timer->it.cpu.firing) in posix_cpu_timer_del()
435 list_del(&timer->it.cpu.entry); in posix_cpu_timer_del()
516 put_task_struct(timer->it.cpu.task); in clear_dead_task()
517 timer->it.cpu.task = NULL; in clear_dead_task()
518 timer->it.cpu.expires = cpu_time_sub(timer->it_clock, in clear_dead_task()
519 timer->it.cpu.expires, in clear_dead_task()
535 struct task_struct *p = timer->it.cpu.task; in arm_timer()
538 struct cpu_timer_list *const nt = &timer->it.cpu; in arm_timer()
587 * The timer is locked, fire it and arrange for its reload.
595 timer->it.cpu.expires.sched = 0; in cpu_timer_fire()
602 timer->it.cpu.expires.sched = 0; in cpu_timer_fire()
603 } else if (timer->it.cpu.incr.sched == 0) { in cpu_timer_fire()
605 * One-shot timer. Clear it as soon as it's fired. in cpu_timer_fire()
608 timer->it.cpu.expires.sched = 0; in cpu_timer_fire()
613 * reload the timer. But we need to keep it in cpu_timer_fire()
650 * If we return TIMER_RETRY, it's necessary to release the timer's lock
656 struct task_struct *p = timer->it.cpu.task; in posix_cpu_timer_set()
673 * longer get any information about it at all. in posix_cpu_timer_set()
678 timer->it.cpu.task = NULL; in posix_cpu_timer_set()
688 old_incr = timer->it.cpu.incr; in posix_cpu_timer_set()
690 old_expires = timer->it.cpu.expires; in posix_cpu_timer_set()
691 if (unlikely(timer->it.cpu.firing)) { in posix_cpu_timer_set()
692 timer->it.cpu.firing = -1; in posix_cpu_timer_set()
695 list_del_init(&timer->it.cpu.entry); in posix_cpu_timer_set()
703 * check if it's already passed. In short, we need a sample. in posix_cpu_timer_set()
717 * Update the timer in case it has in posix_cpu_timer_set()
718 * overrun already. If it has, in posix_cpu_timer_set()
719 * we'll report it as having overrun in posix_cpu_timer_set()
728 timer->it.cpu.expires)) { in posix_cpu_timer_set()
731 timer->it.cpu.expires, val); in posix_cpu_timer_set()
747 * it as an overrun (thanks to bump_cpu_timer above). in posix_cpu_timer_set()
761 * arm the timer (we'll just fake it for timer_gettime). in posix_cpu_timer_set()
763 timer->it.cpu.expires = new_expires; in posix_cpu_timer_set()
776 timer->it.cpu.incr = timespec_to_sample(timer->it_clock, in posix_cpu_timer_set()
811 struct task_struct *p = timer->it.cpu.task; in posix_cpu_timer_get()
818 timer->it.cpu.incr, &itp->it_interval); in posix_cpu_timer_get()
820 if (timer->it.cpu.expires.sched == 0) { /* Timer not armed at all. */ in posix_cpu_timer_get()
831 sample_to_timespec(timer->it_clock, timer->it.cpu.expires, in posix_cpu_timer_get()
851 timer->it.cpu.task = NULL; in posix_cpu_timer_get()
852 timer->it.cpu.expires.sched = 0; in posix_cpu_timer_get()
873 if (cpu_time_before(timer->it_clock, now, timer->it.cpu.expires)) { in posix_cpu_timer_get()
876 timer->it.cpu.expires, now), in posix_cpu_timer_get()
881 * hasn't taken place yet. Say it's just about to expire. in posix_cpu_timer_get()
990 static void check_cpu_itimer(struct task_struct *tsk, struct cpu_itimer *it, in check_cpu_itimer() argument
993 if (!it->expires) in check_cpu_itimer()
996 if (cur_time >= it->expires) { in check_cpu_itimer()
997 if (it->incr) { in check_cpu_itimer()
998 it->expires += it->incr; in check_cpu_itimer()
999 it->error += it->incr_error; in check_cpu_itimer()
1000 if (it->error >= onecputick) { in check_cpu_itimer()
1001 it->expires -= cputime_one_jiffy; in check_cpu_itimer()
1002 it->error -= onecputick; in check_cpu_itimer()
1005 it->expires = 0; in check_cpu_itimer()
1014 if (it->expires && (!*expires || it->expires < *expires)) { in check_cpu_itimer()
1015 *expires = it->expires; in check_cpu_itimer()
1104 check_cpu_itimer(tsk, &sig->it[CPUCLOCK_PROF], &prof_expires, ptime, in check_process_timers()
1106 check_cpu_itimer(tsk, &sig->it[CPUCLOCK_VIRT], &virt_expires, utime, in check_process_timers()
1151 struct task_struct *p = timer->it.cpu.task; in posix_cpu_timer_schedule()
1170 read_lock(&tasklist_lock); /* arm_timer needs it. */ in posix_cpu_timer_schedule()
1180 timer->it.cpu.task = p = NULL; in posix_cpu_timer_schedule()
1181 timer->it.cpu.expires.sched = 0; in posix_cpu_timer_schedule()
1317 * that gets the timer lock before we do will give it up and in run_posix_cpu_timers()
1328 list_for_each_entry_safe(timer, next, &firing, it.cpu.entry) { in run_posix_cpu_timers()
1332 list_del_init(&timer->it.cpu.entry); in run_posix_cpu_timers()
1333 cpu_firing = timer->it.cpu.firing; in run_posix_cpu_timers()
1334 timer->it.cpu.firing = 0; in run_posix_cpu_timers()
1361 * it to be relative, *newval argument is relative and we update in set_process_cpu_timer()
1362 * it to be absolute. in set_process_cpu_timer()
1395 struct timespec *rqtp, struct itimerspec *it) in do_cpu_nanosleep() argument
1401 * Set up a temporary timer and then wait for it to go off. in do_cpu_nanosleep()
1412 memset(it, 0, sizeof *it); in do_cpu_nanosleep()
1413 it->it_value = *rqtp; in do_cpu_nanosleep()
1416 error = posix_cpu_timer_set(&timer, flags, it, NULL); in do_cpu_nanosleep()
1423 if (timer.it.cpu.expires.sched == 0) { in do_cpu_nanosleep()
1443 sample_to_timespec(which_clock, timer.it.cpu.expires, rqtp); in do_cpu_nanosleep()
1444 posix_cpu_timer_set(&timer, 0, &zero_it, it); in do_cpu_nanosleep()
1447 if ((it->it_value.tv_sec | it->it_value.tv_nsec) == 0) { in do_cpu_nanosleep()
1449 * It actually did fire already. in do_cpu_nanosleep()
1467 struct itimerspec it; in posix_cpu_nsleep() local
1478 error = do_cpu_nanosleep(which_clock, flags, rqtp, &it); in posix_cpu_nsleep()
1487 if (rmtp && copy_to_user(rmtp, &it.it_value, sizeof *rmtp)) in posix_cpu_nsleep()
1502 struct itimerspec it; in posix_cpu_nsleep_restart() local
1507 error = do_cpu_nanosleep(which_clock, TIMER_ABSTIME, &t, &it); in posix_cpu_nsleep_restart()
1514 if (rmtp && copy_to_user(rmtp, &it.it_value, sizeof *rmtp)) in posix_cpu_nsleep_restart()