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()
388 static int posix_cpu_timer_del(struct k_itimer *timer) in posix_cpu_timer_del() argument
393 struct task_struct *p = timer->it.cpu.task; in posix_cpu_timer_del()
407 WARN_ON_ONCE(!list_empty(&timer->it.cpu.entry)); in posix_cpu_timer_del()
409 if (timer->it.cpu.firing) in posix_cpu_timer_del()
412 list_del(&timer->it.cpu.entry); in posix_cpu_timer_del()
425 struct cpu_timer_list *timer, *next; in cleanup_timers_list() local
427 list_for_each_entry_safe(timer, next, head, entry) in cleanup_timers_list()
428 list_del_init(&timer->entry); in cleanup_timers_list()
470 static void arm_timer(struct k_itimer *timer) in arm_timer() argument
472 struct task_struct *p = timer->it.cpu.task; in arm_timer()
475 struct cpu_timer_list *const nt = &timer->it.cpu; in arm_timer()
478 if (CPUCLOCK_PERTHREAD(timer->it_clock)) { in arm_timer()
485 head += CPUCLOCK_WHICH(timer->it_clock); in arm_timer()
505 switch (CPUCLOCK_WHICH(timer->it_clock)) { in arm_timer()
526 static void cpu_timer_fire(struct k_itimer *timer) in cpu_timer_fire() argument
528 if ((timer->it_sigev_notify & ~SIGEV_THREAD_ID) == SIGEV_NONE) { in cpu_timer_fire()
532 timer->it.cpu.expires = 0; in cpu_timer_fire()
533 } else if (unlikely(timer->sigq == NULL)) { in cpu_timer_fire()
538 wake_up_process(timer->it_process); in cpu_timer_fire()
539 timer->it.cpu.expires = 0; in cpu_timer_fire()
540 } else if (timer->it.cpu.incr == 0) { in cpu_timer_fire()
544 posix_timer_event(timer, 0); in cpu_timer_fire()
545 timer->it.cpu.expires = 0; in cpu_timer_fire()
546 } else if (posix_timer_event(timer, ++timer->it_requeue_pending)) { in cpu_timer_fire()
553 posix_cpu_timer_schedule(timer); in cpu_timer_fire()
624 static int posix_cpu_timer_set(struct k_itimer *timer, int timer_flags, in posix_cpu_timer_set() argument
629 struct task_struct *p = timer->it.cpu.task; in posix_cpu_timer_set()
635 new_expires = timespec_to_sample(timer->it_clock, &new->it_value); in posix_cpu_timer_set()
656 old_incr = timer->it.cpu.incr; in posix_cpu_timer_set()
657 old_expires = timer->it.cpu.expires; in posix_cpu_timer_set()
658 if (unlikely(timer->it.cpu.firing)) { in posix_cpu_timer_set()
659 timer->it.cpu.firing = -1; in posix_cpu_timer_set()
662 list_del_init(&timer->it.cpu.entry); in posix_cpu_timer_set()
672 if (CPUCLOCK_PERTHREAD(timer->it_clock)) { in posix_cpu_timer_set()
673 cpu_clock_sample(timer->it_clock, p, &val); in posix_cpu_timer_set()
675 cpu_timer_sample_group(timer->it_clock, p, &val); in posix_cpu_timer_set()
693 bump_cpu_timer(timer, val); in posix_cpu_timer_set()
694 if (val < timer->it.cpu.expires) { in posix_cpu_timer_set()
695 old_expires = timer->it.cpu.expires - val; in posix_cpu_timer_set()
696 sample_to_timespec(timer->it_clock, in posix_cpu_timer_set()
726 timer->it.cpu.expires = new_expires; in posix_cpu_timer_set()
728 arm_timer(timer); in posix_cpu_timer_set()
736 timer->it.cpu.incr = timespec_to_sample(timer->it_clock, in posix_cpu_timer_set()
744 timer->it_requeue_pending = (timer->it_requeue_pending + 2) & in posix_cpu_timer_set()
746 timer->it_overrun_last = 0; in posix_cpu_timer_set()
747 timer->it_overrun = -1; in posix_cpu_timer_set()
755 cpu_timer_fire(timer); in posix_cpu_timer_set()
761 sample_to_timespec(timer->it_clock, in posix_cpu_timer_set()
769 static void posix_cpu_timer_get(struct k_itimer *timer, struct itimerspec *itp) in posix_cpu_timer_get() argument
772 struct task_struct *p = timer->it.cpu.task; in posix_cpu_timer_get()
779 sample_to_timespec(timer->it_clock, in posix_cpu_timer_get()
780 timer->it.cpu.incr, &itp->it_interval); in posix_cpu_timer_get()
782 if (timer->it.cpu.expires == 0) { /* Timer not armed at all. */ in posix_cpu_timer_get()
790 if (CPUCLOCK_PERTHREAD(timer->it_clock)) { in posix_cpu_timer_get()
791 cpu_clock_sample(timer->it_clock, p, &now); in posix_cpu_timer_get()
808 timer->it.cpu.expires = 0; in posix_cpu_timer_get()
809 sample_to_timespec(timer->it_clock, timer->it.cpu.expires, in posix_cpu_timer_get()
812 cpu_timer_sample_group(timer->it_clock, p, &now); in posix_cpu_timer_get()
817 if (now < timer->it.cpu.expires) { in posix_cpu_timer_get()
818 sample_to_timespec(timer->it_clock, in posix_cpu_timer_get()
819 timer->it.cpu.expires - now, in posix_cpu_timer_get()
1046 void posix_cpu_timer_schedule(struct k_itimer *timer) in posix_cpu_timer_schedule() argument
1050 struct task_struct *p = timer->it.cpu.task; in posix_cpu_timer_schedule()
1058 if (CPUCLOCK_PERTHREAD(timer->it_clock)) { in posix_cpu_timer_schedule()
1059 cpu_clock_sample(timer->it_clock, p, &now); in posix_cpu_timer_schedule()
1060 bump_cpu_timer(timer, now); in posix_cpu_timer_schedule()
1079 timer->it.cpu.expires = 0; in posix_cpu_timer_schedule()
1086 cpu_timer_sample_group(timer->it_clock, p, &now); in posix_cpu_timer_schedule()
1087 bump_cpu_timer(timer, now); in posix_cpu_timer_schedule()
1095 arm_timer(timer); in posix_cpu_timer_schedule()
1101 timer->it_overrun_last = timer->it_overrun; in posix_cpu_timer_schedule()
1102 timer->it_overrun = -1; in posix_cpu_timer_schedule()
1103 ++timer->it_requeue_pending; in posix_cpu_timer_schedule()
1188 struct k_itimer *timer, *next; in run_posix_cpu_timers() local
1227 list_for_each_entry_safe(timer, next, &firing, it.cpu.entry) { in run_posix_cpu_timers()
1230 spin_lock(&timer->it_lock); in run_posix_cpu_timers()
1231 list_del_init(&timer->it.cpu.entry); in run_posix_cpu_timers()
1232 cpu_firing = timer->it.cpu.firing; in run_posix_cpu_timers()
1233 timer->it.cpu.firing = 0; in run_posix_cpu_timers()
1240 cpu_timer_fire(timer); in run_posix_cpu_timers()
1241 spin_unlock(&timer->it_lock); in run_posix_cpu_timers()
1298 struct k_itimer timer; in do_cpu_nanosleep() local
1304 memset(&timer, 0, sizeof timer); in do_cpu_nanosleep()
1305 spin_lock_init(&timer.it_lock); in do_cpu_nanosleep()
1306 timer.it_clock = which_clock; in do_cpu_nanosleep()
1307 timer.it_overrun = -1; in do_cpu_nanosleep()
1308 error = posix_cpu_timer_create(&timer); in do_cpu_nanosleep()
1309 timer.it_process = current; in do_cpu_nanosleep()
1316 spin_lock_irq(&timer.it_lock); in do_cpu_nanosleep()
1317 error = posix_cpu_timer_set(&timer, flags, it, NULL); in do_cpu_nanosleep()
1319 spin_unlock_irq(&timer.it_lock); in do_cpu_nanosleep()
1324 if (timer.it.cpu.expires == 0) { in do_cpu_nanosleep()
1329 posix_cpu_timer_del(&timer); in do_cpu_nanosleep()
1330 spin_unlock_irq(&timer.it_lock); in do_cpu_nanosleep()
1338 spin_unlock_irq(&timer.it_lock); in do_cpu_nanosleep()
1340 spin_lock_irq(&timer.it_lock); in do_cpu_nanosleep()
1346 sample_to_timespec(which_clock, timer.it.cpu.expires, rqtp); in do_cpu_nanosleep()
1347 error = posix_cpu_timer_set(&timer, 0, &zero_it, it); in do_cpu_nanosleep()
1352 posix_cpu_timer_del(&timer); in do_cpu_nanosleep()
1354 spin_unlock_irq(&timer.it_lock); in do_cpu_nanosleep()
1362 spin_lock_irq(&timer.it_lock); in do_cpu_nanosleep()
1363 error = posix_cpu_timer_del(&timer); in do_cpu_nanosleep()
1364 spin_unlock_irq(&timer.it_lock); in do_cpu_nanosleep()
1455 static int process_cpu_timer_create(struct k_itimer *timer) in process_cpu_timer_create() argument
1457 timer->it_clock = PROCESS_CLOCK; in process_cpu_timer_create()
1458 return posix_cpu_timer_create(timer); in process_cpu_timer_create()
1480 static int thread_cpu_timer_create(struct k_itimer *timer) in thread_cpu_timer_create() argument
1482 timer->it_clock = THREAD_CLOCK; in thread_cpu_timer_create()
1483 return posix_cpu_timer_create(timer); in thread_cpu_timer_create()