xref: /linux-6.15/include/linux/timerqueue.h (revision 1f5a2479)
1*1f5a2479SJohn Stultz #ifndef _LINUX_TIMERQUEUE_H
2*1f5a2479SJohn Stultz #define _LINUX_TIMERQUEUE_H
3*1f5a2479SJohn Stultz 
4*1f5a2479SJohn Stultz #include <linux/rbtree.h>
5*1f5a2479SJohn Stultz #include <linux/ktime.h>
6*1f5a2479SJohn Stultz 
7*1f5a2479SJohn Stultz 
8*1f5a2479SJohn Stultz struct timerqueue_node {
9*1f5a2479SJohn Stultz 	struct rb_node node;
10*1f5a2479SJohn Stultz 	ktime_t expires;
11*1f5a2479SJohn Stultz };
12*1f5a2479SJohn Stultz 
13*1f5a2479SJohn Stultz struct timerqueue_head {
14*1f5a2479SJohn Stultz 	struct rb_root head;
15*1f5a2479SJohn Stultz 	struct timerqueue_node *next;
16*1f5a2479SJohn Stultz };
17*1f5a2479SJohn Stultz 
18*1f5a2479SJohn Stultz 
19*1f5a2479SJohn Stultz extern void timerqueue_add(struct timerqueue_head *head,
20*1f5a2479SJohn Stultz 				struct timerqueue_node *node);
21*1f5a2479SJohn Stultz extern void timerqueue_del(struct timerqueue_head *head,
22*1f5a2479SJohn Stultz 				struct timerqueue_node *node);
23*1f5a2479SJohn Stultz extern struct timerqueue_node *timerqueue_getnext(struct timerqueue_head *head);
24*1f5a2479SJohn Stultz extern struct timerqueue_node *timerqueue_iterate_next(
25*1f5a2479SJohn Stultz 						struct timerqueue_node *node);
26*1f5a2479SJohn Stultz 
27*1f5a2479SJohn Stultz static inline void timerqueue_init(struct timerqueue_node *node)
28*1f5a2479SJohn Stultz {
29*1f5a2479SJohn Stultz 	RB_CLEAR_NODE(&node->node);
30*1f5a2479SJohn Stultz }
31*1f5a2479SJohn Stultz 
32*1f5a2479SJohn Stultz static inline void timerqueue_init_head(struct timerqueue_head *head)
33*1f5a2479SJohn Stultz {
34*1f5a2479SJohn Stultz 	head->head = RB_ROOT;
35*1f5a2479SJohn Stultz 	head->next = NULL;
36*1f5a2479SJohn Stultz }
37*1f5a2479SJohn Stultz #endif /* _LINUX_TIMERQUEUE_H */
38