Lines Matching refs:alarm

163 static void alarmtimer_enqueue(struct alarm_base *base, struct alarm *alarm)  in alarmtimer_enqueue()  argument
165 if (alarm->state & ALARMTIMER_STATE_ENQUEUED) in alarmtimer_enqueue()
166 timerqueue_del(&base->timerqueue, &alarm->node); in alarmtimer_enqueue()
168 timerqueue_add(&base->timerqueue, &alarm->node); in alarmtimer_enqueue()
169 alarm->state |= ALARMTIMER_STATE_ENQUEUED; in alarmtimer_enqueue()
181 static void alarmtimer_dequeue(struct alarm_base *base, struct alarm *alarm) in alarmtimer_dequeue() argument
183 if (!(alarm->state & ALARMTIMER_STATE_ENQUEUED)) in alarmtimer_dequeue()
186 timerqueue_del(&base->timerqueue, &alarm->node); in alarmtimer_dequeue()
187 alarm->state &= ~ALARMTIMER_STATE_ENQUEUED; in alarmtimer_dequeue()
202 struct alarm *alarm = container_of(timer, struct alarm, timer); in alarmtimer_fired() local
203 struct alarm_base *base = &alarm_bases[alarm->type]; in alarmtimer_fired()
209 alarmtimer_dequeue(base, alarm); in alarmtimer_fired()
212 if (alarm->function) in alarmtimer_fired()
213 restart = alarm->function(alarm, base->gettime()); in alarmtimer_fired()
217 hrtimer_set_expires(&alarm->timer, alarm->node.expires); in alarmtimer_fired()
218 alarmtimer_enqueue(base, alarm); in alarmtimer_fired()
223 trace_alarmtimer_fired(alarm, base->gettime()); in alarmtimer_fired()
228 ktime_t alarm_expires_remaining(const struct alarm *alarm) in alarm_expires_remaining() argument
230 struct alarm_base *base = &alarm_bases[alarm->type]; in alarm_expires_remaining()
231 return ktime_sub(alarm->node.expires, base->gettime()); in alarm_expires_remaining()
330 __alarm_init(struct alarm *alarm, enum alarmtimer_type type, in __alarm_init() argument
331 enum alarmtimer_restart (*function)(struct alarm *, ktime_t)) in __alarm_init() argument
333 timerqueue_init(&alarm->node); in __alarm_init()
334 alarm->timer.function = alarmtimer_fired; in __alarm_init()
335 alarm->function = function; in __alarm_init()
336 alarm->type = type; in __alarm_init()
337 alarm->state = ALARMTIMER_STATE_INACTIVE; in __alarm_init()
346 void alarm_init(struct alarm *alarm, enum alarmtimer_type type, in alarm_init() argument
347 enum alarmtimer_restart (*function)(struct alarm *, ktime_t)) in alarm_init() argument
349 hrtimer_init(&alarm->timer, alarm_bases[type].base_clockid, in alarm_init()
351 __alarm_init(alarm, type, function); in alarm_init()
360 void alarm_start(struct alarm *alarm, ktime_t start) in alarm_start() argument
362 struct alarm_base *base = &alarm_bases[alarm->type]; in alarm_start()
366 alarm->node.expires = start; in alarm_start()
367 alarmtimer_enqueue(base, alarm); in alarm_start()
368 hrtimer_start(&alarm->timer, alarm->node.expires, HRTIMER_MODE_ABS); in alarm_start()
371 trace_alarmtimer_start(alarm, base->gettime()); in alarm_start()
380 void alarm_start_relative(struct alarm *alarm, ktime_t start) in alarm_start_relative() argument
382 struct alarm_base *base = &alarm_bases[alarm->type]; in alarm_start_relative()
385 alarm_start(alarm, start); in alarm_start_relative()
389 void alarm_restart(struct alarm *alarm) in alarm_restart() argument
391 struct alarm_base *base = &alarm_bases[alarm->type]; in alarm_restart()
395 hrtimer_set_expires(&alarm->timer, alarm->node.expires); in alarm_restart()
396 hrtimer_restart(&alarm->timer); in alarm_restart()
397 alarmtimer_enqueue(base, alarm); in alarm_restart()
409 int alarm_try_to_cancel(struct alarm *alarm) in alarm_try_to_cancel() argument
411 struct alarm_base *base = &alarm_bases[alarm->type]; in alarm_try_to_cancel()
416 ret = hrtimer_try_to_cancel(&alarm->timer); in alarm_try_to_cancel()
418 alarmtimer_dequeue(base, alarm); in alarm_try_to_cancel()
421 trace_alarmtimer_cancel(alarm, base->gettime()); in alarm_try_to_cancel()
433 int alarm_cancel(struct alarm *alarm) in alarm_cancel() argument
436 int ret = alarm_try_to_cancel(alarm); in alarm_cancel()
445 u64 alarm_forward(struct alarm *alarm, ktime_t now, ktime_t interval) in alarm_forward() argument
450 delta = ktime_sub(now, alarm->node.expires); in alarm_forward()
460 alarm->node.expires = ktime_add_ns(alarm->node.expires, in alarm_forward()
463 if (alarm->node.expires > now) in alarm_forward()
472 alarm->node.expires = ktime_add_safe(alarm->node.expires, interval); in alarm_forward()
477 u64 alarm_forward_now(struct alarm *alarm, ktime_t interval) in alarm_forward_now() argument
479 struct alarm_base *base = &alarm_bases[alarm->type]; in alarm_forward_now()
481 return alarm_forward(alarm, base->gettime(), interval); in alarm_forward_now()
537 static enum alarmtimer_restart alarm_handle_timer(struct alarm *alarm, in alarm_handle_timer() argument
540 struct k_itimer *ptr = container_of(alarm, struct k_itimer, in alarm_handle_timer()
541 it.alarm.alarmtimer); in alarm_handle_timer()
557 ptr->it_overrun += alarm_forward_now(alarm, ptr->it_interval); in alarm_handle_timer()
573 struct alarm *alarm = &timr->it.alarm.alarmtimer; in alarm_timer_rearm() local
575 timr->it_overrun += alarm_forward_now(alarm, timr->it_interval); in alarm_timer_rearm()
576 alarm_start(alarm, alarm->node.expires); in alarm_timer_rearm()
586 struct alarm *alarm = &timr->it.alarm.alarmtimer; in alarm_timer_forward() local
588 return alarm_forward(alarm, timr->it_interval, now); in alarm_timer_forward()
598 struct alarm *alarm = &timr->it.alarm.alarmtimer; in alarm_timer_remaining() local
600 return ktime_sub(now, alarm->node.expires); in alarm_timer_remaining()
609 return alarm_try_to_cancel(&timr->it.alarm.alarmtimer); in alarm_timer_try_to_cancel()
622 struct alarm *alarm = &timr->it.alarm.alarmtimer; in alarm_timer_arm() local
623 struct alarm_base *base = &alarm_bases[alarm->type]; in alarm_timer_arm()
628 alarm->node.expires = expires; in alarm_timer_arm()
630 alarm_start(&timr->it.alarm.alarmtimer, expires); in alarm_timer_arm()
685 alarm_init(&new_timer->it.alarm.alarmtimer, type, alarm_handle_timer); in alarm_timer_create()
695 static enum alarmtimer_restart alarmtimer_nsleep_wakeup(struct alarm *alarm, in alarmtimer_nsleep_wakeup() argument
698 struct task_struct *task = (struct task_struct *)alarm->data; in alarmtimer_nsleep_wakeup()
700 alarm->data = NULL; in alarmtimer_nsleep_wakeup()
713 static int alarmtimer_do_nsleep(struct alarm *alarm, ktime_t absexp, in alarmtimer_do_nsleep() argument
717 alarm->data = (void *)current; in alarmtimer_do_nsleep()
720 alarm_start(alarm, absexp); in alarmtimer_do_nsleep()
721 if (likely(alarm->data)) in alarmtimer_do_nsleep()
724 alarm_cancel(alarm); in alarmtimer_do_nsleep()
725 } while (alarm->data && !signal_pending(current)); in alarmtimer_do_nsleep()
729 destroy_hrtimer_on_stack(&alarm->timer); in alarmtimer_do_nsleep()
731 if (!alarm->data) in alarmtimer_do_nsleep()
753 alarm_init_on_stack(struct alarm *alarm, enum alarmtimer_type type, in alarm_init_on_stack() argument
754 enum alarmtimer_restart (*function)(struct alarm *, ktime_t)) in alarm_init_on_stack() argument
756 hrtimer_init_on_stack(&alarm->timer, alarm_bases[type].base_clockid, in alarm_init_on_stack()
758 __alarm_init(alarm, type, function); in alarm_init_on_stack()
771 struct alarm alarm; in alarm_timer_nsleep_restart() local
773 alarm_init_on_stack(&alarm, type, alarmtimer_nsleep_wakeup); in alarm_timer_nsleep_restart()
775 return alarmtimer_do_nsleep(&alarm, exp, type); in alarm_timer_nsleep_restart()
792 struct alarm alarm; in alarm_timer_nsleep() local
805 alarm_init_on_stack(&alarm, type, alarmtimer_nsleep_wakeup); in alarm_timer_nsleep()
815 ret = alarmtimer_do_nsleep(&alarm, exp, type); in alarm_timer_nsleep()