• Eric Dumazet's avatar
    x86: atomic64: Improve atomic64_read() · aacf682f
    Eric Dumazet authored
    Linus noticed that the 32-bit version of atomic64_read() was
    being overly complex with re-reading the value and doing a
    retry loop over that.
    
    Instead we can just rely on cmpxchg8b returning either the new
    value or returning the current value.
    
    We can use any 'old' value, which will be faster as it can be
    loaded via immediates. Using some value that is not equal to
    the real value in memory the instruction gets faster.
    
    This also has the advantage that the CPU could avoid dirtying
    the cacheline.
    Reported-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Mike Galbraith <efault@gmx.de>
    Cc: Paul Mackerras <paulus@samba.org>
    Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Frederic Weisbecker <fweisbec@gmail.com>
    Cc: David Howells <dhowells@redhat.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Arnd Bergmann <arnd@arndb.de>
    LKML-Reference: <alpine.LFD.2.01.0907021653030.3210@localhost.localdomain>
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    aacf682f
atomic64_32.c 4.27 KB