Lines Matching refs:timr

183 static inline void unlock_timer(struct k_itimer *timr, unsigned long flags)  in unlock_timer()  argument
185 spin_unlock_irqrestore(&timr->it_lock, flags); in unlock_timer()
281 static inline int timer_overrun_to_int(struct k_itimer *timr, int baseval) in timer_overrun_to_int() argument
283 s64 sum = timr->it_overrun_last + (s64)baseval; in timer_overrun_to_int()
288 static void common_hrtimer_rearm(struct k_itimer *timr) in common_hrtimer_rearm() argument
290 struct hrtimer *timer = &timr->it.real.timer; in common_hrtimer_rearm()
292 if (!timr->it_interval) in common_hrtimer_rearm()
295 timr->it_overrun += hrtimer_forward(timer, timer->base->get_time(), in common_hrtimer_rearm()
296 timr->it_interval); in common_hrtimer_rearm()
313 struct k_itimer *timr; in posixtimer_rearm() local
316 timr = lock_timer(info->si_tid, &flags); in posixtimer_rearm()
317 if (!timr) in posixtimer_rearm()
320 if (timr->it_requeue_pending == info->si_sys_private) { in posixtimer_rearm()
321 timr->kclock->timer_rearm(timr); in posixtimer_rearm()
323 timr->it_active = 1; in posixtimer_rearm()
324 timr->it_overrun_last = timr->it_overrun; in posixtimer_rearm()
325 timr->it_overrun = -1LL; in posixtimer_rearm()
326 ++timr->it_requeue_pending; in posixtimer_rearm()
328 info->si_overrun = timer_overrun_to_int(timr, info->si_overrun); in posixtimer_rearm()
331 unlock_timer(timr, flags); in posixtimer_rearm()
334 int posix_timer_event(struct k_itimer *timr, int si_private) in posix_timer_event() argument
349 timr->sigq->info.si_sys_private = si_private; in posix_timer_event()
351 type = !(timr->it_sigev_notify & SIGEV_THREAD_ID) ? PIDTYPE_TGID : PIDTYPE_PID; in posix_timer_event()
352 ret = send_sigqueue(timr->sigq, timr->it_pid, type); in posix_timer_event()
366 struct k_itimer *timr; in posix_timer_fn() local
371 timr = container_of(timer, struct k_itimer, it.real.timer); in posix_timer_fn()
372 spin_lock_irqsave(&timr->it_lock, flags); in posix_timer_fn()
374 timr->it_active = 0; in posix_timer_fn()
375 if (timr->it_interval != 0) in posix_timer_fn()
376 si_private = ++timr->it_requeue_pending; in posix_timer_fn()
378 if (posix_timer_event(timr, si_private)) { in posix_timer_fn()
384 if (timr->it_interval != 0) { in posix_timer_fn()
413 if (timr->it_interval < kj) in posix_timer_fn()
417 timr->it_overrun += hrtimer_forward(timer, now, in posix_timer_fn()
418 timr->it_interval); in posix_timer_fn()
420 ++timr->it_requeue_pending; in posix_timer_fn()
421 timr->it_active = 1; in posix_timer_fn()
425 unlock_timer(timr, flags); in posix_timer_fn()
614 struct k_itimer *timr; in __lock_timer() local
624 timr = posix_timer_by_id(timer_id); in __lock_timer()
625 if (timr) { in __lock_timer()
626 spin_lock_irqsave(&timr->it_lock, *flags); in __lock_timer()
627 if (timr->it_signal == current->signal) { in __lock_timer()
629 return timr; in __lock_timer()
631 spin_unlock_irqrestore(&timr->it_lock, *flags); in __lock_timer()
638 static ktime_t common_hrtimer_remaining(struct k_itimer *timr, ktime_t now) in common_hrtimer_remaining() argument
640 struct hrtimer *timer = &timr->it.real.timer; in common_hrtimer_remaining()
645 static s64 common_hrtimer_forward(struct k_itimer *timr, ktime_t now) in common_hrtimer_forward() argument
647 struct hrtimer *timer = &timr->it.real.timer; in common_hrtimer_forward()
649 return hrtimer_forward(timer, now, timr->it_interval); in common_hrtimer_forward()
668 void common_timer_get(struct k_itimer *timr, struct itimerspec64 *cur_setting) in common_timer_get() argument
670 const struct k_clock *kc = timr->kclock; in common_timer_get()
675 sig_none = timr->it_sigev_notify == SIGEV_NONE; in common_timer_get()
676 iv = timr->it_interval; in common_timer_get()
681 } else if (!timr->it_active) { in common_timer_get()
694 kc->clock_get(timr->it_clock, &ts64); in common_timer_get()
701 if (iv && (timr->it_requeue_pending & REQUEUE_PENDING || sig_none)) in common_timer_get()
702 timr->it_overrun += kc->timer_forward(timr, now); in common_timer_get()
704 remaining = kc->timer_remaining(timr, now); in common_timer_get()
721 struct k_itimer *timr; in do_timer_gettime() local
726 timr = lock_timer(timer_id, &flags); in do_timer_gettime()
727 if (!timr) in do_timer_gettime()
731 kc = timr->kclock; in do_timer_gettime()
735 kc->timer_get(timr, setting); in do_timer_gettime()
737 unlock_timer(timr, flags); in do_timer_gettime()
783 struct k_itimer *timr; in SYSCALL_DEFINE1() local
787 timr = lock_timer(timer_id, &flags); in SYSCALL_DEFINE1()
788 if (!timr) in SYSCALL_DEFINE1()
791 overrun = timer_overrun_to_int(timr, 0); in SYSCALL_DEFINE1()
792 unlock_timer(timr, flags); in SYSCALL_DEFINE1()
797 static void common_hrtimer_arm(struct k_itimer *timr, ktime_t expires, in common_hrtimer_arm() argument
800 struct hrtimer *timer = &timr->it.real.timer; in common_hrtimer_arm()
813 if (timr->it_clock == CLOCK_REALTIME) in common_hrtimer_arm()
814 timr->kclock = absolute ? &clock_realtime : &clock_monotonic; in common_hrtimer_arm()
816 hrtimer_init(&timr->it.real.timer, timr->it_clock, mode); in common_hrtimer_arm()
817 timr->it.real.timer.function = posix_timer_fn; in common_hrtimer_arm()
827 static int common_hrtimer_try_to_cancel(struct k_itimer *timr) in common_hrtimer_try_to_cancel() argument
829 return hrtimer_try_to_cancel(&timr->it.real.timer); in common_hrtimer_try_to_cancel()
833 int common_timer_set(struct k_itimer *timr, int flags, in common_timer_set() argument
837 const struct k_clock *kc = timr->kclock; in common_timer_set()
842 common_timer_get(timr, old_setting); in common_timer_set()
845 timr->it_interval = 0; in common_timer_set()
850 if (kc->timer_try_to_cancel(timr) < 0) in common_timer_set()
853 timr->it_active = 0; in common_timer_set()
854 timr->it_requeue_pending = (timr->it_requeue_pending + 2) & in common_timer_set()
856 timr->it_overrun_last = 0; in common_timer_set()
862 timr->it_interval = timespec64_to_ktime(new_setting->it_interval); in common_timer_set()
864 sigev_none = timr->it_sigev_notify == SIGEV_NONE; in common_timer_set()
866 kc->timer_arm(timr, expires, flags & TIMER_ABSTIME, sigev_none); in common_timer_set()
867 timr->it_active = !sigev_none; in common_timer_set()
876 struct k_itimer *timr; in do_timer_settime() local
887 timr = lock_timer(timer_id, &flag); in do_timer_settime()
888 if (!timr) in do_timer_settime()
891 kc = timr->kclock; in do_timer_settime()
895 error = kc->timer_set(timr, flags, new_spec64, old_spec64); in do_timer_settime()
897 unlock_timer(timr, flag); in do_timer_settime()