Lines Matching refs:timer

82 static void bump_cpu_timer(struct k_itimer *timer,  in bump_cpu_timer()  argument
88 if (timer->it.cpu.incr == 0) in bump_cpu_timer()
91 if (now < timer->it.cpu.expires) in bump_cpu_timer()
94 incr = timer->it.cpu.incr; in bump_cpu_timer()
95 delta = now + incr - timer->it.cpu.expires; in bump_cpu_timer()
105 timer->it.cpu.expires += incr; in bump_cpu_timer()
106 timer->it_overrun += 1 << i; in bump_cpu_timer()
365 static int posix_cpu_timer_del(struct k_itimer *timer) in posix_cpu_timer_del() argument
370 struct task_struct *p = timer->it.cpu.task; in posix_cpu_timer_del()
384 WARN_ON_ONCE(!list_empty(&timer->it.cpu.entry)); in posix_cpu_timer_del()
386 if (timer->it.cpu.firing) in posix_cpu_timer_del()
389 list_del(&timer->it.cpu.entry); in posix_cpu_timer_del()
402 struct cpu_timer_list *timer, *next; in cleanup_timers_list() local
404 list_for_each_entry_safe(timer, next, head, entry) in cleanup_timers_list()
405 list_del_init(&timer->entry); in cleanup_timers_list()
447 static void arm_timer(struct k_itimer *timer) in arm_timer() argument
449 struct task_struct *p = timer->it.cpu.task; in arm_timer()
452 struct cpu_timer_list *const nt = &timer->it.cpu; in arm_timer()
455 if (CPUCLOCK_PERTHREAD(timer->it_clock)) { in arm_timer()
462 head += CPUCLOCK_WHICH(timer->it_clock); in arm_timer()
482 switch (CPUCLOCK_WHICH(timer->it_clock)) { in arm_timer()
503 static void cpu_timer_fire(struct k_itimer *timer) in cpu_timer_fire() argument
505 if ((timer->it_sigev_notify & ~SIGEV_THREAD_ID) == SIGEV_NONE) { in cpu_timer_fire()
509 timer->it.cpu.expires = 0; in cpu_timer_fire()
510 } else if (unlikely(timer->sigq == NULL)) { in cpu_timer_fire()
515 wake_up_process(timer->it_process); in cpu_timer_fire()
516 timer->it.cpu.expires = 0; in cpu_timer_fire()
517 } else if (timer->it.cpu.incr == 0) { in cpu_timer_fire()
521 posix_timer_event(timer, 0); in cpu_timer_fire()
522 timer->it.cpu.expires = 0; in cpu_timer_fire()
523 } else if (posix_timer_event(timer, ++timer->it_requeue_pending)) { in cpu_timer_fire()
530 posix_cpu_timer_schedule(timer); in cpu_timer_fire()
600 static int posix_cpu_timer_set(struct k_itimer *timer, int timer_flags, in posix_cpu_timer_set() argument
605 struct task_struct *p = timer->it.cpu.task; in posix_cpu_timer_set()
611 new_expires = timespec_to_sample(timer->it_clock, &new->it_value); in posix_cpu_timer_set()
632 old_incr = timer->it.cpu.incr; in posix_cpu_timer_set()
633 old_expires = timer->it.cpu.expires; in posix_cpu_timer_set()
634 if (unlikely(timer->it.cpu.firing)) { in posix_cpu_timer_set()
635 timer->it.cpu.firing = -1; in posix_cpu_timer_set()
638 list_del_init(&timer->it.cpu.entry); in posix_cpu_timer_set()
648 if (CPUCLOCK_PERTHREAD(timer->it_clock)) { in posix_cpu_timer_set()
649 cpu_clock_sample(timer->it_clock, p, &val); in posix_cpu_timer_set()
651 cpu_timer_sample_group(timer->it_clock, p, &val); in posix_cpu_timer_set()
669 bump_cpu_timer(timer, val); in posix_cpu_timer_set()
670 if (val < timer->it.cpu.expires) { in posix_cpu_timer_set()
671 old_expires = timer->it.cpu.expires - val; in posix_cpu_timer_set()
672 sample_to_timespec(timer->it_clock, in posix_cpu_timer_set()
702 timer->it.cpu.expires = new_expires; in posix_cpu_timer_set()
704 arm_timer(timer); in posix_cpu_timer_set()
712 timer->it.cpu.incr = timespec_to_sample(timer->it_clock, in posix_cpu_timer_set()
720 timer->it_requeue_pending = (timer->it_requeue_pending + 2) & in posix_cpu_timer_set()
722 timer->it_overrun_last = 0; in posix_cpu_timer_set()
723 timer->it_overrun = -1; in posix_cpu_timer_set()
731 cpu_timer_fire(timer); in posix_cpu_timer_set()
737 sample_to_timespec(timer->it_clock, in posix_cpu_timer_set()
745 static void posix_cpu_timer_get(struct k_itimer *timer, struct itimerspec *itp) in posix_cpu_timer_get() argument
748 struct task_struct *p = timer->it.cpu.task; in posix_cpu_timer_get()
755 sample_to_timespec(timer->it_clock, in posix_cpu_timer_get()
756 timer->it.cpu.incr, &itp->it_interval); in posix_cpu_timer_get()
758 if (timer->it.cpu.expires == 0) { /* Timer not armed at all. */ in posix_cpu_timer_get()
766 if (CPUCLOCK_PERTHREAD(timer->it_clock)) { in posix_cpu_timer_get()
767 cpu_clock_sample(timer->it_clock, p, &now); in posix_cpu_timer_get()
784 timer->it.cpu.expires = 0; in posix_cpu_timer_get()
785 sample_to_timespec(timer->it_clock, timer->it.cpu.expires, in posix_cpu_timer_get()
788 cpu_timer_sample_group(timer->it_clock, p, &now); in posix_cpu_timer_get()
793 if (now < timer->it.cpu.expires) { in posix_cpu_timer_get()
794 sample_to_timespec(timer->it_clock, in posix_cpu_timer_get()
795 timer->it.cpu.expires - now, in posix_cpu_timer_get()
1002 void posix_cpu_timer_schedule(struct k_itimer *timer) in posix_cpu_timer_schedule() argument
1006 struct task_struct *p = timer->it.cpu.task; in posix_cpu_timer_schedule()
1014 if (CPUCLOCK_PERTHREAD(timer->it_clock)) { in posix_cpu_timer_schedule()
1015 cpu_clock_sample(timer->it_clock, p, &now); in posix_cpu_timer_schedule()
1016 bump_cpu_timer(timer, now); in posix_cpu_timer_schedule()
1035 timer->it.cpu.expires = 0; in posix_cpu_timer_schedule()
1042 cpu_timer_sample_group(timer->it_clock, p, &now); in posix_cpu_timer_schedule()
1043 bump_cpu_timer(timer, now); in posix_cpu_timer_schedule()
1051 arm_timer(timer); in posix_cpu_timer_schedule()
1057 timer->it_overrun_last = timer->it_overrun; in posix_cpu_timer_schedule()
1058 timer->it_overrun = -1; in posix_cpu_timer_schedule()
1059 ++timer->it_requeue_pending; in posix_cpu_timer_schedule()
1136 struct k_itimer *timer, *next; in run_posix_cpu_timers() local
1179 list_for_each_entry_safe(timer, next, &firing, it.cpu.entry) { in run_posix_cpu_timers()
1182 spin_lock(&timer->it_lock); in run_posix_cpu_timers()
1183 list_del_init(&timer->it.cpu.entry); in run_posix_cpu_timers()
1184 cpu_firing = timer->it.cpu.firing; in run_posix_cpu_timers()
1185 timer->it.cpu.firing = 0; in run_posix_cpu_timers()
1192 cpu_timer_fire(timer); in run_posix_cpu_timers()
1193 spin_unlock(&timer->it_lock); in run_posix_cpu_timers()
1250 struct k_itimer timer; in do_cpu_nanosleep() local
1256 memset(&timer, 0, sizeof timer); in do_cpu_nanosleep()
1257 spin_lock_init(&timer.it_lock); in do_cpu_nanosleep()
1258 timer.it_clock = which_clock; in do_cpu_nanosleep()
1259 timer.it_overrun = -1; in do_cpu_nanosleep()
1260 error = posix_cpu_timer_create(&timer); in do_cpu_nanosleep()
1261 timer.it_process = current; in do_cpu_nanosleep()
1268 spin_lock_irq(&timer.it_lock); in do_cpu_nanosleep()
1269 error = posix_cpu_timer_set(&timer, flags, it, NULL); in do_cpu_nanosleep()
1271 spin_unlock_irq(&timer.it_lock); in do_cpu_nanosleep()
1276 if (timer.it.cpu.expires == 0) { in do_cpu_nanosleep()
1281 posix_cpu_timer_del(&timer); in do_cpu_nanosleep()
1282 spin_unlock_irq(&timer.it_lock); in do_cpu_nanosleep()
1290 spin_unlock_irq(&timer.it_lock); in do_cpu_nanosleep()
1292 spin_lock_irq(&timer.it_lock); in do_cpu_nanosleep()
1298 sample_to_timespec(which_clock, timer.it.cpu.expires, rqtp); in do_cpu_nanosleep()
1299 error = posix_cpu_timer_set(&timer, 0, &zero_it, it); in do_cpu_nanosleep()
1304 posix_cpu_timer_del(&timer); in do_cpu_nanosleep()
1306 spin_unlock_irq(&timer.it_lock); in do_cpu_nanosleep()
1314 spin_lock_irq(&timer.it_lock); in do_cpu_nanosleep()
1315 error = posix_cpu_timer_del(&timer); in do_cpu_nanosleep()
1316 spin_unlock_irq(&timer.it_lock); in do_cpu_nanosleep()
1407 static int process_cpu_timer_create(struct k_itimer *timer) in process_cpu_timer_create() argument
1409 timer->it_clock = PROCESS_CLOCK; in process_cpu_timer_create()
1410 return posix_cpu_timer_create(timer); in process_cpu_timer_create()
1432 static int thread_cpu_timer_create(struct k_itimer *timer) in thread_cpu_timer_create() argument
1434 timer->it_clock = THREAD_CLOCK; in thread_cpu_timer_create()
1435 return posix_cpu_timer_create(timer); in thread_cpu_timer_create()