----- On Oct 3, 2019, at 9:08 AM, rostedt rost...@goodmis.org wrote:

> On Thu, 03 Oct 2019 09:39:17 +0100
> David Howells <dhowe...@redhat.com> wrote:
> 
>> paul...@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

Reply via email to