diff options
Diffstat (limited to 'include/linux/timerqueue.h')
-rw-r--r-- | include/linux/timerqueue.h | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/include/linux/timerqueue.h b/include/linux/timerqueue.h index 78b8cc73f12f..93884086f392 100644 --- a/include/linux/timerqueue.h +++ b/include/linux/timerqueue.h | |||
@@ -12,8 +12,7 @@ struct timerqueue_node { | |||
12 | }; | 12 | }; |
13 | 13 | ||
14 | struct timerqueue_head { | 14 | struct timerqueue_head { |
15 | struct rb_root head; | 15 | struct rb_root_cached rb_root; |
16 | struct timerqueue_node *next; | ||
17 | }; | 16 | }; |
18 | 17 | ||
19 | 18 | ||
@@ -29,13 +28,14 @@ extern struct timerqueue_node *timerqueue_iterate_next( | |||
29 | * | 28 | * |
30 | * @head: head of timerqueue | 29 | * @head: head of timerqueue |
31 | * | 30 | * |
32 | * Returns a pointer to the timer node that has the | 31 | * Returns a pointer to the timer node that has the earliest expiration time. |
33 | * earliest expiration time. | ||
34 | */ | 32 | */ |
35 | static inline | 33 | static inline |
36 | struct timerqueue_node *timerqueue_getnext(struct timerqueue_head *head) | 34 | struct timerqueue_node *timerqueue_getnext(struct timerqueue_head *head) |
37 | { | 35 | { |
38 | return head->next; | 36 | struct rb_node *leftmost = rb_first_cached(&head->rb_root); |
37 | |||
38 | return rb_entry(leftmost, struct timerqueue_node, node); | ||
39 | } | 39 | } |
40 | 40 | ||
41 | static inline void timerqueue_init(struct timerqueue_node *node) | 41 | static inline void timerqueue_init(struct timerqueue_node *node) |
@@ -43,9 +43,18 @@ static inline void timerqueue_init(struct timerqueue_node *node) | |||
43 | RB_CLEAR_NODE(&node->node); | 43 | RB_CLEAR_NODE(&node->node); |
44 | } | 44 | } |
45 | 45 | ||
46 | static inline bool timerqueue_node_queued(struct timerqueue_node *node) | ||
47 | { | ||
48 | return !RB_EMPTY_NODE(&node->node); | ||
49 | } | ||
50 | |||
51 | static inline bool timerqueue_node_expires(struct timerqueue_node *node) | ||
52 | { | ||
53 | return node->expires; | ||
54 | } | ||
55 | |||
46 | static inline void timerqueue_init_head(struct timerqueue_head *head) | 56 | static inline void timerqueue_init_head(struct timerqueue_head *head) |
47 | { | 57 | { |
48 | head->head = RB_ROOT; | 58 | head->rb_root = RB_ROOT_CACHED; |
49 | head->next = NULL; | ||
50 | } | 59 | } |
51 | #endif /* _LINUX_TIMERQUEUE_H */ | 60 | #endif /* _LINUX_TIMERQUEUE_H */ |