Branch data Line data Source code
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/ktime.h> 7 : : 8 : : 9 : : struct timerqueue_node { 10 : : struct rb_node node; 11 : : ktime_t expires; 12 : : }; 13 : : 14 : : struct timerqueue_head { 15 : : struct rb_root_cached rb_root; 16 : : }; 17 : : 18 : : 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); 23 : : extern struct timerqueue_node *timerqueue_iterate_next( 24 : : struct timerqueue_node *node); 25 : : 26 : : /** 27 : : * timerqueue_getnext - Returns the timer with the earliest expiration time 28 : : * 29 : : * @head: head of timerqueue 30 : : * 31 : : * Returns a pointer to the timer node that has the earliest expiration time. 32 : : */ 33 : : static inline 34 : 206919 : struct timerqueue_node *timerqueue_getnext(struct timerqueue_head *head) 35 : : { 36 : 206919 : struct rb_node *leftmost = rb_first_cached(&head->rb_root); 37 : : 38 [ - - + + : 206919 : return rb_entry(leftmost, struct timerqueue_node, node); - + - + ] 39 : : } 40 : : 41 : 34037 : static inline void timerqueue_init(struct timerqueue_node *node) 42 : : { 43 [ # # ]: 34037 : RB_CLEAR_NODE(&node->node); 44 : : } 45 : : 46 : 0 : static inline bool timerqueue_node_queued(struct timerqueue_node *node) 47 : : { 48 [ # # ]: 0 : 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 : : 56 : 143 : static inline void timerqueue_init_head(struct timerqueue_head *head) 57 : : { 58 : 143 : head->rb_root = RB_ROOT_CACHED; 59 : : } 60 : : #endif /* _LINUX_TIMERQUEUE_H */