Lines Matching refs:alarm
138 static void alarmtimer_enqueue(struct alarm_base *base, struct alarm *alarm) in alarmtimer_enqueue() argument
140 if (alarm->state & ALARMTIMER_STATE_ENQUEUED) in alarmtimer_enqueue()
141 timerqueue_del(&base->timerqueue, &alarm->node); in alarmtimer_enqueue()
143 timerqueue_add(&base->timerqueue, &alarm->node); in alarmtimer_enqueue()
144 alarm->state |= ALARMTIMER_STATE_ENQUEUED; in alarmtimer_enqueue()
156 static void alarmtimer_dequeue(struct alarm_base *base, struct alarm *alarm) in alarmtimer_dequeue() argument
158 if (!(alarm->state & ALARMTIMER_STATE_ENQUEUED)) in alarmtimer_dequeue()
161 timerqueue_del(&base->timerqueue, &alarm->node); in alarmtimer_dequeue()
162 alarm->state &= ~ALARMTIMER_STATE_ENQUEUED; in alarmtimer_dequeue()
177 struct alarm *alarm = container_of(timer, struct alarm, timer); in alarmtimer_fired() local
178 struct alarm_base *base = &alarm_bases[alarm->type]; in alarmtimer_fired()
184 alarmtimer_dequeue(base, alarm); in alarmtimer_fired()
187 if (alarm->function) in alarmtimer_fired()
188 restart = alarm->function(alarm, base->gettime()); in alarmtimer_fired()
192 hrtimer_set_expires(&alarm->timer, alarm->node.expires); in alarmtimer_fired()
193 alarmtimer_enqueue(base, alarm); in alarmtimer_fired()
202 ktime_t alarm_expires_remaining(const struct alarm *alarm) in alarm_expires_remaining() argument
204 struct alarm_base *base = &alarm_bases[alarm->type]; in alarm_expires_remaining()
205 return ktime_sub(alarm->node.expires, base->gettime()); in alarm_expires_remaining()
302 void alarm_init(struct alarm *alarm, enum alarmtimer_type type, in alarm_init() argument
303 enum alarmtimer_restart (*function)(struct alarm *, ktime_t)) in alarm_init() argument
305 timerqueue_init(&alarm->node); in alarm_init()
306 hrtimer_init(&alarm->timer, alarm_bases[type].base_clockid, in alarm_init()
308 alarm->timer.function = alarmtimer_fired; in alarm_init()
309 alarm->function = function; in alarm_init()
310 alarm->type = type; in alarm_init()
311 alarm->state = ALARMTIMER_STATE_INACTIVE; in alarm_init()
320 void alarm_start(struct alarm *alarm, ktime_t start) in alarm_start() argument
322 struct alarm_base *base = &alarm_bases[alarm->type]; in alarm_start()
326 alarm->node.expires = start; in alarm_start()
327 alarmtimer_enqueue(base, alarm); in alarm_start()
328 hrtimer_start(&alarm->timer, alarm->node.expires, HRTIMER_MODE_ABS); in alarm_start()
338 void alarm_start_relative(struct alarm *alarm, ktime_t start) in alarm_start_relative() argument
340 struct alarm_base *base = &alarm_bases[alarm->type]; in alarm_start_relative()
343 alarm_start(alarm, start); in alarm_start_relative()
347 void alarm_restart(struct alarm *alarm) in alarm_restart() argument
349 struct alarm_base *base = &alarm_bases[alarm->type]; in alarm_restart()
353 hrtimer_set_expires(&alarm->timer, alarm->node.expires); in alarm_restart()
354 hrtimer_restart(&alarm->timer); in alarm_restart()
355 alarmtimer_enqueue(base, alarm); in alarm_restart()
367 int alarm_try_to_cancel(struct alarm *alarm) in alarm_try_to_cancel() argument
369 struct alarm_base *base = &alarm_bases[alarm->type]; in alarm_try_to_cancel()
374 ret = hrtimer_try_to_cancel(&alarm->timer); in alarm_try_to_cancel()
376 alarmtimer_dequeue(base, alarm); in alarm_try_to_cancel()
389 int alarm_cancel(struct alarm *alarm) in alarm_cancel() argument
392 int ret = alarm_try_to_cancel(alarm); in alarm_cancel()
401 u64 alarm_forward(struct alarm *alarm, ktime_t now, ktime_t interval) in alarm_forward() argument
406 delta = ktime_sub(now, alarm->node.expires); in alarm_forward()
416 alarm->node.expires = ktime_add_ns(alarm->node.expires, in alarm_forward()
419 if (alarm->node.expires.tv64 > now.tv64) in alarm_forward()
428 alarm->node.expires = ktime_add(alarm->node.expires, interval); in alarm_forward()
433 u64 alarm_forward_now(struct alarm *alarm, ktime_t interval) in alarm_forward_now() argument
435 struct alarm_base *base = &alarm_bases[alarm->type]; in alarm_forward_now()
437 return alarm_forward(alarm, base->gettime(), interval); in alarm_forward_now()
461 static enum alarmtimer_restart alarm_handle_timer(struct alarm *alarm, in alarm_handle_timer() argument
465 struct k_itimer *ptr = container_of(alarm, struct k_itimer, in alarm_handle_timer()
466 it.alarm.alarmtimer); in alarm_handle_timer()
476 if (ptr->it.alarm.interval.tv64) { in alarm_handle_timer()
477 ptr->it_overrun += alarm_forward(alarm, now, in alarm_handle_timer()
478 ptr->it.alarm.interval); in alarm_handle_timer()
540 alarm_init(&new_timer->it.alarm.alarmtimer, type, alarm_handle_timer); in alarm_timer_create()
555 alarm_expires_remaining(&(timr->it.alarm.alarmtimer)); in alarm_timer_get()
564 cur_setting->it_interval = ktime_to_timespec(timr->it.alarm.interval); in alarm_timer_get()
578 if (alarm_try_to_cancel(&timr->it.alarm.alarmtimer) < 0) in alarm_timer_del()
609 if (alarm_try_to_cancel(&timr->it.alarm.alarmtimer) < 0) in alarm_timer_set()
613 timr->it.alarm.interval = timespec_to_ktime(new_setting->it_interval); in alarm_timer_set()
619 now = alarm_bases[timr->it.alarm.alarmtimer.type].gettime(); in alarm_timer_set()
623 alarm_start(&timr->it.alarm.alarmtimer, exp); in alarm_timer_set()
633 static enum alarmtimer_restart alarmtimer_nsleep_wakeup(struct alarm *alarm, in alarmtimer_nsleep_wakeup() argument
636 struct task_struct *task = (struct task_struct *)alarm->data; in alarmtimer_nsleep_wakeup()
638 alarm->data = NULL; in alarmtimer_nsleep_wakeup()
651 static int alarmtimer_do_nsleep(struct alarm *alarm, ktime_t absexp) in alarmtimer_do_nsleep() argument
653 alarm->data = (void *)current; in alarmtimer_do_nsleep()
656 alarm_start(alarm, absexp); in alarmtimer_do_nsleep()
657 if (likely(alarm->data)) in alarmtimer_do_nsleep()
660 alarm_cancel(alarm); in alarmtimer_do_nsleep()
661 } while (alarm->data && !signal_pending(current)); in alarmtimer_do_nsleep()
665 return (alarm->data == NULL); in alarmtimer_do_nsleep()
708 struct alarm alarm; in alarm_timer_nsleep_restart() local
712 alarm_init(&alarm, type, alarmtimer_nsleep_wakeup); in alarm_timer_nsleep_restart()
714 if (alarmtimer_do_nsleep(&alarm, exp)) in alarm_timer_nsleep_restart()
747 struct alarm alarm; in alarm_timer_nsleep() local
761 alarm_init(&alarm, type, alarmtimer_nsleep_wakeup); in alarm_timer_nsleep()
770 if (alarmtimer_do_nsleep(&alarm, exp)) in alarm_timer_nsleep()