Lines Matching refs:alarm
6 * but triggers a RTC alarm if the box is suspend.
61 /* rtc timer and device for setting alarm wakeups at suspend */
141 * alarmtimer_enqueue - Adds an alarm timer to an alarm_base timerqueue
143 * @alarm: pointer to alarm being enqueued.
145 * Adds alarm to a alarm_base timerqueue
149 static void alarmtimer_enqueue(struct alarm_base *base, struct alarm *alarm)
151 if (alarm->state & ALARMTIMER_STATE_ENQUEUED)
152 timerqueue_del(&base->timerqueue, &alarm->node);
154 timerqueue_add(&base->timerqueue, &alarm->node);
155 alarm->state |= ALARMTIMER_STATE_ENQUEUED;
159 * alarmtimer_dequeue - Removes an alarm timer from an alarm_base timerqueue
161 * @alarm: pointer to alarm being removed
163 * Removes alarm to a alarm_base timerqueue
167 static void alarmtimer_dequeue(struct alarm_base *base, struct alarm *alarm)
169 if (!(alarm->state & ALARMTIMER_STATE_ENQUEUED))
172 timerqueue_del(&base->timerqueue, &alarm->node);
173 alarm->state &= ~ALARMTIMER_STATE_ENQUEUED;
178 * alarmtimer_fired - Handles alarm hrtimer being fired.
181 * When a alarm timer fires, this runs through the timerqueue to
182 * see which alarms expired, and runs those. If there are more alarm
184 * the next future alarm timer expires.
188 struct alarm *alarm = container_of(timer, struct alarm, timer);
189 struct alarm_base *base = &alarm_bases[alarm->type];
192 alarmtimer_dequeue(base, alarm);
194 if (alarm->function)
195 alarm->function(alarm, base->get_ktime());
197 trace_alarmtimer_fired(alarm, base->get_ktime());
201 ktime_t alarm_expires_remaining(const struct alarm *alarm)
203 struct alarm_base *base = &alarm_bases[alarm->type];
204 return ktime_sub(alarm->node.expires, base->get_ktime());
270 * If the RTC alarm timer only supports a limited time offset, set the
271 * alarm time to the maximum supported value.
281 /* Set alarm, if in the past reject suspend briefly to handle */
311 __alarm_init(struct alarm *alarm, enum alarmtimer_type type,
312 void (*function)(struct alarm *, ktime_t))
314 timerqueue_init(&alarm->node);
315 alarm->function = function;
316 alarm->type = type;
317 alarm->state = ALARMTIMER_STATE_INACTIVE;
321 * alarm_init - Initialize an alarm structure
322 * @alarm: ptr to alarm to be initialized
323 * @type: the type of the alarm
324 * @function: callback that is run when the alarm fires
326 void alarm_init(struct alarm *alarm, enum alarmtimer_type type,
327 void (*function)(struct alarm *, ktime_t))
329 hrtimer_setup(&alarm->timer, alarmtimer_fired, alarm_bases[type].base_clockid,
331 __alarm_init(alarm, type, function);
336 * alarm_start - Sets an absolute alarm to fire
337 * @alarm: ptr to alarm to set
338 * @start: time to run the alarm
340 void alarm_start(struct alarm *alarm, ktime_t start)
342 struct alarm_base *base = &alarm_bases[alarm->type];
345 alarm->node.expires = start;
346 alarmtimer_enqueue(base, alarm);
347 hrtimer_start(&alarm->timer, alarm->node.expires, HRTIMER_MODE_ABS);
350 trace_alarmtimer_start(alarm, base->get_ktime());
355 * alarm_start_relative - Sets a relative alarm to fire
356 * @alarm: ptr to alarm to set
357 * @start: time relative to now to run the alarm
359 void alarm_start_relative(struct alarm *alarm, ktime_t start)
361 struct alarm_base *base = &alarm_bases[alarm->type];
364 alarm_start(alarm, start);
368 void alarm_restart(struct alarm *alarm)
370 struct alarm_base *base = &alarm_bases[alarm->type];
373 hrtimer_set_expires(&alarm->timer, alarm->node.expires);
374 hrtimer_restart(&alarm->timer);
375 alarmtimer_enqueue(base, alarm);
380 * alarm_try_to_cancel - Tries to cancel an alarm timer
381 * @alarm: ptr to alarm to be canceled
386 int alarm_try_to_cancel(struct alarm *alarm)
388 struct alarm_base *base = &alarm_bases[alarm->type];
392 ret = hrtimer_try_to_cancel(&alarm->timer);
394 alarmtimer_dequeue(base, alarm);
397 trace_alarmtimer_cancel(alarm, base->get_ktime());
404 * alarm_cancel - Spins trying to cancel an alarm timer until it is done
405 * @alarm: ptr to alarm to be canceled
409 int alarm_cancel(struct alarm *alarm)
412 int ret = alarm_try_to_cancel(alarm);
415 hrtimer_cancel_wait_running(&alarm->timer);
421 u64 alarm_forward(struct alarm *alarm, ktime_t now, ktime_t interval)
426 delta = ktime_sub(now, alarm->node.expires);
436 alarm->node.expires = ktime_add_ns(alarm->node.expires,
439 if (alarm->node.expires > now)
448 alarm->node.expires = ktime_add_safe(alarm->node.expires, interval);
453 u64 alarm_forward_now(struct alarm *alarm, ktime_t interval)
455 struct alarm_base *base = &alarm_bases[alarm->type];
457 return alarm_forward(alarm, base->get_ktime(), interval);
478 WARN_ONCE(1, "Invalid alarm type: %d\n", type);
507 * @alarm: alarm that fired
510 * Posix timer callback for expired alarm timers.
514 static void alarm_handle_timer(struct alarm *alarm, ktime_t now)
516 struct k_itimer *ptr = container_of(alarm, struct k_itimer, it.alarm.alarmtimer);
528 struct alarm *alarm = &timr->it.alarm.alarmtimer;
530 timr->it_overrun += alarm_forward_now(alarm, timr->it_interval);
531 alarm_start(alarm, alarm->node.expires);
541 struct alarm *alarm = &timr->it.alarm.alarmtimer;
543 return alarm_forward(alarm, timr->it_interval, now);
553 struct alarm *alarm = &timr->it.alarm.alarmtimer;
555 return ktime_sub(alarm->node.expires, now);
564 return alarm_try_to_cancel(&timr->it.alarm.alarmtimer);
577 hrtimer_cancel_wait_running(&timr->it.alarm.alarmtimer.timer);
590 struct alarm *alarm = &timr->it.alarm.alarmtimer;
591 struct alarm_base *base = &alarm_bases[alarm->type];
596 alarm->node.expires = expires;
598 alarm_start(&timr->it.alarm.alarmtimer, expires);
606 * Returns the granularity of underlying alarm base clock
623 * Provides the underlying alarm base time in a tasks time namespace.
641 * Provides the underlying alarm base time in the root namespace.
670 alarm_init(&new_timer->it.alarm.alarmtimer, type, alarm_handle_timer);
676 * @alarm: ptr to alarm that fired
681 static void alarmtimer_nsleep_wakeup(struct alarm *alarm, ktime_t now)
683 struct task_struct *task = alarm->data;
685 alarm->data = NULL;
692 * @alarm: ptr to alarmtimer
694 * @type: alarm type (BOOTTIME/REALTIME).
696 * Sets the alarm timer and sleeps until it is fired or interrupted.
698 static int alarmtimer_do_nsleep(struct alarm *alarm, ktime_t absexp,
702 alarm->data = (void *)current;
705 alarm_start(alarm, absexp);
706 if (likely(alarm->data))
709 alarm_cancel(alarm);
710 } while (alarm->data && !signal_pending(current));
714 destroy_hrtimer_on_stack(&alarm->timer);
716 if (!alarm->data)
738 alarm_init_on_stack(struct alarm *alarm, enum alarmtimer_type type,
739 void (*function)(struct alarm *, ktime_t))
741 hrtimer_setup_on_stack(&alarm->timer, alarmtimer_fired, alarm_bases[type].base_clockid,
743 __alarm_init(alarm, type, function);
756 struct alarm alarm;
758 alarm_init_on_stack(&alarm, type, alarmtimer_nsleep_wakeup);
760 return alarmtimer_do_nsleep(&alarm, exp, type);
776 struct alarm alarm;
789 alarm_init_on_stack(&alarm, type, alarmtimer_nsleep_wakeup);
801 ret = alarmtimer_do_nsleep(&alarm, exp, type);
854 * alarmtimer_init - Initialize alarm timer code
856 * This function initializes the alarm bases and registers
866 /* Initialize alarm bases */