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

rblist.h (1393B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#ifndef __PERF_RBLIST_H
      3#define __PERF_RBLIST_H
      4
      5#include <linux/rbtree.h>
      6#include <stdbool.h>
      7
      8/*
      9 * create node structs of the form:
     10 * struct my_node {
     11 *     struct rb_node rb_node;
     12 *     ... my data ...
     13 * };
     14 *
     15 * create list structs of the form:
     16 * struct mylist {
     17 *     struct rblist rblist;
     18 *     ... my data ...
     19 * };
     20 */
     21
     22struct rblist {
     23	struct rb_root_cached entries;
     24	unsigned int   nr_entries;
     25
     26	int (*node_cmp)(struct rb_node *rbn, const void *entry);
     27	struct rb_node *(*node_new)(struct rblist *rlist, const void *new_entry);
     28	void (*node_delete)(struct rblist *rblist, struct rb_node *rb_node);
     29};
     30
     31void rblist__init(struct rblist *rblist);
     32void rblist__exit(struct rblist *rblist);
     33void rblist__delete(struct rblist *rblist);
     34int rblist__add_node(struct rblist *rblist, const void *new_entry);
     35void rblist__remove_node(struct rblist *rblist, struct rb_node *rb_node);
     36struct rb_node *rblist__find(struct rblist *rblist, const void *entry);
     37struct rb_node *rblist__findnew(struct rblist *rblist, const void *entry);
     38struct rb_node *rblist__entry(const struct rblist *rblist, unsigned int idx);
     39
     40static inline bool rblist__empty(const struct rblist *rblist)
     41{
     42	return rblist->nr_entries == 0;
     43}
     44
     45static inline unsigned int rblist__nr_entries(const struct rblist *rblist)
     46{
     47	return rblist->nr_entries;
     48}
     49
     50#endif /* __PERF_RBLIST_H */