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
14#include <linux/rbtree.h>14#include <linux/rbtree.h>
15#include <linux/export.h>15#include <linux/export.h>
16 16
17#define __node_2_tq(_n) \
18 rb_entry((_n), struct timerqueue_node, node)
19
20static 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
17/**25/**
18 * timerqueue_add - Adds timer to timerqueue.26 * timerqueue_add - Adds timer to timerqueue.
19 *27 *
@@ -26,28 +34,10 @@ · 6 unmodified lines
26 */34 */
27bool timerqueue_add(struct timerqueue_head *head, struct timerqueue_node *node)35bool timerqueue_add(struct timerqueue_head *head, struct timerqueue_node *node)
28{36{
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
34 /* Make sure we don't add nodes that are already added */37 /* Make sure we don't add nodes that are already added */
35 WARN_ON_ONCE(!RB_EMPTY_NODE(&node->node));38 WARN_ON_ONCE(!RB_EMPTY_NODE(&node->node));
36 39
37 while (*p) {40 return rb_add_cached(&node->node, &head->rb_root, __timerqueue_less);
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;
51}41}
52EXPORT_SYMBOL_GPL(timerqueue_add);42EXPORT_SYMBOL_GPL(timerqueue_add);
53 43