Skip to content

Commit

Permalink
rbtree, timerqueue: Use rb_add_cached()
Browse files Browse the repository at this point in the history
Reduce rbtree boiler plate by using the new helpers.

Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
Signed-off-by: Ingo Molnar <[email protected]>
Acked-by: Davidlohr Bueso <[email protected]>
  • Loading branch information
Peter Zijlstra authored and Ingo Molnar committed Feb 17, 2021
1 parent 5a79872 commit 798172b
Showing 1 changed file with 9 additions and 19 deletions.
28 changes: 9 additions & 19 deletions lib/timerqueue.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,14 @@
#include <linux/rbtree.h>
#include <linux/export.h>

#define __node_2_tq(_n) \
rb_entry((_n), struct timerqueue_node, node)

static inline bool __timerqueue_less(struct rb_node *a, const struct rb_node *b)
{
return __node_2_tq(a)->expires < __node_2_tq(b)->expires;
}

/**
* timerqueue_add - Adds timer to timerqueue.
*
Expand All @@ -26,28 +34,10 @@
*/
bool timerqueue_add(struct timerqueue_head *head, struct timerqueue_node *node)
{
struct rb_node **p = &head->rb_root.rb_root.rb_node;
struct rb_node *parent = NULL;
struct timerqueue_node *ptr;
bool leftmost = true;

/* Make sure we don't add nodes that are already added */
WARN_ON_ONCE(!RB_EMPTY_NODE(&node->node));

while (*p) {
parent = *p;
ptr = rb_entry(parent, struct timerqueue_node, node);
if (node->expires < ptr->expires) {
p = &(*p)->rb_left;
} else {
p = &(*p)->rb_right;
leftmost = false;
}
}
rb_link_node(&node->node, parent, p);
rb_insert_color_cached(&node->node, &head->rb_root, leftmost);

return leftmost;
return rb_add_cached(&node->node, &head->rb_root, __timerqueue_less);
}
EXPORT_SYMBOL_GPL(timerqueue_add);

Expand Down

0 comments on commit 798172b

Please sign in to comment.