Messages in this thread | | | From | NeilBrown <> | Date | Sun, 06 May 2018 07:45:43 +1000 | Subject | Re: [PATCH 3/8] rhashtable: use cmpxchg() to protect ->future_tbl. |
| |
On Sat, May 05 2018, Herbert Xu wrote:
> On Fri, May 04, 2018 at 01:54:14PM +1000, NeilBrown wrote: >> Rather than borrowing one of the bucket locks to >> protect ->future_tbl updates, use cmpxchg(). >> This gives more freedom to change how bucket locking >> is implemented. >> >> Signed-off-by: NeilBrown <neilb@suse.com> > > This looks nice. > >> - spin_unlock_bh(old_tbl->locks); >> + rcu_assign_pointer(tmp, new_tbl); > > Do we need this barrier since cmpxchg is supposed to provide memory > barrier semantics?
It's hard to find documentation even for what cmpxchg() is meant do, let alone what barriers is provides, but there does seem to be something hidden in Documentation/core-api/atomic_ops.rst which suggests full barrier semantics if the comparison succeeds. I'll replace the rcu_assign_pointer with a comment saying why it isn't needed.
Thanks, NeilBrown
> >> + if (cmpxchg(&old_tbl->future_tbl, NULL, tmp) != NULL) >> + return -EEXIST; > > Thanks, > -- > Email: Herbert Xu <herbert@gondor.apana.org.au> > Home Page: http://gondor.apana.org.au/~herbert/ > PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt [unhandled content-type:application/pgp-signature] | |