projects
/
urcu.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
rculfhash: simplify get_count_order()
[urcu.git]
/
rculfhash.c
diff --git
a/rculfhash.c
b/rculfhash.c
index efb1b22ce566c494c78fe3f74cafc83b33d5a9d1..fe8beedd7a9119d6b88e9a5e3fddec4267fd22a9 100644
(file)
--- a/
rculfhash.c
+++ b/
rculfhash.c
@@
-255,7
+255,7
@@
struct rcu_resize_work {
};
struct partition_resize_work {
};
struct partition_resize_work {
-
struct rcu_head hea
d;
+
pthread_t thread_i
d;
struct cds_lfht *ht;
unsigned long i, start, len;
void (*fct)(struct cds_lfht *ht, unsigned long i,
struct cds_lfht *ht;
unsigned long i, start, len;
void (*fct)(struct cds_lfht *ht, unsigned long i,
@@
-446,24
+446,28
@@
unsigned int fls_ulong(unsigned long x)
#endif
}
#endif
}
+/*
+ * Return the minimum order for which x <= (1UL << order).
+ * Return -1 if x is 0.
+ */
int get_count_order_u32(uint32_t x)
{
int get_count_order_u32(uint32_t x)
{
- int order;
+ if (!x)
+ return -1;
- order = fls_u32(x) - 1;
- if (x & (x - 1))
- order++;
- return order;
+ return fls_u32(x - 1);
}
}
+/*
+ * Return the minimum order for which x <= (1UL << order).
+ * Return -1 if x is 0.
+ */
int get_count_order_ulong(unsigned long x)
{
int get_count_order_ulong(unsigned long x)
{
- int order;
+ if (!x)
+ return -1;
- order = fls_ulong(x) - 1;
- if (x & (x - 1))
- order++;
- return order;
+ return fls_ulong(x - 1);
}
#ifdef POISON_FREE
}
#ifdef POISON_FREE
@@
-1034,7
+1038,6
@@
void partition_resize_helper(struct cds_lfht *ht, unsigned long i,
struct partition_resize_work *work;
int thread, ret;
unsigned long nr_threads;
struct partition_resize_work *work;
int thread, ret;
unsigned long nr_threads;
- pthread_t *thread_id;
/*
* Note: nr_cpus_mask + 1 is always power of 2.
/*
* Note: nr_cpus_mask + 1 is always power of 2.
@@
-1049,7
+1052,6
@@
void partition_resize_helper(struct cds_lfht *ht, unsigned long i,
}
partition_len = len >> get_count_order_ulong(nr_threads);
work = calloc(nr_threads, sizeof(*work));
}
partition_len = len >> get_count_order_ulong(nr_threads);
work = calloc(nr_threads, sizeof(*work));
- thread_id = calloc(nr_threads, sizeof(*thread_id));
assert(work);
for (thread = 0; thread < nr_threads; thread++) {
work[thread].ht = ht;
assert(work);
for (thread = 0; thread < nr_threads; thread++) {
work[thread].ht = ht;
@@
-1057,16
+1059,15
@@
void partition_resize_helper(struct cds_lfht *ht, unsigned long i,
work[thread].len = partition_len;
work[thread].start = thread * partition_len;
work[thread].fct = fct;
work[thread].len = partition_len;
work[thread].start = thread * partition_len;
work[thread].fct = fct;
- ret = pthread_create(&
thread_id[thread]
, ht->resize_attr,
+ ret = pthread_create(&
(work[thread].thread_id)
, ht->resize_attr,
partition_resize_thread, &work[thread]);
assert(!ret);
}
for (thread = 0; thread < nr_threads; thread++) {
partition_resize_thread, &work[thread]);
assert(!ret);
}
for (thread = 0; thread < nr_threads; thread++) {
- ret = pthread_join(
thread_id[thread]
, NULL);
+ ret = pthread_join(
work[thread].thread_id
, NULL);
assert(!ret);
}
free(work);
assert(!ret);
}
free(work);
- free(thread_id);
}
/*
}
/*
@@
-1612,8
+1613,8
@@
void _do_cds_lfht_grow(struct cds_lfht *ht,
old_order = get_count_order_ulong(old_size) + 1;
new_order = get_count_order_ulong(new_size) + 1;
old_order = get_count_order_ulong(old_size) + 1;
new_order = get_count_order_ulong(new_size) + 1;
- printf("resize from %lu (order %lu) to %lu (order %lu) buckets\n",
- old_size, old_order, new_size, new_order);
+
dbg_
printf("resize from %lu (order %lu) to %lu (order %lu) buckets\n",
+
old_size, old_order, new_size, new_order);
assert(new_size > old_size);
init_table(ht, old_order, new_order - old_order);
}
assert(new_size > old_size);
init_table(ht, old_order, new_order - old_order);
}
@@
-1628,8
+1629,8
@@
void _do_cds_lfht_shrink(struct cds_lfht *ht,
new_size = max(new_size, MIN_TABLE_SIZE);
old_order = get_count_order_ulong(old_size) + 1;
new_order = get_count_order_ulong(new_size) + 1;
new_size = max(new_size, MIN_TABLE_SIZE);
old_order = get_count_order_ulong(old_size) + 1;
new_order = get_count_order_ulong(new_size) + 1;
- printf("resize from %lu (order %lu) to %lu (order %lu) buckets\n",
- old_size, old_order, new_size, new_order);
+
dbg_
printf("resize from %lu (order %lu) to %lu (order %lu) buckets\n",
+
old_size, old_order, new_size, new_order);
assert(new_size < old_size);
/* Remove and unlink all dummy nodes to remove. */
assert(new_size < old_size);
/* Remove and unlink all dummy nodes to remove. */
This page took
0.025686 seconds
and
4
git commands to generate.