Lines Matching refs:timr

200 static inline void unlock_timer(struct k_itimer *timr, unsigned long flags)  in unlock_timer()  argument
202 spin_unlock_irqrestore(&timr->it_lock, flags); in unlock_timer()
358 static void schedule_next_timer(struct k_itimer *timr) in schedule_next_timer() argument
360 struct hrtimer *timer = &timr->it.real.timer; in schedule_next_timer()
362 if (timr->it.real.interval.tv64 == 0) in schedule_next_timer()
365 timr->it_overrun += (unsigned int) hrtimer_forward(timer, in schedule_next_timer()
367 timr->it.real.interval); in schedule_next_timer()
369 timr->it_overrun_last = timr->it_overrun; in schedule_next_timer()
370 timr->it_overrun = -1; in schedule_next_timer()
371 ++timr->it_requeue_pending; in schedule_next_timer()
388 struct k_itimer *timr; in do_schedule_next_timer() local
391 timr = lock_timer(info->si_tid, &flags); in do_schedule_next_timer()
393 if (timr && timr->it_requeue_pending == info->si_sys_private) { in do_schedule_next_timer()
394 if (timr->it_clock < 0) in do_schedule_next_timer()
395 posix_cpu_timer_schedule(timr); in do_schedule_next_timer()
397 schedule_next_timer(timr); in do_schedule_next_timer()
399 info->si_overrun += timr->it_overrun_last; in do_schedule_next_timer()
402 if (timr) in do_schedule_next_timer()
403 unlock_timer(timr, flags); in do_schedule_next_timer()
406 int posix_timer_event(struct k_itimer *timr, int si_private) in posix_timer_event() argument
421 timr->sigq->info.si_sys_private = si_private; in posix_timer_event()
424 task = pid_task(timr->it_pid, PIDTYPE_PID); in posix_timer_event()
426 shared = !(timr->it_sigev_notify & SIGEV_THREAD_ID); in posix_timer_event()
427 ret = send_sigqueue(timr->sigq, task, shared); in posix_timer_event()
444 struct k_itimer *timr; in posix_timer_fn() local
449 timr = container_of(timer, struct k_itimer, it.real.timer); in posix_timer_fn()
450 spin_lock_irqsave(&timr->it_lock, flags); in posix_timer_fn()
452 if (timr->it.real.interval.tv64 != 0) in posix_timer_fn()
453 si_private = ++timr->it_requeue_pending; in posix_timer_fn()
455 if (posix_timer_event(timr, si_private)) { in posix_timer_fn()
461 if (timr->it.real.interval.tv64 != 0) { in posix_timer_fn()
490 if (timr->it.real.interval.tv64 < kj.tv64) in posix_timer_fn()
494 timr->it_overrun += (unsigned int) in posix_timer_fn()
496 timr->it.real.interval); in posix_timer_fn()
498 ++timr->it_requeue_pending; in posix_timer_fn()
502 unlock_timer(timr, flags); in posix_timer_fn()
695 struct k_itimer *timr; in __lock_timer() local
705 timr = posix_timer_by_id(timer_id); in __lock_timer()
706 if (timr) { in __lock_timer()
707 spin_lock_irqsave(&timr->it_lock, *flags); in __lock_timer()
708 if (timr->it_signal == current->signal) { in __lock_timer()
710 return timr; in __lock_timer()
712 spin_unlock_irqrestore(&timr->it_lock, *flags); in __lock_timer()
736 common_timer_get(struct k_itimer *timr, struct itimerspec *cur_setting) in common_timer_get() argument
739 struct hrtimer *timer = &timr->it.real.timer; in common_timer_get()
743 iv = timr->it.real.interval; in common_timer_get()
749 (timr->it_sigev_notify & ~SIGEV_THREAD_ID) != SIGEV_NONE) in common_timer_get()
759 if (iv.tv64 && (timr->it_requeue_pending & REQUEUE_PENDING || in common_timer_get()
760 (timr->it_sigev_notify & ~SIGEV_THREAD_ID) == SIGEV_NONE)) in common_timer_get()
761 timr->it_overrun += (unsigned int) hrtimer_forward(timer, now, iv); in common_timer_get()
770 if ((timr->it_sigev_notify & ~SIGEV_THREAD_ID) != SIGEV_NONE) in common_timer_get()
781 struct k_itimer *timr; in SYSCALL_DEFINE2() local
786 timr = lock_timer(timer_id, &flags); in SYSCALL_DEFINE2()
787 if (!timr) in SYSCALL_DEFINE2()
790 kc = clockid_to_kclock(timr->it_clock); in SYSCALL_DEFINE2()
794 kc->timer_get(timr, &cur_setting); in SYSCALL_DEFINE2()
796 unlock_timer(timr, flags); in SYSCALL_DEFINE2()
815 struct k_itimer *timr; in SYSCALL_DEFINE1() local
819 timr = lock_timer(timer_id, &flags); in SYSCALL_DEFINE1()
820 if (!timr) in SYSCALL_DEFINE1()
823 overrun = timr->it_overrun_last; in SYSCALL_DEFINE1()
824 unlock_timer(timr, flags); in SYSCALL_DEFINE1()
832 common_timer_set(struct k_itimer *timr, int flags, in common_timer_set() argument
835 struct hrtimer *timer = &timr->it.real.timer; in common_timer_set()
839 common_timer_get(timr, old_setting); in common_timer_set()
842 timr->it.real.interval.tv64 = 0; in common_timer_set()
850 timr->it_requeue_pending = (timr->it_requeue_pending + 2) & in common_timer_set()
852 timr->it_overrun_last = 0; in common_timer_set()
859 hrtimer_init(&timr->it.real.timer, timr->it_clock, mode); in common_timer_set()
860 timr->it.real.timer.function = posix_timer_fn; in common_timer_set()
865 timr->it.real.interval = timespec_to_ktime(new_setting->it_interval); in common_timer_set()
868 if (((timr->it_sigev_notify & ~SIGEV_THREAD_ID) == SIGEV_NONE)) { in common_timer_set()
885 struct k_itimer *timr; in SYSCALL_DEFINE4() local
902 timr = lock_timer(timer_id, &flag); in SYSCALL_DEFINE4()
903 if (!timr) in SYSCALL_DEFINE4()
906 kc = clockid_to_kclock(timr->it_clock); in SYSCALL_DEFINE4()
910 error = kc->timer_set(timr, flags, &new_spec, rtn); in SYSCALL_DEFINE4()
912 unlock_timer(timr, flag); in SYSCALL_DEFINE4()