[lttng-dev] [PATCH urcu] Cleanup: compiler warning on 32-bit architectures

Mathieu Desnoyers mathieu.desnoyers at efficios.com
Mon Dec 17 15:26:35 EST 2018


Merged into master branch, thanks!

Mathieu

----- On Dec 17, 2018, at 3:23 PM, Michael Jeanson mjeanson at efficios.com wrote:

> Replace a runtime test for 64-bit arch by a preprocessor test to
> fix this compiler warning on 32-bit archs :
> 
>  comparison is always true due to limited range of data type [-Wtype-limits]
> 
> Signed-off-by: Michael Jeanson <mjeanson at efficios.com>
> ---
> src/rculfhash.c | 45 +++++++++++++++++++++++++++------------------
> 1 file changed, 27 insertions(+), 18 deletions(-)
> 
> diff --git a/src/rculfhash.c b/src/rculfhash.c
> index 8942c80..d250a1d 100644
> --- a/src/rculfhash.c
> +++ b/src/rculfhash.c
> @@ -1543,6 +1543,32 @@ void cds_lfht_create_bucket(struct cds_lfht *ht, unsigned
> long size)
> 	}
> }
> 
> +#if (CAA_BITS_PER_LONG > 32)
> +/*
> + * For 64-bit architectures, with max number of buckets small enough not to
> + * use the entire 64-bit memory mapping space (and allowing a fair number of
> + * hash table instances), use the mmap allocator, which is faster. Otherwise,
> + * fallback to the order allocator.
> + */
> +static
> +const struct cds_lfht_mm_type *get_mm_type(unsigned long max_nr_buckets)
> +{
> +	if (max_nr_buckets && max_nr_buckets <= (1ULL << 32))
> +		return &cds_lfht_mm_mmap;
> +	else
> +		return &cds_lfht_mm_order;
> +}
> +#else
> +/*
> + * For 32-bit architectures, use the order allocator.
> + */
> +static
> +const struct cds_lfht_mm_type *get_mm_type(unsigned long max_nr_buckets)
> +{
> +	return &cds_lfht_mm_order;
> +}
> +#endif
> +
> struct cds_lfht *_cds_lfht_new(unsigned long init_size,
> 			unsigned long min_nr_alloc_buckets,
> 			unsigned long max_nr_buckets,
> @@ -1566,24 +1592,7 @@ struct cds_lfht *_cds_lfht_new(unsigned long init_size,
> 	 * Memory management plugin default.
> 	 */
> 	if (!mm) {
> -		if (CAA_BITS_PER_LONG > 32
> -				&& max_nr_buckets
> -				&& max_nr_buckets <= (1ULL << 32)) {
> -			/*
> -			 * For 64-bit architectures, with max number of
> -			 * buckets small enough not to use the entire
> -			 * 64-bit memory mapping space (and allowing a
> -			 * fair number of hash table instances), use the
> -			 * mmap allocator, which is faster than the
> -			 * order allocator.
> -			 */
> -			mm = &cds_lfht_mm_mmap;
> -		} else {
> -			/*
> -			 * The fallback is to use the order allocator.
> -			 */
> -			mm = &cds_lfht_mm_order;
> -		}
> +		mm = get_mm_type(max_nr_buckets);
> 	}
> 
> 	/* max_nr_buckets == 0 for order based mm means infinite */
> --
> 2.17.1

-- 
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com


More information about the lttng-dev mailing list