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