• Nick Piggin's avatar
    mutex: speed up generic mutex implementations · a8ddac7e
    Nick Piggin authored
    - atomic operations which both modify the variable and return something imply
      full smp memory barriers before and after the memory operations involved
      (failing atomic_cmpxchg, atomic_add_unless, etc don't imply a barrier because
      they don't modify the target). See Documentation/atomic_ops.txt.
      So remove extra barriers and branches.
    
    - All architectures support atomic_cmpxchg. This has no relation to
      __HAVE_ARCH_CMPXCHG. We can just take the atomic_cmpxchg path unconditionally
    
    This reduces a simple single threaded fastpath lock+unlock test from 590 cycles
    to 203 cycles on a ppc970 system.
    Signed-off-by: default avatarNick Piggin <npiggin@suse.de>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    a8ddac7e
mutex-xchg.h 3.66 KB