• Uros Bizjak's avatar
    locking/atomic/x86: Introduce arch_try_cmpxchg64() for !CONFIG_X86_CMPXCHG64 · aef95dac
    Uros Bizjak authored
    Commit:
    
      6d12c8d3 ("percpu: Wire up cmpxchg128")
    
    improved emulated cmpxchg8b_emu() library function to return
    success/failure in a ZF flag.
    
    Define arch_try_cmpxchg64() for !CONFIG_X86_CMPXCHG64 targets
    to override the generic archy_try_cmpxchg() with an optimized
    target specific implementation that handles ZF flag.
    
    The assembly code at the call sites improves from:
    
       bf56d:	e8 fc ff ff ff       	call   cmpxchg8b_emu
       bf572:	8b 74 24 28          	mov    0x28(%esp),%esi
       bf576:	89 c3                	mov    %eax,%ebx
       bf578:	89 d1                	mov    %edx,%ecx
       bf57a:	8b 7c 24 2c          	mov    0x2c(%esp),%edi
       bf57e:	89 f0                	mov    %esi,%eax
       bf580:	89 fa                	mov    %edi,%edx
       bf582:	31 d8                	xor    %ebx,%eax
       bf584:	31 ca                	xor    %ecx,%edx
       bf586:	09 d0                	or     %edx,%eax
       bf588:	0f 84 e3 01 00 00    	je     bf771 <...>
    
    to:
    
       bf572:	e8 fc ff ff ff       	call   cmpxchg8b_emu
       bf577:	0f 84 b6 01 00 00    	je     bf733 <...>
    Signed-off-by: default avatarUros Bizjak <ubizjak@gmail.com>
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Link: https://lore.kernel.org/r/20240408091547.90111-4-ubizjak@gmail.com
    aef95dac
cmpxchg_32.h 4.02 KB