[PATCH 0/2] locking/lockref: Use try_cmpxchg64 in CMPXCHG_LOOP macro

From: Uros Bizjak
Date: Wed May 25 2022 - 10:40:35 EST


This patch series introduces try_cmpxchg64 into CMPXCHG_LOOP macro
to improve generated code a bit. x86 CMPXCHG instruction returns success
in ZF flag, so a compare after CMPXCHG and a related move instruction
can be eliminated.

The second patch (optionally) enables lockless reference count updates
for X86_32 target with X86_CMPXCHG64 config flag set. When try_cmpxchg64
is used in CMPXCHG_LOOP macro in lib/lockref.c, the compiler avoids
double-word compare and related move and produces quite optimal code
around CMPXCHG8B for a register starved X86_32 target.

Signed-off-by: Uros Bizjak <ubizjak@xxxxxxxxx>
Cc: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
Cc: Waiman.Long@xxxxxx
Cc: paulmck@xxxxxxxxxxxxxxxxxx
---
Uros Bizjak (2):
locking/lockref: Use try_cmpxchg64 in CMPXCHG_LOOP macro
locking/lockref/x86: Enable ARCH_USE_CMPXCHG_LOCKREF for X86_32 &&
X86_CMPXCHG64

arch/x86/Kconfig | 2 +-
lib/lockref.c | 9 ++++-----
2 files changed, 5 insertions(+), 6 deletions(-)

--
2.35.3