Lines Matching refs:timr
77 static inline void unlock_timer(struct k_itimer *timr) in unlock_timer() argument
79 if (likely((timr))) in unlock_timer()
80 spin_unlock_irq(&timr->it_lock); in unlock_timer()
298 static inline int timer_overrun_to_int(struct k_itimer *timr) in timer_overrun_to_int() argument
300 if (timr->it_overrun_last > (s64)INT_MAX) in timer_overrun_to_int()
303 return (int)timr->it_overrun_last; in timer_overrun_to_int()
306 static void common_hrtimer_rearm(struct k_itimer *timr) in common_hrtimer_rearm() argument
308 struct hrtimer *timer = &timr->it.real.timer; in common_hrtimer_rearm()
310 timr->it_overrun += hrtimer_forward(timer, timer->base->get_time(), in common_hrtimer_rearm()
311 timr->it_interval); in common_hrtimer_rearm()
315 static bool __posixtimer_deliver_signal(struct kernel_siginfo *info, struct k_itimer *timr) in __posixtimer_deliver_signal() argument
317 guard(spinlock)(&timr->it_lock); in __posixtimer_deliver_signal()
324 if (timr->it_signal_seq != timr->it_sigqueue_seq || WARN_ON_ONCE(!posixtimer_valid(timr))) in __posixtimer_deliver_signal()
327 if (!timr->it_interval || WARN_ON_ONCE(timr->it_status != POSIX_TIMER_REQUEUE_PENDING)) in __posixtimer_deliver_signal()
330 timr->kclock->timer_rearm(timr); in __posixtimer_deliver_signal()
331 timr->it_status = POSIX_TIMER_ARMED; in __posixtimer_deliver_signal()
332 timr->it_overrun_last = timr->it_overrun; in __posixtimer_deliver_signal()
333 timr->it_overrun = -1LL; in __posixtimer_deliver_signal()
334 ++timr->it_signal_seq; in __posixtimer_deliver_signal()
335 info->si_overrun = timer_overrun_to_int(timr); in __posixtimer_deliver_signal()
347 struct k_itimer *timr = container_of(timer_sigq, struct k_itimer, sigq); in posixtimer_deliver_signal() local
356 ret = __posixtimer_deliver_signal(info, timr); in posixtimer_deliver_signal()
359 posixtimer_putref(timr); in posixtimer_deliver_signal()
365 void posix_timer_queue_signal(struct k_itimer *timr) in posix_timer_queue_signal() argument
367 lockdep_assert_held(&timr->it_lock); in posix_timer_queue_signal()
369 if (!posixtimer_valid(timr)) in posix_timer_queue_signal()
372 timr->it_status = timr->it_interval ? POSIX_TIMER_REQUEUE_PENDING : POSIX_TIMER_DISARMED; in posix_timer_queue_signal()
373 posixtimer_send_sigqueue(timr); in posix_timer_queue_signal()
385 struct k_itimer *timr = container_of(timer, struct k_itimer, it.real.timer); in posix_timer_fn() local
387 guard(spinlock_irqsave)(&timr->it_lock); in posix_timer_fn()
388 posix_timer_queue_signal(timr); in posix_timer_fn()
614 struct k_itimer *timr; in __lock_timer() local
652 timr = posix_timer_by_id(timer_id); in __lock_timer()
653 if (timr) { in __lock_timer()
654 spin_lock_irq(&timr->it_lock); in __lock_timer()
659 if (timr->it_signal == current->signal) in __lock_timer()
660 return timr; in __lock_timer()
661 spin_unlock_irq(&timr->it_lock); in __lock_timer()
666 static ktime_t common_hrtimer_remaining(struct k_itimer *timr, ktime_t now) in common_hrtimer_remaining() argument
668 struct hrtimer *timer = &timr->it.real.timer; in common_hrtimer_remaining()
673 static s64 common_hrtimer_forward(struct k_itimer *timr, ktime_t now) in common_hrtimer_forward() argument
675 struct hrtimer *timer = &timr->it.real.timer; in common_hrtimer_forward()
677 return hrtimer_forward(timer, now, timr->it_interval); in common_hrtimer_forward()
692 void common_timer_get(struct k_itimer *timr, struct itimerspec64 *cur_setting) in common_timer_get() argument
694 const struct k_clock *kc = timr->kclock; in common_timer_get()
698 sig_none = timr->it_sigev_notify == SIGEV_NONE; in common_timer_get()
699 iv = timr->it_interval; in common_timer_get()
704 } else if (timr->it_status == POSIX_TIMER_DISARMED) { in common_timer_get()
717 now = kc->clock_get_ktime(timr->it_clock); in common_timer_get()
724 if (iv && timr->it_status != POSIX_TIMER_ARMED) in common_timer_get()
725 timr->it_overrun += kc->timer_forward(timr, now); in common_timer_get()
727 remaining = kc->timer_remaining(timr, now); in common_timer_get()
814 static void common_hrtimer_arm(struct k_itimer *timr, ktime_t expires, in common_hrtimer_arm() argument
817 struct hrtimer *timer = &timr->it.real.timer; in common_hrtimer_arm()
830 if (timr->it_clock == CLOCK_REALTIME) in common_hrtimer_arm()
831 timr->kclock = absolute ? &clock_realtime : &clock_monotonic; in common_hrtimer_arm()
833 hrtimer_setup(&timr->it.real.timer, posix_timer_fn, timr->it_clock, mode); in common_hrtimer_arm()
843 static int common_hrtimer_try_to_cancel(struct k_itimer *timr) in common_hrtimer_try_to_cancel() argument
845 return hrtimer_try_to_cancel(&timr->it.real.timer); in common_hrtimer_try_to_cancel()
892 int common_timer_set(struct k_itimer *timr, int flags, in common_timer_set() argument
896 const struct k_clock *kc = timr->kclock; in common_timer_set()
901 common_timer_get(timr, old_setting); in common_timer_set()
907 if (kc->timer_try_to_cancel(timr) < 0) in common_timer_set()
910 timr->it_status = POSIX_TIMER_DISARMED; in common_timer_set()
911 posix_timer_set_common(timr, new_setting); in common_timer_set()
919 expires = timens_ktime_to_host(timr->it_clock, expires); in common_timer_set()
920 sigev_none = timr->it_sigev_notify == SIGEV_NONE; in common_timer_set()
922 kc->timer_arm(timr, expires, flags & TIMER_ABSTIME, sigev_none); in common_timer_set()
924 timr->it_status = POSIX_TIMER_ARMED; in common_timer_set()
939 struct k_itimer *timr; in do_timer_settime() local
942 timr = scoped_timer; in do_timer_settime()
945 old_spec64->it_interval = ktime_to_timespec64(timr->it_interval); in do_timer_settime()
948 timr->it_signal_seq++; in do_timer_settime()
950 int ret = timr->kclock->timer_set(timr, tmr_flags, new_spec64, old_spec64); in do_timer_settime()
957 timer_wait_running(timr); in do_timer_settime()