From mboxrd@z Thu Jan 1 00:00:00 1970 From: mathieu.desnoyers@efficios.com (Mathieu Desnoyers) Date: Tue, 1 Nov 2011 13:06:02 -0400 Subject: [ltt-dev] [PATCH 3/6] rculfhash: merge duplicated code of cds_lfht_resize_lazy_*() In-Reply-To: References: Message-ID: <20111101170602.GF18068@Krystal> * Lai Jiangshan (laijs at cn.fujitsu.com) wrote: > Signed-off-by: Lai Jiangshan I'll let you refresh and respin this patch due to dependency on patch 2. Thanks! Mathieu > --- > rculfhash.c | 35 ++++++++++++++--------------------- > 1 files changed, 14 insertions(+), 21 deletions(-) > > diff --git a/rculfhash.c b/rculfhash.c > index e97d854..c12ee10 100644 > --- a/rculfhash.c > +++ b/rculfhash.c > @@ -1759,13 +1759,9 @@ void do_resize_cb(struct rcu_head *head) > } > > static > -void cds_lfht_resize_lazy_grow(struct cds_lfht *ht, unsigned long size, int growth) > +void __cds_lfht_resize_lazy_launch(struct cds_lfht *ht) > { > struct rcu_resize_work *work; > - unsigned long target_size = size << growth; > - > - if (resize_target_grow(ht, target_size) >= target_size) > - return; > > /* Store resize_target before read resize_initiated */ > cmm_smp_mb(); > @@ -1784,26 +1780,23 @@ void cds_lfht_resize_lazy_grow(struct cds_lfht *ht, unsigned long size, int grow > } > > static > +void cds_lfht_resize_lazy_grow(struct cds_lfht *ht, unsigned long size, int growth) > +{ > + unsigned long target_size = size << growth; > + > + if (resize_target_grow(ht, target_size) >= target_size) > + return; > + > + __cds_lfht_resize_lazy_launch(ht); > +} > + > +static > void cds_lfht_resize_lazy_count(struct cds_lfht *ht, unsigned long size, > unsigned long count) > { > - struct rcu_resize_work *work; > - > if (!(ht->flags & CDS_LFHT_AUTO_RESIZE)) > return; > + > resize_target_update_count(ht, count); > - /* Store resize_target before read resize_initiated */ > - cmm_smp_mb(); > - if (!CMM_LOAD_SHARED(ht->t.resize_initiated)) { > - uatomic_inc(&ht->in_progress_resize); > - cmm_smp_mb(); /* increment resize count before load destroy */ > - if (CMM_LOAD_SHARED(ht->in_progress_destroy)) { > - uatomic_dec(&ht->in_progress_resize); > - return; > - } > - work = malloc(sizeof(*work)); > - work->ht = ht; > - ht->cds_lfht_call_rcu(&work->head, do_resize_cb); > - CMM_STORE_SHARED(ht->t.resize_initiated, 1); > - } > + __cds_lfht_resize_lazy_launch(ht); > } > -- > 1.7.4.4 > -- Mathieu Desnoyers Operating System Efficiency R&D Consultant EfficiOS Inc. http://www.efficios.com