X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=rcuja%2Frcuja-internal.h;h=28908e050b06e88d4dc9003487ee4f912596b819;hb=5a9a87dd2a194207a0d98ee999d69b7db7183dea;hp=80202ed0f9683eacaf3d888a512406e676f05f91;hpb=e1db2db589f05c48ae9e8b0199989d76bb2f7b14;p=userspace-rcu.git diff --git a/rcuja/rcuja-internal.h b/rcuja/rcuja-internal.h index 80202ed..28908e0 100644 --- a/rcuja/rcuja-internal.h +++ b/rcuja/rcuja-internal.h @@ -27,14 +27,14 @@ #include /* Never declared. Opaque type used to store flagged node pointers. */ -struct rcu_ja_node_flag; +struct cds_ja_inode_flag; /* * Shadow node contains mutex and call_rcu head associated with a node. */ -struct rcu_ja_shadow_node { +struct cds_ja_shadow_node { struct cds_lfht_node ht_node; /* hash table node */ - struct rcu_ja_node *node; /* reverse mapping and hash table key */ + struct cds_ja_inode *node; /* reverse mapping and hash table key */ /* * mutual exclusion on all nodes belonging to the same tree * position (e.g. both nodes before and after recompaction @@ -45,8 +45,10 @@ struct rcu_ja_shadow_node { struct rcu_head head; /* for deferred node and shadow node reclaim */ }; -struct rcu_ja { - struct rcu_ja_node_flag *root; +struct cds_ja { + struct cds_ja_inode_flag *root; + unsigned int tree_depth; + uint64_t key_max; /* * We use a hash table to associate node keys to their * respective shadow node. This helps reducing lookup hot path @@ -56,15 +58,16 @@ struct rcu_ja { }; __attribute__((visibility("protected"))) -struct rcu_ja_shadow_node *rcuja_shadow_lookup_lock(struct cds_lfht *ht, - struct rcu_ja_node *node); +struct cds_ja_shadow_node *rcuja_shadow_lookup_lock(struct cds_lfht *ht, + struct cds_ja_inode *node); + __attribute__((visibility("protected"))) -void rcuja_shadow_unlock(struct rcu_ja_shadow_node *shadow_node); +void rcuja_shadow_unlock(struct cds_ja_shadow_node *shadow_node); + __attribute__((visibility("protected"))) int rcuja_shadow_set(struct cds_lfht *ht, - struct rcu_ja_node *new_node, - struct rcu_ja_shadow_node *inherit_from); -__attribute__((visibility("protected"))) + struct cds_ja_inode *new_node, + struct cds_ja_shadow_node *inherit_from); /* rcuja_shadow_clear flags */ enum { @@ -72,12 +75,19 @@ enum { RCUJA_SHADOW_CLEAR_FREE_LOCK = (1U << 1), }; +__attribute__((visibility("protected"))) int rcuja_shadow_clear(struct cds_lfht *ht, - struct rcu_ja_node *node, + struct cds_ja_inode *node, unsigned int flags); + +__attribute__((visibility("protected"))) +void rcuja_shadow_prune(struct cds_lfht *ht, + unsigned int flags); + __attribute__((visibility("protected"))) struct cds_lfht *rcuja_create_ht(const struct rcu_flavor_struct *flavor); + __attribute__((visibility("protected"))) -void rcuja_delete_ht(struct cds_lfht *ht); +int rcuja_delete_ht(struct cds_lfht *ht); #endif /* _URCU_RCUJA_INTERNAL_H */