Messages in this thread | | | From | Uros Bizjak <> | Subject | [PATCH 0/2] locking/lockref: Use try_cmpxchg64 in CMPXCHG_LOOP macro | Date | Wed, 25 May 2022 16:40:11 +0200 |
| |
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@gmail.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Waiman.Long@hp.com Cc: paulmck@linux.vnet.ibm.com --- 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
| |