x86: atomic64: Improve atomic64_read()
authorEric Dumazet <eric.dumazet@gmail.com>
Fri, 3 Jul 2009 10:14:27 +0000 (12:14 +0200)
committerIngo Molnar <mingo@elte.hu>
Fri, 3 Jul 2009 11:26:40 +0000 (13:26 +0200)
commitaacf682fd8c66b57383c407eecd9d4a28264ee91
tree98179e43e4d15177acb09958d6ef560a46cc88ae
parentb7882b7c65abb00194bdb3d4a22d27d70fcc59ba
x86: atomic64: Improve atomic64_read()

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: Linus 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: Ingo Molnar <mingo@elte.hu>
arch/x86/lib/atomic64_32.c