Messages in this thread | | | Date | Tue, 17 Dec 2013 11:27:29 -0800 | Subject | Re: [PATCH v7 1/4] qrwlock: A queue read/write lock implementation | From | Linus Torvalds <> |
| |
On Tue, Dec 17, 2013 at 11:21 AM, Paul E. McKenney <paulmck@linux.vnet.ibm.com> wrote: > > Looks like xadd() is x86-specific, but this is common code. One > approach would be to do xadd() for other arches, another approach > would be to make .rw be an atomic_t rather than a u32. Making it > be atomic_t is probably easiest. (The cmpxchg()s would then need > to be atomic_cmpxchg().)
Note that "xadd()" has different semantics from "atomic_add_return()".
xadd() returns the original value, while atomic_add_return() returns the result of the addition.
In this case, we seem to want the xadd() semantics. I guess we can use "atomic_add_return(val,&atomic)-val" and just assume that the compiler gets it right (with the addition and the subtraction cancelling out). Or maybe we should have a "atomic_add_return_original()" with xadd semantics?
Linus
| |