History

rbtree, timerqueue: Use rb_add_cached()

Reduce rbtree boiler plate by using the new helpers.

Peter Zijlstra committed 6 years ago

Commit 798172b1 parent 5a798721 file · +9 −19Browse files

Showing the changes to lib/timerqueue.c (1 of 1 file). Show all

Unified · Split

lib/timerqueue.c+9−19
@@ -14,6 +14,14 @@ · 13 unmodified lines
1414 #include <linux/rbtree.h>
1515 #include <linux/export.h>
1616
17+#define __node_2_tq(_n) \
18+ rb_entry((_n), struct timerqueue_node, node)
19+
20+static inline bool __timerqueue_less(struct rb_node *a, const struct rb_node *b)
21+{
22+ return __node_2_tq(a)->expires < __node_2_tq(b)->expires;
23+}
24+
1725 /**
1826 * timerqueue_add - Adds timer to timerqueue.
1927 *
@@ -26,28 +34,10 @@ · 6 unmodified lines
2634 */
2735 bool timerqueue_add(struct timerqueue_head *head, struct timerqueue_node *node)
2836 {
29− struct rb_node **p = &head->rb_root.rb_root.rb_node;
30− struct rb_node *parent = NULL;
31− struct timerqueue_node *ptr;
32− bool leftmost = true;
33−
3437 /* Make sure we don't add nodes that are already added */
3538 WARN_ON_ONCE(!RB_EMPTY_NODE(&node->node));
3639
37− while (*p) {
38− parent = *p;
39− ptr = rb_entry(parent, struct timerqueue_node, node);
40− if (node->expires < ptr->expires) {
41− p = &(*p)->rb_left;
42− } else {
43− p = &(*p)->rb_right;
44− leftmost = false;
45− }
46− }
47− rb_link_node(&node->node, parent, p);
48− rb_insert_color_cached(&node->node, &head->rb_root, leftmost);
49−
50− return leftmost;
40+ return rb_add_cached(&node->node, &head->rb_root, __timerqueue_less);
5141 }
5242 EXPORT_SYMBOL_GPL(timerqueue_add);
5343