* If the excluded timer is the first on this base evaluate the
* next timer.
*/
- struct timerqueue_node *node = timerqueue_getnext(&base->active);
+ struct timerqueue_linked_node *node = timerqueue_linked_first(&base->active);
if (unlikely(&exclude->node == node)) {
- node = timerqueue_iterate_next(node);
+ node = timerqueue_linked_next(node);
if (!node)
continue;
expires = ktime_sub(node->expires, base->offset);
static __always_inline struct hrtimer *clock_base_next_timer(struct hrtimer_clock_base *base)
{
- struct timerqueue_node *next = timerqueue_getnext(&base->active);
+ struct timerqueue_linked_node *next = timerqueue_linked_first(&base->active);
return container_of(next, struct hrtimer, node);
}
active &= cpu_base->active_bases;
for_each_active_base(base, cpu_base, active) {
- struct timerqueue_node *next;
+ struct timerqueue_linked_node *next;
- next = timerqueue_getnext(&base->active);
+ next = timerqueue_linked_first(&base->active);
expires = ktime_sub(next->expires, base->offset);
if (expires < cpu_base->expires_next)
return true;
/* Pairs with the lockless read in hrtimer_is_queued() */
WRITE_ONCE(timer->is_queued, HRTIMER_STATE_ENQUEUED);
- if (!timerqueue_add(&base->active, &timer->node))
+ if (!timerqueue_linked_add(&base->active, &timer->node))
return false;
base->expires_next = hrtimer_get_expires(timer);
static inline void base_update_next_timer(struct hrtimer_clock_base *base)
{
- struct timerqueue_node *next = timerqueue_getnext(&base->active);
+ struct timerqueue_linked_node *next = timerqueue_linked_first(&base->active);
base->expires_next = next ? next->expires : KTIME_MAX;
}
/* Pairs with the lockless read in hrtimer_is_queued() */
WRITE_ONCE(timer->is_queued, newstate);
- was_first = &timer->node == timerqueue_getnext(&base->active);
+ was_first = !timerqueue_linked_prev(&timer->node);
- if (!timerqueue_del(&base->active, &timer->node))
+ if (!timerqueue_linked_del(&base->active, &timer->node))
cpu_base->active_bases &= ~(1 << base->index);
/* Nothing to update if this was not the first timer in the base */
/* Remove it from the timer queue if active */
if (timer->is_queued) {
debug_hrtimer_deactivate(timer);
- was_first = &timer->node == timerqueue_getnext(&base->active);
- timerqueue_del(&base->active, &timer->node);
+ was_first = !timerqueue_linked_prev(&timer->node);
+ timerqueue_linked_del(&base->active, &timer->node);
}
/* Set the new expiry time */
WRITE_ONCE(timer->is_queued, HRTIMER_STATE_ENQUEUED);
/* If it's the first expiring timer now or again, update base */
- if (timerqueue_add(&base->active, &timer->node)) {
+ if (timerqueue_linked_add(&base->active, &timer->node)) {
base->expires_next = expires;
return true;
}
timer->is_hard = !!(mode & HRTIMER_MODE_HARD);
timer->is_lazy = !!(mode & HRTIMER_MODE_LAZY_REARM);
timer->base = &cpu_base->clock_base[base];
- timerqueue_init(&timer->node);
+ timerqueue_linked_init(&timer->node);
if (WARN_ON_ONCE(!fn))
ACCESS_PRIVATE(timer, function) = hrtimer_dummy_timeout;
static __always_inline struct hrtimer *clock_base_next_timer_safe(struct hrtimer_clock_base *base)
{
- struct timerqueue_node *next = timerqueue_getnext(&base->active);
+ struct timerqueue_linked_node *next = timerqueue_linked_first(&base->active);
return next ? container_of(next, struct hrtimer, node) : NULL;
}
clock_b->cpu_base = cpu_base;
seqcount_raw_spinlock_init(&clock_b->seq, &cpu_base->lock);
- timerqueue_init_head(&clock_b->active);
+ timerqueue_linked_init_head(&clock_b->active);
}
cpu_base->cpu = cpu;
static void migrate_hrtimer_list(struct hrtimer_clock_base *old_base,
struct hrtimer_clock_base *new_base)
{
- struct timerqueue_node *node;
+ struct timerqueue_linked_node *node;
struct hrtimer *timer;
- while ((node = timerqueue_getnext(&old_base->active))) {
+ while ((node = timerqueue_linked_first(&old_base->active))) {
timer = container_of(node, struct hrtimer, node);
BUG_ON(hrtimer_callback_running(timer));
debug_hrtimer_deactivate(timer);
(long long)(ktime_to_ns(hrtimer_get_expires(timer)) - now));
}
-static void
-print_active_timers(struct seq_file *m, struct hrtimer_clock_base *base,
- u64 now)
+static void print_active_timers(struct seq_file *m, struct hrtimer_clock_base *base, u64 now)
{
+ struct timerqueue_linked_node *curr;
struct hrtimer *timer, tmp;
unsigned long next = 0, i;
- struct timerqueue_node *curr;
unsigned long flags;
next_one:
raw_spin_lock_irqsave(&base->cpu_base->lock, flags);
- curr = timerqueue_getnext(&base->active);
+ curr = timerqueue_linked_first(&base->active);
/*
* Crude but we have to do this O(N*N) thing, because
* we have to unlock the base when printing:
*/
while (curr && i < next) {
- curr = timerqueue_iterate_next(curr);
+ curr = timerqueue_linked_next(curr);
i++;
}