[lttng-dev] [PATCH 4/6] cleanup duplicated code
Mathieu Desnoyers
mathieu.desnoyers at efficios.com
Fri Dec 2 08:09:07 EST 2011
* Lai Jiangshan (laijs at cn.fujitsu.com) wrote:
> Signed-off-by: Lai Jiangshan <laijs at cn.fujitsu.com>
merged, thanks!
Mathieu
> ---
> 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
>
--
Mathieu Desnoyers
Operating System Efficiency R&D Consultant
EfficiOS Inc.
http://www.efficios.com
More information about the lttng-dev
mailing list