Re: [PATCH tip/core/rcu 1/9] rcu: Upgrade rcu_swap_protected() to rcu_replace()

From: Mathieu Desnoyers
Date: Thu Oct 03 2019 - 12:31:54 EST


----- 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