[ltt-dev] [PATCH 05/11] Remove unneed branches

Mathieu Desnoyers mathieu.desnoyers at efficios.com
Thu Oct 27 00:44:33 EDT 2011


* Lai Jiangshan (laijs at cn.fujitsu.com) wrote:
> By the effect of previous patch,
> some unneed branches can be removed.
> One of them is in the fast path.

This patch makes sense, but will likely need to be refreshed after
reworking patch 04. Please resend in the following round.

Thanks!

Mathieu

> 
> Signed-off-by: Lai Jiangshan <laijs at cn.fujitsu.com>
> ---
>  rculfhash.c |   31 ++++++++++++++-----------------
>  1 files changed, 14 insertions(+), 17 deletions(-)
> 
> diff --git a/rculfhash.c b/rculfhash.c
> index 5dcae1f..3aba9bc 100644
> --- a/rculfhash.c
> +++ b/rculfhash.c
> @@ -854,11 +854,6 @@ struct cds_lfht_node *_cds_lfht_add(struct cds_lfht *ht,
>  
>  	assert(!is_dummy(node));
>  	assert(!is_removed(node));
> -	if (!size) {
> -		assert(dummy);
> -		node->p.next = flag_dummy(get_end());
> -		return node;	/* Initial first add (head) */
> -	}
>  	lookup = lookup_bucket(ht, size, bit_reverse_ulong(node->p.reverse_hash));
>  	for (;;) {
>  		uint32_t chain_len = 0;
> @@ -1056,16 +1051,17 @@ void init_table_populate_partition(struct cds_lfht *ht, unsigned long i,
>  {
>  	unsigned long j;
>  
> +	assert(i);
>  	ht->cds_lfht_rcu_read_lock();
>  	for (j = start; j < start + len; j++) {
>  		struct cds_lfht_node *new_node =
>  			(struct cds_lfht_node *) &ht->t.tbl[i]->nodes[j];
>  
>  		dbg_printf("init populate: i %lu j %lu hash %lu\n",
> -			   i, j, !i ? 0 : (1UL << (i - 1)) + j);
> +			   i, j, (1UL << (i - 1)) + j);
>  		new_node->p.reverse_hash =
> -			bit_reverse_ulong(!i ? 0 : (1UL << (i - 1)) + j);
> -		(void) _cds_lfht_add(ht, !i ? 0 : (1UL << (i - 1)),
> +				bit_reverse_ulong((1UL << (i - 1)) + j);
> +		(void) _cds_lfht_add(ht, 1UL << (i - 1),
>  				new_node, ADD_DEFAULT, 1);
>  	}
>  	ht->cds_lfht_rcu_read_unlock();
> @@ -1094,14 +1090,15 @@ void init_table(struct cds_lfht *ht,
>  	dbg_printf("init table: first_order %lu end_order %lu\n",
>  		   first_order, first_order + len_order);
>  	end_order = first_order + len_order;
> +	assert(first_order > 0);
>  	for (i = first_order; i < end_order; i++) {
>  		unsigned long len;
>  
> -		len = !i ? 1 : 1UL << (i - 1);
> +		len = 1UL << (i - 1);
>  		dbg_printf("init order %lu len: %lu\n", i, len);
>  
>  		/* Stop expand if the resize target changes under us */
> -		if (CMM_LOAD_SHARED(ht->t.resize_target) < (!i ? 1 : (1UL << i)))
> +		if (CMM_LOAD_SHARED(ht->t.resize_target) < (1UL << i))
>  			break;
>  
>  		ht->t.tbl[i] = calloc(1, len * sizeof(struct _cds_lfht_node));
> @@ -1117,9 +1114,9 @@ void init_table(struct cds_lfht *ht,
>  		 * Update table size.
>  		 */
>  		cmm_smp_wmb();	/* populate data before RCU size */
> -		CMM_STORE_SHARED(ht->t.size, !i ? 1 : (1UL << i));
> +		CMM_STORE_SHARED(ht->t.size, 1UL << i);
>  
> -		dbg_printf("init new size: %lu\n", !i ? 1 : (1UL << i));
> +		dbg_printf("init new size: %lu\n", 1UL << i);
>  		if (CMM_LOAD_SHARED(ht->in_progress_destroy))
>  			break;
>  	}
> @@ -1156,17 +1153,17 @@ void remove_table_partition(struct cds_lfht *ht, unsigned long i,
>  {
>  	unsigned long j;
>  
> +	assert(i);
>  	ht->cds_lfht_rcu_read_lock();
>  	for (j = start; j < start + len; j++) {
>  		struct cds_lfht_node *fini_node =
>  			(struct cds_lfht_node *) &ht->t.tbl[i]->nodes[j];
>  
>  		dbg_printf("remove entry: i %lu j %lu hash %lu\n",
> -			   i, j, !i ? 0 : (1UL << (i - 1)) + j);
> +			   i, j, (1UL << (i - 1)) + j);
>  		fini_node->p.reverse_hash =
> -			bit_reverse_ulong(!i ? 0 : (1UL << (i - 1)) + j);
> -		(void) _cds_lfht_del(ht, !i ? 0 : (1UL << (i - 1)),
> -				fini_node, 1);
> +			bit_reverse_ulong((1UL << (i - 1)) + j);
> +		(void) _cds_lfht_del(ht, 1UL << (i - 1), fini_node, 1);
>  	}
>  	ht->cds_lfht_rcu_read_unlock();
>  }
> @@ -1199,7 +1196,7 @@ void fini_table(struct cds_lfht *ht,
>  	for (i = end_order - 1; i >= first_order; i--) {
>  		unsigned long len;
>  
> -		len = !i ? 1 : 1UL << (i - 1);
> +		len = 1UL << (i - 1);
>  		dbg_printf("fini order %lu len: %lu\n", i, len);
>  
>  		/* Stop shrink if the resize target changes under us */
> -- 
> 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