Commit | Line | Data |
---|---|---|
b2441318 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
1f5a2479 JS |
2 | #ifndef _LINUX_TIMERQUEUE_H |
3 | #define _LINUX_TIMERQUEUE_H | |
4 | ||
5 | #include <linux/rbtree.h> | |
6 | #include <linux/ktime.h> | |
7 | ||
8 | ||
9 | struct timerqueue_node { | |
10 | struct rb_node node; | |
11 | ktime_t expires; | |
12 | }; | |
13 | ||
14 | struct timerqueue_head { | |
511885d7 | 15 | struct rb_root_cached rb_root; |
1f5a2479 JS |
16 | }; |
17 | ||
18 | ||
c320642e TG |
19 | extern bool timerqueue_add(struct timerqueue_head *head, |
20 | struct timerqueue_node *node); | |
21 | extern bool timerqueue_del(struct timerqueue_head *head, | |
22 | struct timerqueue_node *node); | |
1f5a2479 JS |
23 | extern struct timerqueue_node *timerqueue_iterate_next( |
24 | struct timerqueue_node *node); | |
25 | ||
45f74264 | 26 | /** |
25985edc | 27 | * timerqueue_getnext - Returns the timer with the earliest expiration time |
45f74264 TG |
28 | * |
29 | * @head: head of timerqueue | |
30 | * | |
511885d7 | 31 | * Returns a pointer to the timer node that has the earliest expiration time. |
45f74264 TG |
32 | */ |
33 | static inline | |
34 | struct timerqueue_node *timerqueue_getnext(struct timerqueue_head *head) | |
35 | { | |
511885d7 DB |
36 | struct rb_node *leftmost = rb_first_cached(&head->rb_root); |
37 | ||
2f117484 | 38 | return rb_entry_safe(leftmost, struct timerqueue_node, node); |
45f74264 TG |
39 | } |
40 | ||
1f5a2479 JS |
41 | static inline void timerqueue_init(struct timerqueue_node *node) |
42 | { | |
4c199a93 | 43 | RB_CLEAR_NODE(&node->node); |
1f5a2479 JS |
44 | } |
45 | ||
60bda037 TG |
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 | ||
1f5a2479 JS |
56 | static inline void timerqueue_init_head(struct timerqueue_head *head) |
57 | { | |
511885d7 | 58 | head->rb_root = RB_ROOT_CACHED; |
1f5a2479 JS |
59 | } |
60 | #endif /* _LINUX_TIMERQUEUE_H */ |