----- On Oct 3, 2019, at 9:08 AM, rostedt rostedt@xxxxxxxxxxx wrote: > On Thu, 03 Oct 2019 09:39:17 +0100 > David Howells <dhowells@xxxxxxxxxx> wrote: > >> paulmck@xxxxxxxxxx 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