projects
/
urcu.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add rcu_flavor
[urcu.git]
/
urcu
/
rculfhash.h
diff --git
a/urcu/rculfhash.h
b/urcu/rculfhash.h
index c13d3dff91bb7d6dd77ddb81d389420347e8988a..6953ad12499b515819b73e56808106fdf55926e1 100644
(file)
--- a/
urcu/rculfhash.h
+++ b/
urcu/rculfhash.h
@@
-7,6
+7,7
@@
* Userspace RCU library - Lock-Free RCU Hash Table
*
* Copyright 2011 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
* Userspace RCU library - Lock-Free RCU Hash Table
*
* Copyright 2011 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ * Copyright 2011 - Lai Jiangshan <laijs@cn.fujitsu.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@
-71,7
+72,7
@@
struct cds_lfht;
* Ensure reader and writer threads are registered as urcu readers.
*/
* Ensure reader and writer threads are registered as urcu readers.
*/
-typedef int (*cds_lfht_match_fct)(struct cds_lfht_node *node, void *key);
+typedef int (*cds_lfht_match_fct)(struct cds_lfht_node *node,
const
void *key);
/*
* cds_lfht_node_init - initialize a hash table node
/*
* cds_lfht_node_init - initialize a hash table node
@@
-97,7
+98,8
@@
enum {
* _cds_lfht_new - API used by cds_lfht_new wrapper. Do not use directly.
*/
struct cds_lfht *_cds_lfht_new(unsigned long init_size,
* _cds_lfht_new - API used by cds_lfht_new wrapper. Do not use directly.
*/
struct cds_lfht *_cds_lfht_new(unsigned long init_size,
- unsigned long min_alloc_size,
+ unsigned long min_nr_alloc_buckets,
+ unsigned long max_nr_buckets,
int flags,
void (*cds_lfht_call_rcu)(struct rcu_head *head,
void (*func)(struct rcu_head *head)),
int flags,
void (*cds_lfht_call_rcu)(struct rcu_head *head,
void (*func)(struct rcu_head *head)),
@@
-112,11
+114,16
@@
struct cds_lfht *_cds_lfht_new(unsigned long init_size,
/*
* cds_lfht_new - allocate a hash table.
/*
* cds_lfht_new - allocate a hash table.
- * @init_size: number of nodes to allocate initially. Must be power of two.
- * @min_alloc_size: the smallest allocation size to use. Must be power of two.
+ * @init_size: number of buckets to allocate initially. Must be power of two.
+ * @min_nr_alloc_buckets: the minimum number of allocated buckets.
+ * (must be power of two)
+ * @max_nr_buckets: the maximum number of hash table buckets allowed.
+ * (must be power of two)
* @flags: hash table creation flags (can be combined with bitwise or: '|').
* 0: no flags.
* CDS_LFHT_AUTO_RESIZE: automatically resize hash table.
* @flags: hash table creation flags (can be combined with bitwise or: '|').
* 0: no flags.
* CDS_LFHT_AUTO_RESIZE: automatically resize hash table.
+ * CDS_LFHT_ACCOUNTING: count the number of node addition
+ * and removal in the table
* @attr: optional resize worker thread attributes. NULL for default.
*
* Return NULL on error.
* @attr: optional resize worker thread attributes. NULL for default.
*
* Return NULL on error.
@@
-129,15
+136,17
@@
struct cds_lfht *_cds_lfht_new(unsigned long init_size,
* this priority level. Having lower priority for call_rcu and resize threads
* does not pose any correctness issue, but the resize operations could be
* starved by updates, thus leading to long hash table bucket chains.
* this priority level. Having lower priority for call_rcu and resize threads
* does not pose any correctness issue, but the resize operations could be
* starved by updates, thus leading to long hash table bucket chains.
- * Threads calling this API need to be registered RCU read-side threads.
+ * Threads calling this API are NOT required to be registered RCU read-side
+ * threads. It can be called very early.(before rcu is initialized ...etc.)
*/
static inline
struct cds_lfht *cds_lfht_new(unsigned long init_size,
*/
static inline
struct cds_lfht *cds_lfht_new(unsigned long init_size,
- unsigned long min_alloc_size,
+ unsigned long min_nr_alloc_buckets,
+ unsigned long max_nr_buckets,
int flags,
pthread_attr_t *attr)
{
int flags,
pthread_attr_t *attr)
{
- return _cds_lfht_new(init_size, min_
alloc_size
, flags,
+ return _cds_lfht_new(init_size, min_
nr_alloc_buckets, max_nr_buckets
, flags,
call_rcu, synchronize_rcu, rcu_read_lock,
rcu_read_unlock, rcu_thread_offline,
rcu_thread_online, rcu_register_thread,
call_rcu, synchronize_rcu, rcu_read_lock,
rcu_read_unlock, rcu_thread_offline,
rcu_thread_online, rcu_register_thread,
@@
-186,7
+195,7
@@
void cds_lfht_count_nodes(struct cds_lfht *ht,
* Threads calling this API need to be registered RCU read-side threads.
*/
void cds_lfht_lookup(struct cds_lfht *ht, unsigned long hash,
* Threads calling this API need to be registered RCU read-side threads.
*/
void cds_lfht_lookup(struct cds_lfht *ht, unsigned long hash,
- cds_lfht_match_fct match, void *key,
+ cds_lfht_match_fct match,
const
void *key,
struct cds_lfht_iter *iter);
/*
struct cds_lfht_iter *iter);
/*
@@
-206,7
+215,7
@@
void cds_lfht_lookup(struct cds_lfht *ht, unsigned long hash,
* Threads calling this API need to be registered RCU read-side threads.
*/
void cds_lfht_next_duplicate(struct cds_lfht *ht,
* Threads calling this API need to be registered RCU read-side threads.
*/
void cds_lfht_next_duplicate(struct cds_lfht *ht,
- cds_lfht_match_fct match, void *key,
+ cds_lfht_match_fct match,
const
void *key,
struct cds_lfht_iter *iter);
/*
struct cds_lfht_iter *iter);
/*
@@
-268,7
+277,7
@@
void cds_lfht_add(struct cds_lfht *ht, unsigned long hash,
struct cds_lfht_node *cds_lfht_add_unique(struct cds_lfht *ht,
unsigned long hash,
cds_lfht_match_fct match,
struct cds_lfht_node *cds_lfht_add_unique(struct cds_lfht *ht,
unsigned long hash,
cds_lfht_match_fct match,
- void *key,
+
const
void *key,
struct cds_lfht_node *node);
/*
struct cds_lfht_node *node);
/*
@@
-300,7
+309,7
@@
struct cds_lfht_node *cds_lfht_add_unique(struct cds_lfht *ht,
struct cds_lfht_node *cds_lfht_add_replace(struct cds_lfht *ht,
unsigned long hash,
cds_lfht_match_fct match,
struct cds_lfht_node *cds_lfht_add_replace(struct cds_lfht *ht,
unsigned long hash,
cds_lfht_match_fct match,
- void *key,
+
const
void *key,
struct cds_lfht_node *node);
/*
struct cds_lfht_node *node);
/*
This page took
0.024569 seconds
and
4
git commands to generate.