Thread (32 messages) 32 messages, 10 authors, 2018-11-05

Re: [RFC PATCH] lib: Introduce generic __cmpxchg_u64() and use it where needed

From: Trond Myklebust <hidden>
Date: 2018-11-01 15:22:23
Also in: linux-mips, linux-nfs, lkml, netdev

On Thu, 2018-11-01 at 15:59 +0100, Peter Zijlstra wrote:
On Thu, Nov 01, 2018 at 01:18:46PM +0000, Mark Rutland wrote:
quoted
quoted
My one question (and the reason why I went with cmpxchg() in the
first
place) would be about the overflow behaviour for
atomic_fetch_inc() and
friends. I believe those functions should be OK on x86, so that
when we
overflow the counter, it behaves like an unsigned value and wraps
back
around.  Is that the case for all architectures?

i.e. are atomic_t/atomic64_t always guaranteed to behave like
u32/u64
on increment?

I could not find any documentation that explicitly stated that
they
should.
Peter, Will, I understand that the atomic_t/atomic64_t ops are
required
to wrap per 2's-complement. IIUC the refcount code relies on this.

Can you confirm?
There is quite a bit of core code that hard assumes 2s-complement.
Not
only for atomics but for any signed integer type. Also see the kernel
using -fno-strict-overflow which implies -fwrapv, which defines
signed
overflow to behave like 2s-complement (and rids us of that particular
UB).
Fair enough, but there have also been bugfixes to explicitly fix unsafe
C standards assumptions for signed integers. See, for instance commit
5a581b367b5d "jiffies: Avoid undefined behavior from signed overflow"
from Paul McKenney.

Anyhow, if the atomic maintainers are willing to stand up and state for
the record that the atomic counters are guaranteed to wrap modulo 2^n
just like unsigned integers, then I'm happy to take Paul's patch.

-- 
Trond Myklebust
Linux NFS client maintainer, Hammerspace
trond.myklebust@hammerspace.com

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help