Signed-off-by: Lai Jiangshan <[email protected]>
---
 rculfhash-internal.h |   22 ++++++++++++++++++++++
 rculfhash-mm-chunk.c |   16 ++++------------
 rculfhash-mm-mmap.c  |   19 +++++--------------
 rculfhash-mm-order.c |   16 +++-------------
 4 files changed, 34 insertions(+), 39 deletions(-)

diff --git a/rculfhash-internal.h b/rculfhash-internal.h
index 38a0317..a8a1ce4 100644
--- a/rculfhash-internal.h
+++ b/rculfhash-internal.h
@@ -152,4 +152,26 @@ extern int get_count_order_ulong(unsigned long x);
 #define poison_free(ptr)       free(ptr)
 #endif
 
+static inline
+struct cds_lfht *__default_alloc_cds_lfht(
+               const struct cds_lfht_mm_type *mm,
+               unsigned long cds_lfht_size,
+               unsigned long min_nr_alloc_buckets,
+               unsigned long max_nr_buckets)
+{
+       struct cds_lfht *ht;
+
+       ht = calloc(1, cds_lfht_size);
+       assert(ht);
+
+       ht->mm = mm;
+       ht->bucket_at = mm->bucket_at;
+       ht->min_nr_alloc_buckets = min_nr_alloc_buckets;
+       ht->min_alloc_buckets_order =
+               get_count_order_ulong(min_nr_alloc_buckets);
+       ht->max_nr_buckets = max_nr_buckets;
+
+       return ht;
+}
+
 #endif /* _URCU_RCULFHASH_INTERNAL_H */
diff --git a/rculfhash-mm-chunk.c b/rculfhash-mm-chunk.c
index 38dde3a..a7a9b76 100644
--- a/rculfhash-mm-chunk.c
+++ b/rculfhash-mm-chunk.c
@@ -75,26 +75,18 @@ static
 struct cds_lfht *alloc_cds_lfht(unsigned long min_nr_alloc_buckets,
                unsigned long max_nr_buckets)
 {
-       struct cds_lfht *ht;
        unsigned long nr_chunks, cds_lfht_size;
 
        min_nr_alloc_buckets = max(min_nr_alloc_buckets,
                                max_nr_buckets / MAX_CHUNK_TABLE);
        nr_chunks = max_nr_buckets / min_nr_alloc_buckets;
        cds_lfht_size = offsetof(struct cds_lfht, tbl_chunk) +
-                       sizeof(ht->tbl_chunk[0]) * nr_chunks;
+                       sizeof(struct cds_lfht_node *) * nr_chunks;
        cds_lfht_size = max(cds_lfht_size, sizeof(struct cds_lfht));
-       ht = calloc(1, cds_lfht_size);
-       assert(ht);
 
-       ht->bucket_at = bucket_at;
-       ht->mm = &cds_lfht_mm_chunk;
-       ht->min_nr_alloc_buckets = min_nr_alloc_buckets;
-       ht->min_alloc_buckets_order =
-               get_count_order_ulong(min_nr_alloc_buckets);
-       ht->max_nr_buckets = max_nr_buckets;
-
-       return ht;
+       return __default_alloc_cds_lfht(
+                       &cds_lfht_mm_chunk, cds_lfht_size,
+                       min_nr_alloc_buckets, max_nr_buckets);
 }
 
 const struct cds_lfht_mm_type cds_lfht_mm_chunk = {
diff --git a/rculfhash-mm-mmap.c b/rculfhash-mm-mmap.c
index dba4524..4554ed6 100644
--- a/rculfhash-mm-mmap.c
+++ b/rculfhash-mm-mmap.c
@@ -131,9 +131,9 @@ static
 struct cds_lfht *alloc_cds_lfht(unsigned long min_nr_alloc_buckets,
                unsigned long max_nr_buckets)
 {
-       struct cds_lfht *ht;
-       unsigned long page_bucket_size = getpagesize() / sizeof(*ht->tbl_mmap);
+       unsigned long page_bucket_size;
 
+       page_bucket_size = getpagesize() / sizeof(struct cds_lfht_node);
        if (max_nr_buckets <= page_bucket_size) {
                /* small table */
                min_nr_alloc_buckets = max_nr_buckets;
@@ -143,18 +143,9 @@ struct cds_lfht *alloc_cds_lfht(unsigned long 
min_nr_alloc_buckets,
                                        page_bucket_size);
        }
 
-       ht = calloc(1, sizeof(struct cds_lfht));
-       assert(ht);
-
-       ht->bucket_at = bucket_at;
-       ht->mm = &cds_lfht_mm_mmap;
-       ht->min_nr_alloc_buckets = min_nr_alloc_buckets;
-       ht->min_alloc_buckets_order =
-                       get_count_order_ulong(min_nr_alloc_buckets);
-       ht->max_nr_buckets = max_nr_buckets;
-
-
-       return ht;
+       return __default_alloc_cds_lfht(
+                       &cds_lfht_mm_mmap, sizeof(struct cds_lfht),
+                       min_nr_alloc_buckets, max_nr_buckets);
 }
 
 const struct cds_lfht_mm_type cds_lfht_mm_mmap = {
diff --git a/rculfhash-mm-order.c b/rculfhash-mm-order.c
index 9c0c70e..237d4cf 100644
--- a/rculfhash-mm-order.c
+++ b/rculfhash-mm-order.c
@@ -77,19 +77,9 @@ static
 struct cds_lfht *alloc_cds_lfht(unsigned long min_nr_alloc_buckets,
                unsigned long max_nr_buckets)
 {
-       struct cds_lfht *ht;
-
-       ht = calloc(1, sizeof(struct cds_lfht));
-       assert(ht);
-
-       ht->bucket_at = bucket_at;
-       ht->mm = &cds_lfht_mm_order;
-       ht->min_nr_alloc_buckets = min_nr_alloc_buckets;
-       ht->min_alloc_buckets_order =
-               get_count_order_ulong(min_nr_alloc_buckets);
-       ht->max_nr_buckets = max_nr_buckets;
-
-       return ht;
+       return __default_alloc_cds_lfht(
+                       &cds_lfht_mm_order, sizeof(struct cds_lfht),
+                       min_nr_alloc_buckets, max_nr_buckets);
 }
 
 const struct cds_lfht_mm_type cds_lfht_mm_order = {
-- 
1.7.4.4


_______________________________________________
lttng-dev mailing list
[email protected]
http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev

Reply via email to