Lines Matching refs:timr
162 static inline void unlock_timer(struct k_itimer *timr, unsigned long flags) in unlock_timer() argument
164 spin_unlock_irqrestore(&timr->it_lock, flags); in unlock_timer()
260 static inline int timer_overrun_to_int(struct k_itimer *timr, int baseval) in timer_overrun_to_int() argument
262 s64 sum = timr->it_overrun_last + (s64)baseval; in timer_overrun_to_int()
267 static void common_hrtimer_rearm(struct k_itimer *timr) in common_hrtimer_rearm() argument
269 struct hrtimer *timer = &timr->it.real.timer; in common_hrtimer_rearm()
271 timr->it_overrun += hrtimer_forward(timer, timer->base->get_time(), in common_hrtimer_rearm()
272 timr->it_interval); in common_hrtimer_rearm()
289 struct k_itimer *timr; in posixtimer_rearm() local
292 timr = lock_timer(info->si_tid, &flags); in posixtimer_rearm()
293 if (!timr) in posixtimer_rearm()
296 if (timr->it_interval && timr->it_requeue_pending == info->si_sys_private) { in posixtimer_rearm()
297 timr->kclock->timer_rearm(timr); in posixtimer_rearm()
299 timr->it_active = 1; in posixtimer_rearm()
300 timr->it_overrun_last = timr->it_overrun; in posixtimer_rearm()
301 timr->it_overrun = -1LL; in posixtimer_rearm()
302 ++timr->it_requeue_pending; in posixtimer_rearm()
304 info->si_overrun = timer_overrun_to_int(timr, info->si_overrun); in posixtimer_rearm()
307 unlock_timer(timr, flags); in posixtimer_rearm()
310 int posix_timer_event(struct k_itimer *timr, int si_private) in posix_timer_event() argument
325 timr->sigq->info.si_sys_private = si_private; in posix_timer_event()
327 type = !(timr->it_sigev_notify & SIGEV_THREAD_ID) ? PIDTYPE_TGID : PIDTYPE_PID; in posix_timer_event()
328 ret = send_sigqueue(timr->sigq, timr->it_pid, type); in posix_timer_event()
342 struct k_itimer *timr; in posix_timer_fn() local
347 timr = container_of(timer, struct k_itimer, it.real.timer); in posix_timer_fn()
348 spin_lock_irqsave(&timr->it_lock, flags); in posix_timer_fn()
350 timr->it_active = 0; in posix_timer_fn()
351 if (timr->it_interval != 0) in posix_timer_fn()
352 si_private = ++timr->it_requeue_pending; in posix_timer_fn()
354 if (posix_timer_event(timr, si_private)) { in posix_timer_fn()
360 if (timr->it_interval != 0) { in posix_timer_fn()
389 if (timr->it_interval < kj) in posix_timer_fn()
393 timr->it_overrun += hrtimer_forward(timer, now, in posix_timer_fn()
394 timr->it_interval); in posix_timer_fn()
396 ++timr->it_requeue_pending; in posix_timer_fn()
397 timr->it_active = 1; in posix_timer_fn()
401 unlock_timer(timr, flags); in posix_timer_fn()
590 struct k_itimer *timr; in __lock_timer() local
600 timr = posix_timer_by_id(timer_id); in __lock_timer()
601 if (timr) { in __lock_timer()
602 spin_lock_irqsave(&timr->it_lock, *flags); in __lock_timer()
603 if (timr->it_signal == current->signal) { in __lock_timer()
605 return timr; in __lock_timer()
607 spin_unlock_irqrestore(&timr->it_lock, *flags); in __lock_timer()
614 static ktime_t common_hrtimer_remaining(struct k_itimer *timr, ktime_t now) in common_hrtimer_remaining() argument
616 struct hrtimer *timer = &timr->it.real.timer; in common_hrtimer_remaining()
621 static s64 common_hrtimer_forward(struct k_itimer *timr, ktime_t now) in common_hrtimer_forward() argument
623 struct hrtimer *timer = &timr->it.real.timer; in common_hrtimer_forward()
625 return hrtimer_forward(timer, now, timr->it_interval); in common_hrtimer_forward()
644 void common_timer_get(struct k_itimer *timr, struct itimerspec64 *cur_setting) in common_timer_get() argument
646 const struct k_clock *kc = timr->kclock; in common_timer_get()
651 sig_none = timr->it_sigev_notify == SIGEV_NONE; in common_timer_get()
652 iv = timr->it_interval; in common_timer_get()
657 } else if (!timr->it_active) { in common_timer_get()
670 kc->clock_get(timr->it_clock, &ts64); in common_timer_get()
677 if (iv && (timr->it_requeue_pending & REQUEUE_PENDING || sig_none)) in common_timer_get()
678 timr->it_overrun += kc->timer_forward(timr, now); in common_timer_get()
680 remaining = kc->timer_remaining(timr, now); in common_timer_get()
697 struct k_itimer *timr; in do_timer_gettime() local
702 timr = lock_timer(timer_id, &flags); in do_timer_gettime()
703 if (!timr) in do_timer_gettime()
707 kc = timr->kclock; in do_timer_gettime()
711 kc->timer_get(timr, setting); in do_timer_gettime()
713 unlock_timer(timr, flags); in do_timer_gettime()
759 struct k_itimer *timr; in SYSCALL_DEFINE1() local
763 timr = lock_timer(timer_id, &flags); in SYSCALL_DEFINE1()
764 if (!timr) in SYSCALL_DEFINE1()
767 overrun = timer_overrun_to_int(timr, 0); in SYSCALL_DEFINE1()
768 unlock_timer(timr, flags); in SYSCALL_DEFINE1()
773 static void common_hrtimer_arm(struct k_itimer *timr, ktime_t expires, in common_hrtimer_arm() argument
776 struct hrtimer *timer = &timr->it.real.timer; in common_hrtimer_arm()
789 if (timr->it_clock == CLOCK_REALTIME) in common_hrtimer_arm()
790 timr->kclock = absolute ? &clock_realtime : &clock_monotonic; in common_hrtimer_arm()
792 hrtimer_init(&timr->it.real.timer, timr->it_clock, mode); in common_hrtimer_arm()
793 timr->it.real.timer.function = posix_timer_fn; in common_hrtimer_arm()
803 static int common_hrtimer_try_to_cancel(struct k_itimer *timr) in common_hrtimer_try_to_cancel() argument
805 return hrtimer_try_to_cancel(&timr->it.real.timer); in common_hrtimer_try_to_cancel()
838 int common_timer_set(struct k_itimer *timr, int flags, in common_timer_set() argument
842 const struct k_clock *kc = timr->kclock; in common_timer_set()
847 common_timer_get(timr, old_setting); in common_timer_set()
850 timr->it_interval = 0; in common_timer_set()
855 if (kc->timer_try_to_cancel(timr) < 0) in common_timer_set()
858 timr->it_active = 0; in common_timer_set()
859 timr->it_requeue_pending = (timr->it_requeue_pending + 2) & in common_timer_set()
861 timr->it_overrun_last = 0; in common_timer_set()
867 timr->it_interval = timespec64_to_ktime(new_setting->it_interval); in common_timer_set()
869 sigev_none = timr->it_sigev_notify == SIGEV_NONE; in common_timer_set()
871 kc->timer_arm(timr, expires, flags & TIMER_ABSTIME, sigev_none); in common_timer_set()
872 timr->it_active = !sigev_none; in common_timer_set()
881 struct k_itimer *timr; in do_timer_settime() local
892 timr = lock_timer(timer_id, &flags); in do_timer_settime()
894 if (!timr) in do_timer_settime()
897 kc = timr->kclock; in do_timer_settime()
901 error = kc->timer_set(timr, tmr_flags, new_spec64, old_spec64); in do_timer_settime()
907 timr = timer_wait_running(timr, &flags); in do_timer_settime()
910 unlock_timer(timr, flags); in do_timer_settime()