#include <linux/init.h>
#include <linux/list.h>
#include <linux/slab.h>
#include <linux/list_sort.h>
#include <linux/interval_tree_generic.h>
#include "usnic_uiom_interval_tree.h"
#define START(node) …
#define LAST(node) …
#define MAKE_NODE(node, start, end, ref_cnt, flags, err, err_out) …
#define MARK_FOR_ADD(node, list) …
#define MAKE_NODE_AND_APPEND(node, start, end, ref_cnt, flags, err, \
err_out, list) …
#define FLAGS_EQUAL(flags1, flags2, mask) …
static struct usnic_uiom_interval_node*
usnic_uiom_interval_node_alloc(long int start, long int last, int ref_cnt,
int flags)
{ … }
static int interval_cmp(void *priv, const struct list_head *a,
const struct list_head *b)
{ … }
static void
find_intervals_intersection_sorted(struct rb_root_cached *root,
unsigned long start, unsigned long last,
struct list_head *list)
{ … }
int usnic_uiom_get_intervals_diff(unsigned long start, unsigned long last,
int flags, int flag_mask,
struct rb_root_cached *root,
struct list_head *diff_set)
{ … }
void usnic_uiom_put_interval_set(struct list_head *intervals)
{ … }
int usnic_uiom_insert_interval(struct rb_root_cached *root, unsigned long start,
unsigned long last, int flags)
{ … }
void usnic_uiom_remove_interval(struct rb_root_cached *root,
unsigned long start, unsigned long last,
struct list_head *removed)
{ … }
INTERVAL_TREE_DEFINE(…)