Mirror of the lttng-dev mailing list
 help / color / mirror / Atom feed
From: mathieu.desnoyers@efficios.com (Mathieu Desnoyers)
Subject: [ltt-dev] [PATCH 3/9] add cds_lfht_add_at()
Date: Fri, 18 Nov 2011 09:29:43 -0500	[thread overview]
Message-ID: <20111118142943.GA25096@Krystal> (raw)
In-Reply-To: <4EC22183.1050900@cn.fujitsu.com>

* Lai Jiangshan (laijs at cn.fujitsu.com) wrote:
> It seems that the testing patches have a strange problem, please wait
> before merge it.

Hi Lai,

I'm still waiting to hear from you before pulling the testing patches.
One thought that occurs to me is that we should probably create a second
hash table test program alongside with the existing one.

The test program currently in the tree can also be used as an example of
how to use the hash table. The modifications you bring are interesting
for testing subtle corner-cases, but these transform the test program in
a synthetic workload that cannot be used as a usage example.

So, what are your thoughts about creating a second hash table test
program ? It can very well be derived from a copy of test_urcu_hash, no
problem there. We could event rename the current test_urcu_hash into
example_urcu_hash.c ?

Thanks,

Mathieu

> 
> Thanks,
> Lai
> 
> On 11/14/2011 12:50 PM, Lai Jiangshan wrote:
> > Signed-off-by: Lai Jiangshan <laijs at cn.fujitsu.com>
> > ---
> >  rculfhash.c      |   24 +++++++++++++++++++++++-
> >  urcu/rculfhash.h |   14 ++++++++++++++
> >  2 files changed, 37 insertions(+), 1 deletions(-)
> > 
> > diff --git a/rculfhash.c b/rculfhash.c
> > index cbfc79e..70f5863 100644
> > --- a/rculfhash.c
> > +++ b/rculfhash.c
> > @@ -1495,12 +1495,34 @@ void cds_lfht_add(struct cds_lfht *ht, unsigned long hash,
> >  {
> >  	unsigned long size;
> >  
> > -	node->reverse_hash = bit_reverse_ulong((unsigned long) hash);
> > +	node->reverse_hash = bit_reverse_ulong(hash);
> >  	size = rcu_dereference(ht->t.size);
> >  	_cds_lfht_add(ht, NULL, NULL, size, node, NULL, 0);
> >  	ht_count_add(ht, size, hash);
> >  }
> >  
> > +bool cds_lfht_add_at(struct cds_lfht *ht, struct cds_lfht_iter *iter,
> > +		unsigned long hash, struct cds_lfht_node *node)
> > +{
> > +	struct cds_lfht_node *new_node;
> > +
> > +	if (caa_unlikely(is_removed(iter->next)))
> > +		return false;
> > +
> > +	node->reverse_hash = bit_reverse_ulong(hash);
> > +	node->next = clear_flag(iter->next);
> > +	if (is_bucket(iter->next))
> > +		new_node = flag_bucket(node);
> > +	else
> > +		new_node = node;
> > +	if (uatomic_cmpxchg(&iter->node->next, iter->next,
> > +			new_node) != iter->next)
> > +		return false;
> > +
> > +	ht_count_add(ht, rcu_dereference(ht->t.size), hash);
> > +	return true;
> > +}
> > +
> >  struct cds_lfht_node *cds_lfht_add_unique(struct cds_lfht *ht,
> >  				unsigned long hash,
> >  				cds_lfht_match_fct match,
> > diff --git a/urcu/rculfhash.h b/urcu/rculfhash.h
> > index 7d919d0..0f9bf44 100644
> > --- a/urcu/rculfhash.h
> > +++ b/urcu/rculfhash.h
> > @@ -250,6 +250,20 @@ void cds_lfht_add(struct cds_lfht *ht, unsigned long hash,
> >  		struct cds_lfht_node *node);
> >  
> >  /*
> > + * cds_lfht_add_at - add a node to the hash table at the specified place.
> > + * @ht: the hash table.
> > + * @iter: the specified place to insert
> > + * @hash: the key hash.
> > + * @node: the node to add.
> > + *
> > + * This function supports adding redundant keys into the table.
> > + * Call with rcu_read_lock held.
> > + * Threads calling this API need to be registered RCU read-side threads.
> > + */
> > +bool cds_lfht_add_at(struct cds_lfht *ht, struct cds_lfht_iter *iter,
> > +		unsigned long hash, struct cds_lfht_node *node);
> > +
> > +/*
> >   * cds_lfht_add_unique - add a node to hash table, if key is not present.
> >   * @ht: the hash table.
> >   * @hash: the node's hash.
> 

-- 
Mathieu Desnoyers
Operating System Efficiency R&D Consultant
EfficiOS Inc.
http://www.efficios.com




  parent reply	other threads:[~2011-11-18 14:29 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-11-14  4:50 [ltt-dev] [PATCH 0/9] change lfht test Lai Jiangshan
2011-11-14  4:50 ` [ltt-dev] [PATCH 1/9] Fix arguments order Lai Jiangshan
2011-11-14 12:57   ` Mathieu Desnoyers
2011-11-14  4:50 ` [ltt-dev] [PATCH 2/9] keep the last position for failed lookup Lai Jiangshan
2011-11-15 11:10   ` Mathieu Desnoyers
2011-11-16  8:33     ` Lai Jiangshan
2011-11-14  4:50 ` [ltt-dev] [PATCH 3/9] add cds_lfht_add_at() Lai Jiangshan
2011-11-15  8:23   ` Lai Jiangshan
2011-11-15 11:07     ` Mathieu Desnoyers
2011-11-18 14:29     ` Mathieu Desnoyers [this message]
2011-11-21  3:15       ` Lai Jiangshan
2011-11-22  9:41         ` Mathieu Desnoyers
2011-11-14  4:50 ` [ltt-dev] [PATCH 4/9] new random generator Lai Jiangshan
2011-11-15 11:17   ` Mathieu Desnoyers
2011-11-14  4:50 ` [ltt-dev] [PATCH 5/9] use random value for hash value directly Lai Jiangshan
2011-11-15 11:20   ` Mathieu Desnoyers
2011-11-16  8:41     ` Lai Jiangshan
2011-11-14  4:50 ` [ltt-dev] [PATCH 6/9] test hash value Confilict with buckets Lai Jiangshan
2011-11-15 11:22   ` Mathieu Desnoyers
2011-11-16  8:53     ` Lai Jiangshan
2011-11-14  4:50 ` [ltt-dev] [PATCH 7/9] add identical-hash-value-chain test Lai Jiangshan
2011-11-15 11:24   ` Mathieu Desnoyers
2011-11-16  8:55     ` Lai Jiangshan
2011-11-14  4:50 ` [ltt-dev] [PATCH 8/9] add duplicated node test Lai Jiangshan
2011-11-15 11:31   ` Mathieu Desnoyers
2011-11-16  9:16     ` Lai Jiangshan
2011-11-14  4:50 ` [ltt-dev] [PATCH 9/9] change strategy for AR_RANDOM Lai Jiangshan
2011-11-15 11:35   ` Mathieu Desnoyers
2011-11-16  9:26     ` Lai Jiangshan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20111118142943.GA25096@Krystal \
    --to=mathieu.desnoyers@efficios.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox