X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=urcu%2Frcuja-range.h;h=63035a1660888aa5f9b20548046571dcb54ad193;hb=f83b3e90613a55a9f5dda7a71839c3930a47d96a;hp=31bce15a727a77e24e9f1906995629e60f7b6dea;hpb=b45a45b97aa99c5271b69c41f7e8aec111c20de1;p=userspace-rcu.git diff --git a/urcu/rcuja-range.h b/urcu/rcuja-range.h index 31bce15..63035a1 100644 --- a/urcu/rcuja-range.h +++ b/urcu/rcuja-range.h @@ -26,48 +26,44 @@ */ #include -#include #include #ifdef __cplusplus extern "C" { #endif -enum cds_ja_range_type { - CDS_JA_RANGE_ALLOCATED, - CDS_JA_RANGE_FREE, - CDS_JA_RANGE_REMOVED, -}; - -/* - * Range goes from start (inclusive) to end (inclusive). - * Range start is used as node key in the Judy array. - */ -struct cds_ja_range { - uint64_t start, end; - struct cds_ja_node ja_node; - pthread_mutex_t lock; - enum cds_ja_range_type type; - struct rcu_head head; -}; - -int cds_ja_range_init(struct cds_ja *ja); -int cds_ja_range_fini(struct cds_ja *ja); - struct cds_ja_range *cds_ja_range_lookup(struct cds_ja *ja, uint64_t key); struct cds_ja_range *cds_ja_range_lock(struct cds_ja_range *range); void cds_ja_range_unlock(struct cds_ja_range *range); -struct cds_ja_range *cds_ja_range_add(struct cds_ja *ja, +int cds_ja_range_add(struct cds_ja *ja, uint64_t start, /* inclusive */ - uint64_t end); /* inclusive */ + uint64_t end, /* inclusive */ + void *priv); int cds_ja_range_del(struct cds_ja *ja, struct cds_ja_range *range); +void cds_ja_range_get_values(const struct cds_ja_range *range, + uint64_t *start, uint64_t *end, void **priv); + +struct cds_ja *_cds_ja_range_new(unsigned int key_bits, + const struct rcu_flavor_struct *flavor); + +static inline +struct cds_ja *cds_ja_range_new(unsigned int key_bits) +{ + return _cds_ja_range_new(key_bits, &rcu_flavor); +} + +int cds_ja_range_destroy(struct cds_ja *ja, + void (*free_priv)(void *ptr)); + +int cds_ja_range_validate(struct cds_ja *ja); + #ifdef __cplusplus } #endif -#endif /* _URCU_RCUJA_H */ +#endif /* _URCU_RCUJA_RANGE_H */