cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

timerqueue.h (1425B)


      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
      9struct timerqueue_node {
     10	struct rb_node node;
     11	ktime_t expires;
     12};
     13
     14struct timerqueue_head {
     15	struct rb_root_cached rb_root;
     16};
     17
     18
     19extern bool timerqueue_add(struct timerqueue_head *head,
     20			   struct timerqueue_node *node);
     21extern bool timerqueue_del(struct timerqueue_head *head,
     22			   struct timerqueue_node *node);
     23extern 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 */
     33static inline
     34struct timerqueue_node *timerqueue_getnext(struct timerqueue_head *head)
     35{
     36	struct rb_node *leftmost = rb_first_cached(&head->rb_root);
     37
     38	return rb_entry(leftmost, struct timerqueue_node, node);
     39}
     40
     41static inline void timerqueue_init(struct timerqueue_node *node)
     42{
     43	RB_CLEAR_NODE(&node->node);
     44}
     45
     46static inline bool timerqueue_node_queued(struct timerqueue_node *node)
     47{
     48	return !RB_EMPTY_NODE(&node->node);
     49}
     50
     51static inline bool timerqueue_node_expires(struct timerqueue_node *node)
     52{
     53	return node->expires;
     54}
     55
     56static inline void timerqueue_init_head(struct timerqueue_head *head)
     57{
     58	head->rb_root = RB_ROOT_CACHED;
     59}
     60#endif /* _LINUX_TIMERQUEUE_H */