2022-05-27 04:07:15

by Uros Bizjak

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

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 <[email protected]>
Cc: Linus Torvalds <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Cc: Thomas Gleixner <[email protected]>
Cc: [email protected]
Cc: [email protected]
---
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