xref: /linux-6.15/include/linux/timerqueue.h (revision 45f74264)
11f5a2479SJohn Stultz #ifndef _LINUX_TIMERQUEUE_H
21f5a2479SJohn Stultz #define _LINUX_TIMERQUEUE_H
31f5a2479SJohn Stultz 
41f5a2479SJohn Stultz #include <linux/rbtree.h>
51f5a2479SJohn Stultz #include <linux/ktime.h>
61f5a2479SJohn Stultz 
71f5a2479SJohn Stultz 
81f5a2479SJohn Stultz struct timerqueue_node {
91f5a2479SJohn Stultz 	struct rb_node node;
101f5a2479SJohn Stultz 	ktime_t expires;
111f5a2479SJohn Stultz };
121f5a2479SJohn Stultz 
131f5a2479SJohn Stultz struct timerqueue_head {
141f5a2479SJohn Stultz 	struct rb_root head;
151f5a2479SJohn Stultz 	struct timerqueue_node *next;
161f5a2479SJohn Stultz };
171f5a2479SJohn Stultz 
181f5a2479SJohn Stultz 
191f5a2479SJohn Stultz extern void timerqueue_add(struct timerqueue_head *head,
201f5a2479SJohn Stultz 				struct timerqueue_node *node);
211f5a2479SJohn Stultz extern void timerqueue_del(struct timerqueue_head *head,
221f5a2479SJohn Stultz 				struct timerqueue_node *node);
231f5a2479SJohn Stultz extern struct timerqueue_node *timerqueue_iterate_next(
241f5a2479SJohn Stultz 						struct timerqueue_node *node);
251f5a2479SJohn Stultz 
26*45f74264SThomas Gleixner /**
27*45f74264SThomas Gleixner  * timerqueue_getnext - Returns the timer with the earlies expiration time
28*45f74264SThomas Gleixner  *
29*45f74264SThomas Gleixner  * @head: head of timerqueue
30*45f74264SThomas Gleixner  *
31*45f74264SThomas Gleixner  * Returns a pointer to the timer node that has the
32*45f74264SThomas Gleixner  * earliest expiration time.
33*45f74264SThomas Gleixner  */
34*45f74264SThomas Gleixner static inline
35*45f74264SThomas Gleixner struct timerqueue_node *timerqueue_getnext(struct timerqueue_head *head)
36*45f74264SThomas Gleixner {
37*45f74264SThomas Gleixner 	return head->next;
38*45f74264SThomas Gleixner }
39*45f74264SThomas Gleixner 
401f5a2479SJohn Stultz static inline void timerqueue_init(struct timerqueue_node *node)
411f5a2479SJohn Stultz {
421f5a2479SJohn Stultz 	RB_CLEAR_NODE(&node->node);
431f5a2479SJohn Stultz }
441f5a2479SJohn Stultz 
451f5a2479SJohn Stultz static inline void timerqueue_init_head(struct timerqueue_head *head)
461f5a2479SJohn Stultz {
471f5a2479SJohn Stultz 	head->head = RB_ROOT;
481f5a2479SJohn Stultz 	head->next = NULL;
491f5a2479SJohn Stultz }
501f5a2479SJohn Stultz #endif /* _LINUX_TIMERQUEUE_H */
51