• Andrea Parri's avatar
    locking/xchg/alpha: Fix xchg() and cmpxchg() memory ordering bugs · 472e8c55
    Andrea Parri authored
    
    
    Successful RMW operations are supposed to be fully ordered, but
    Alpha's xchg() and cmpxchg() do not meet this requirement.
    
    Will Deacon noticed the bug:
    
      > So MP using xchg:
      >
      > WRITE_ONCE(x, 1)
      > xchg(y, 1)
      >
      > smp_load_acquire(y) == 1
      > READ_ONCE(x) == 0
      >
      > would be allowed.
    
    ... which thus violates the above requirement.
    
    Fix it by adding a leading smp_mb() to the xchg() and cmpxchg() implementations.
    Reported-by: default avatarWill Deacon <will.deacon@arm.com>
    Signed-off-by: default avatarAndrea Parri <parri.andrea@gmail.com>
    Acked-by: default avatarPaul E. McKenney <paulmck@linux.vnet.ibm.com>
    Cc: Alan Stern <stern@rowland.harvard.edu>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Matt Turner <mattst88@gmail.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Richard Henderson <rth@twiddle.net>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: linux-alpha@vger.ke...
    472e8c55
xchg.h 5.73 KB