Lines Matching refs:timr

164 static inline void unlock_timer(struct k_itimer *timr, unsigned long flags)  in unlock_timer()  argument
166 spin_unlock_irqrestore(&timr->it_lock, flags); in unlock_timer()
286 static inline int timer_overrun_to_int(struct k_itimer *timr, int baseval) in timer_overrun_to_int() argument
288 s64 sum = timr->it_overrun_last + (s64)baseval; in timer_overrun_to_int()
293 static void common_hrtimer_rearm(struct k_itimer *timr) in common_hrtimer_rearm() argument
295 struct hrtimer *timer = &timr->it.real.timer; in common_hrtimer_rearm()
297 timr->it_overrun += hrtimer_forward(timer, timer->base->get_time(), in common_hrtimer_rearm()
298 timr->it_interval); in common_hrtimer_rearm()
315 struct k_itimer *timr; in posixtimer_rearm() local
318 timr = lock_timer(info->si_tid, &flags); in posixtimer_rearm()
319 if (!timr) in posixtimer_rearm()
322 if (timr->it_interval && timr->it_requeue_pending == info->si_sys_private) { in posixtimer_rearm()
323 timr->kclock->timer_rearm(timr); in posixtimer_rearm()
325 timr->it_active = 1; in posixtimer_rearm()
326 timr->it_overrun_last = timr->it_overrun; in posixtimer_rearm()
327 timr->it_overrun = -1LL; in posixtimer_rearm()
328 ++timr->it_requeue_pending; in posixtimer_rearm()
330 info->si_overrun = timer_overrun_to_int(timr, info->si_overrun); in posixtimer_rearm()
333 unlock_timer(timr, flags); in posixtimer_rearm()
336 int posix_timer_event(struct k_itimer *timr, int si_private) in posix_timer_event() argument
351 timr->sigq->info.si_sys_private = si_private; in posix_timer_event()
353 type = !(timr->it_sigev_notify & SIGEV_THREAD_ID) ? PIDTYPE_TGID : PIDTYPE_PID; in posix_timer_event()
354 ret = send_sigqueue(timr->sigq, timr->it_pid, type); in posix_timer_event()
368 struct k_itimer *timr; in posix_timer_fn() local
373 timr = container_of(timer, struct k_itimer, it.real.timer); in posix_timer_fn()
374 spin_lock_irqsave(&timr->it_lock, flags); in posix_timer_fn()
376 timr->it_active = 0; in posix_timer_fn()
377 if (timr->it_interval != 0) in posix_timer_fn()
378 si_private = ++timr->it_requeue_pending; in posix_timer_fn()
380 if (posix_timer_event(timr, si_private)) { in posix_timer_fn()
386 if (timr->it_interval != 0) { in posix_timer_fn()
415 if (timr->it_interval < kj) in posix_timer_fn()
419 timr->it_overrun += hrtimer_forward(timer, now, in posix_timer_fn()
420 timr->it_interval); in posix_timer_fn()
422 ++timr->it_requeue_pending; in posix_timer_fn()
423 timr->it_active = 1; in posix_timer_fn()
427 unlock_timer(timr, flags); in posix_timer_fn()
616 struct k_itimer *timr; in __lock_timer() local
626 timr = posix_timer_by_id(timer_id); in __lock_timer()
627 if (timr) { in __lock_timer()
628 spin_lock_irqsave(&timr->it_lock, *flags); in __lock_timer()
629 if (timr->it_signal == current->signal) { in __lock_timer()
631 return timr; in __lock_timer()
633 spin_unlock_irqrestore(&timr->it_lock, *flags); in __lock_timer()
640 static ktime_t common_hrtimer_remaining(struct k_itimer *timr, ktime_t now) in common_hrtimer_remaining() argument
642 struct hrtimer *timer = &timr->it.real.timer; in common_hrtimer_remaining()
647 static s64 common_hrtimer_forward(struct k_itimer *timr, ktime_t now) in common_hrtimer_forward() argument
649 struct hrtimer *timer = &timr->it.real.timer; in common_hrtimer_forward()
651 return hrtimer_forward(timer, now, timr->it_interval); in common_hrtimer_forward()
670 void common_timer_get(struct k_itimer *timr, struct itimerspec64 *cur_setting) in common_timer_get() argument
672 const struct k_clock *kc = timr->kclock; in common_timer_get()
676 sig_none = timr->it_sigev_notify == SIGEV_NONE; in common_timer_get()
677 iv = timr->it_interval; in common_timer_get()
682 } else if (!timr->it_active) { in common_timer_get()
691 now = kc->clock_get_ktime(timr->it_clock); in common_timer_get()
697 if (iv && (timr->it_requeue_pending & REQUEUE_PENDING || sig_none)) in common_timer_get()
698 timr->it_overrun += kc->timer_forward(timr, now); in common_timer_get()
700 remaining = kc->timer_remaining(timr, now); in common_timer_get()
717 struct k_itimer *timr; in do_timer_gettime() local
722 timr = lock_timer(timer_id, &flags); in do_timer_gettime()
723 if (!timr) in do_timer_gettime()
727 kc = timr->kclock; in do_timer_gettime()
731 kc->timer_get(timr, setting); in do_timer_gettime()
733 unlock_timer(timr, flags); in do_timer_gettime()
779 struct k_itimer *timr; in SYSCALL_DEFINE1() local
783 timr = lock_timer(timer_id, &flags); in SYSCALL_DEFINE1()
784 if (!timr) in SYSCALL_DEFINE1()
787 overrun = timer_overrun_to_int(timr, 0); in SYSCALL_DEFINE1()
788 unlock_timer(timr, flags); in SYSCALL_DEFINE1()
793 static void common_hrtimer_arm(struct k_itimer *timr, ktime_t expires, in common_hrtimer_arm() argument
796 struct hrtimer *timer = &timr->it.real.timer; in common_hrtimer_arm()
809 if (timr->it_clock == CLOCK_REALTIME) in common_hrtimer_arm()
810 timr->kclock = absolute ? &clock_realtime : &clock_monotonic; in common_hrtimer_arm()
812 hrtimer_init(&timr->it.real.timer, timr->it_clock, mode); in common_hrtimer_arm()
813 timr->it.real.timer.function = posix_timer_fn; in common_hrtimer_arm()
823 static int common_hrtimer_try_to_cancel(struct k_itimer *timr) in common_hrtimer_try_to_cancel() argument
825 return hrtimer_try_to_cancel(&timr->it.real.timer); in common_hrtimer_try_to_cancel()
858 int common_timer_set(struct k_itimer *timr, int flags, in common_timer_set() argument
862 const struct k_clock *kc = timr->kclock; in common_timer_set()
867 common_timer_get(timr, old_setting); in common_timer_set()
870 timr->it_interval = 0; in common_timer_set()
875 if (kc->timer_try_to_cancel(timr) < 0) in common_timer_set()
878 timr->it_active = 0; in common_timer_set()
879 timr->it_requeue_pending = (timr->it_requeue_pending + 2) & in common_timer_set()
881 timr->it_overrun_last = 0; in common_timer_set()
887 timr->it_interval = timespec64_to_ktime(new_setting->it_interval); in common_timer_set()
890 expires = timens_ktime_to_host(timr->it_clock, expires); in common_timer_set()
891 sigev_none = timr->it_sigev_notify == SIGEV_NONE; in common_timer_set()
893 kc->timer_arm(timr, expires, flags & TIMER_ABSTIME, sigev_none); in common_timer_set()
894 timr->it_active = !sigev_none; in common_timer_set()
903 struct k_itimer *timr; in do_timer_settime() local
914 timr = lock_timer(timer_id, &flags); in do_timer_settime()
916 if (!timr) in do_timer_settime()
919 kc = timr->kclock; in do_timer_settime()
923 error = kc->timer_set(timr, tmr_flags, new_spec64, old_spec64); in do_timer_settime()
929 timr = timer_wait_running(timr, &flags); in do_timer_settime()
932 unlock_timer(timr, flags); in do_timer_settime()