• Uros Bizjak's avatar
    locking/rtmutex: Use try_cmpxchg_relaxed() in mark_rt_mutex_waiters() · ce3576eb
    Uros Bizjak authored
    Use try_cmpxchg() instead of cmpxchg(*ptr, old, new) == old.
    
    The x86 CMPXCHG instruction returns success in the ZF flag, so this change
    saves a compare after CMPXCHG (and related move instruction in front of CMPXCHG).
    
    Also, try_cmpxchg() implicitly assigns old *ptr value to "old" when CMPXCHG
    fails. There is no need to re-read the value in the loop.
    
    Note that the value from *ptr should be read using READ_ONCE() to prevent
    the compiler from merging, refetching or reordering the read.
    
    No functional change intended.
    Signed-off-by: default avatarUros Bizjak <ubizjak@gmail.com>
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Waiman Long <longman@redhat.com>
    Cc: Will Deacon <will.deacon@arm.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Paul E. McKenney <paulmck@kernel.org>
    Link: https://lore.kernel.org/r/20240124104953.612063-1-ubizjak@gmail.com
    ce3576eb
rtmutex.c 50.7 KB