Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at d986ba0329dcca102e227995371135c9bbcefb6b 84 lines 2.5 kB view raw
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 8bool timerqueue_add(struct timerqueue_head *head, struct timerqueue_node *node); 9bool timerqueue_del(struct timerqueue_head *head, struct timerqueue_node *node); 10struct timerqueue_node *timerqueue_iterate_next(struct timerqueue_node *node); 11 12bool timerqueue_linked_add(struct timerqueue_linked_head *head, struct timerqueue_linked_node *node); 13 14/** 15 * timerqueue_getnext - Returns the timer with the earliest expiration time 16 * 17 * @head: head of timerqueue 18 * 19 * Returns a pointer to the timer node that has the earliest expiration time. 20 */ 21static inline struct timerqueue_node *timerqueue_getnext(struct timerqueue_head *head) 22{ 23 struct rb_node *leftmost = rb_first_cached(&head->rb_root); 24 25 return rb_entry_safe(leftmost, struct timerqueue_node, node); 26} 27 28static inline void timerqueue_init(struct timerqueue_node *node) 29{ 30 RB_CLEAR_NODE(&node->node); 31} 32 33static inline bool timerqueue_node_queued(struct timerqueue_node *node) 34{ 35 return !RB_EMPTY_NODE(&node->node); 36} 37 38static inline void timerqueue_init_head(struct timerqueue_head *head) 39{ 40 head->rb_root = RB_ROOT_CACHED; 41} 42 43/* Timer queues with linked nodes */ 44 45static __always_inline 46struct timerqueue_linked_node *timerqueue_linked_first(struct timerqueue_linked_head *head) 47{ 48 return rb_entry_safe(head->rb_root.rb_leftmost, struct timerqueue_linked_node, node); 49} 50 51static __always_inline 52struct timerqueue_linked_node *timerqueue_linked_next(struct timerqueue_linked_node *node) 53{ 54 return rb_entry_safe(node->node.next, struct timerqueue_linked_node, node); 55} 56 57static __always_inline 58struct timerqueue_linked_node *timerqueue_linked_prev(struct timerqueue_linked_node *node) 59{ 60 return rb_entry_safe(node->node.prev, struct timerqueue_linked_node, node); 61} 62 63static __always_inline 64bool timerqueue_linked_del(struct timerqueue_linked_head *head, struct timerqueue_linked_node *node) 65{ 66 return rb_erase_linked(&node->node, &head->rb_root); 67} 68 69static __always_inline void timerqueue_linked_init(struct timerqueue_linked_node *node) 70{ 71 RB_CLEAR_LINKED_NODE(&node->node); 72} 73 74static __always_inline bool timerqueue_linked_node_queued(struct timerqueue_linked_node *node) 75{ 76 return !RB_EMPTY_LINKED_NODE(&node->node); 77} 78 79static __always_inline void timerqueue_linked_init_head(struct timerqueue_linked_head *head) 80{ 81 head->rb_root = RB_ROOT_LINKED; 82} 83 84#endif /* _LINUX_TIMERQUEUE_H */