*/
struct cds_lfht *ht;
unsigned long nr_fallback; /* Number of fallback nodes used */
+
+ /* For debugging */
+ unsigned long node_fallback_count_distribution[JA_ENTRY_PER_NODE];
+ unsigned long nr_nodes_allocated, nr_nodes_freed;
};
static inline
return (struct cds_ja_inode_flag *) (((unsigned long) node) | (bitsel << JA_TYPE_BITS) | type);
}
+static inline
+struct cds_ja_inode_flag *ja_node_flag_pool_2d(struct cds_ja_inode *node,
+ unsigned long type, unsigned int bitsel[2])
+{
+ assert(type < (1UL << JA_TYPE_BITS));
+ assert(bitsel[0] < JA_BITS_PER_BYTE);
+ assert(bitsel[1] < JA_BITS_PER_BYTE);
+ return (struct cds_ja_inode_flag *) (((unsigned long) node) | (bitsel[0] << (JA_TYPE_BITS + JA_LOG2_BITS_PER_BYTE)) | (bitsel[1] << JA_TYPE_BITS) | type);
+}
+
static inline
unsigned long ja_node_pool_1d_bitsel(struct cds_ja_inode_flag *node)
{
struct cds_ja_shadow_node *rcuja_shadow_set(struct cds_lfht *ht,
struct cds_ja_inode_flag *new_node_flag,
struct cds_ja_shadow_node *inherit_from,
- struct cds_ja *ja);
+ struct cds_ja *ja, int level);
/* rcuja_shadow_clear flags */
enum {
__attribute__((visibility("protected")))
int rcuja_delete_ht(struct cds_lfht *ht);
+__attribute__((visibility("protected")))
+void free_cds_ja_node(struct cds_ja *ja, struct cds_ja_inode *node);
+
//#define DEBUG
#ifdef __linux__