Messages in this thread | | | Date | Thu, 3 Oct 2019 12:31:38 -0400 (EDT) | From | Mathieu Desnoyers <> | Subject | Re: [PATCH tip/core/rcu 1/9] rcu: Upgrade rcu_swap_protected() to rcu_replace() |
| |
----- On Oct 3, 2019, at 9:08 AM, rostedt rostedt@goodmis.org wrote:
> On Thu, 03 Oct 2019 09:39:17 +0100 > David Howells <dhowells@redhat.com> wrote: > >> paulmck@kernel.org wrote: >> >> > +#define rcu_replace(rcu_ptr, ptr, c) \ >> > +({ \ >> > + typeof(ptr) __tmp = rcu_dereference_protected((rcu_ptr), (c)); \ >> > + rcu_assign_pointer((rcu_ptr), (ptr)); \ >> > + __tmp; \ >> > +}) >> >> Does it make sense to actually use xchg() if that's supported by the arch? >> > > Hmm, is there really any arch that doesn't support xchg()? It would be > very hard to do any kind of atomic operations without it. > > cmpxchg() is the one that I understand is optional by the arch.
I remember going through all kernel arch headers myself and introduce irq-off-based xchg and cmpxchg generic implementations for all UP architectures lacking cmpxchg/xchg instructions.
We might want to consider simply using xchg() here.
FWIW, the API exposed by the Userspace RCU project (liburcu) for this is:
rcu_xchg_pointer()
Thanks,
Mathieu
-- Mathieu Desnoyers EfficiOS Inc. http://www.efficios.com
| |