1 | /* SPDX-License-Identifier: GPL-2.0 */ |
---|---|
2 | #ifndef _LINUX_TIMERQUEUE_H |
3 | #define _LINUX_TIMERQUEUE_H |
4 | |
5 | #include <linux/rbtree.h> |
6 | #include <linux/timerqueue_types.h> |
7 | |
8 | extern bool timerqueue_add(struct timerqueue_head *head, |
9 | struct timerqueue_node *node); |
10 | extern bool timerqueue_del(struct timerqueue_head *head, |
11 | struct timerqueue_node *node); |
12 | extern struct timerqueue_node *timerqueue_iterate_next( |
13 | struct timerqueue_node *node); |
14 | |
15 | /** |
16 | * timerqueue_getnext - Returns the timer with the earliest expiration time |
17 | * |
18 | * @head: head of timerqueue |
19 | * |
20 | * Returns a pointer to the timer node that has the earliest expiration time. |
21 | */ |
22 | static inline |
23 | struct timerqueue_node *timerqueue_getnext(struct timerqueue_head *head) |
24 | { |
25 | struct rb_node *leftmost = rb_first_cached(&head->rb_root); |
26 | |
27 | return rb_entry_safe(leftmost, struct timerqueue_node, node); |
28 | } |
29 | |
30 | static inline void timerqueue_init(struct timerqueue_node *node) |
31 | { |
32 | RB_CLEAR_NODE(&node->node); |
33 | } |
34 | |
35 | static inline bool timerqueue_node_queued(struct timerqueue_node *node) |
36 | { |
37 | return !RB_EMPTY_NODE(&node->node); |
38 | } |
39 | |
40 | static inline bool timerqueue_node_expires(struct timerqueue_node *node) |
41 | { |
42 | return node->expires; |
43 | } |
44 | |
45 | static inline void timerqueue_init_head(struct timerqueue_head *head) |
46 | { |
47 | head->rb_root = RB_ROOT_CACHED; |
48 | } |
49 | #endif /* _LINUX_TIMERQUEUE_H */ |
50 |