projects
/
urcu.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
rculfhash: handle small and negative table size approximation
[urcu.git]
/
rculfhash.c
diff --git
a/rculfhash.c
b/rculfhash.c
index 7e959fb4cd8228b161cbb7b4516ff36c4224270b..9a95be260783e66aea715fa3806f0e5f0571e66f 100644
(file)
--- a/
rculfhash.c
+++ b/
rculfhash.c
@@
-556,7
+556,7
@@
void ht_count_add(struct cds_lfht *ht, unsigned long size)
return;
percpu_count = uatomic_add_return(&ht->percpu_count[cpu].add, 1);
if (unlikely(!(percpu_count & ((1UL << COUNT_COMMIT_ORDER) - 1)))) {
return;
percpu_count = uatomic_add_return(&ht->percpu_count[cpu].add, 1);
if (unlikely(!(percpu_count & ((1UL << COUNT_COMMIT_ORDER) - 1)))) {
-
unsigned
long count;
+ long count;
dbg_printf("add percpu %lu\n", percpu_count);
count = uatomic_add_return(&ht->count,
dbg_printf("add percpu %lu\n", percpu_count);
count = uatomic_add_return(&ht->count,
@@
-565,7
+565,13
@@
void ht_count_add(struct cds_lfht *ht, unsigned long size)
if (!(count & (count - 1))) {
if ((count >> CHAIN_LEN_RESIZE_THRESHOLD) < size)
return;
if (!(count & (count - 1))) {
if ((count >> CHAIN_LEN_RESIZE_THRESHOLD) < size)
return;
- dbg_printf("add set global %lu\n", count);
+ dbg_printf("add set global %ld\n", count);
+ /*
+ * Don't resize table if the number of nodes is below a
+ * certain threshold.
+ */
+ if (count < (1UL << COUNT_COMMIT_ORDER))
+ return;
cds_lfht_resize_lazy_count(ht, size,
count >> (CHAIN_LEN_TARGET - 1));
}
cds_lfht_resize_lazy_count(ht, size,
count >> (CHAIN_LEN_TARGET - 1));
}
@@
-585,7
+591,7
@@
void ht_count_del(struct cds_lfht *ht, unsigned long size)
return;
percpu_count = uatomic_add_return(&ht->percpu_count[cpu].del, 1);
if (unlikely(!(percpu_count & ((1UL << COUNT_COMMIT_ORDER) - 1)))) {
return;
percpu_count = uatomic_add_return(&ht->percpu_count[cpu].del, 1);
if (unlikely(!(percpu_count & ((1UL << COUNT_COMMIT_ORDER) - 1)))) {
-
unsigned
long count;
+ long count;
dbg_printf("del percpu %lu\n", percpu_count);
count = uatomic_add_return(&ht->count,
dbg_printf("del percpu %lu\n", percpu_count);
count = uatomic_add_return(&ht->count,
@@
-594,7
+600,13
@@
void ht_count_del(struct cds_lfht *ht, unsigned long size)
if (!(count & (count - 1))) {
if ((count >> CHAIN_LEN_RESIZE_THRESHOLD) >= size)
return;
if (!(count & (count - 1))) {
if ((count >> CHAIN_LEN_RESIZE_THRESHOLD) >= size)
return;
- dbg_printf("del set global %lu\n", count);
+ dbg_printf("del set global %ld\n", count);
+ /*
+ * Don't resize table if the number of nodes is below a
+ * certain threshold.
+ */
+ if (count < (1UL << COUNT_COMMIT_ORDER))
+ return;
cds_lfht_resize_lazy_count(ht, size,
count >> (CHAIN_LEN_TARGET - 1));
}
cds_lfht_resize_lazy_count(ht, size,
count >> (CHAIN_LEN_TARGET - 1));
}
This page took
0.024114 seconds
and
4
git commands to generate.