[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