• Uros Bizjak's avatar
    locking/lockref/x86: Enable ARCH_USE_CMPXCHG_LOCKREF for X86_CMPXCHG64 · a432b7c0
    Uros Bizjak authored
    The following commit:
    
      bc08b449 ("lockref: implement lockless reference count updates using cmpxchg()")
    
    enabled lockless reference count updates using cmpxchg() only for x86_64,
    and left x86_32 behind due to inability to detect support for
    cmpxchg8b instruction.
    
    Nowadays, we can use CONFIG_X86_CMPXCHG64 for this purpose. Also,
    by using try_cmpxchg64() instead of cmpxchg64() in the CMPXCHG_LOOP macro,
    the compiler actually produces sane code, improving the
    lockref_get_not_zero() main loop from:
    
      eb:	8d 48 01             	lea    0x1(%eax),%ecx
      ee:	85 c0                	test   %eax,%eax
      f0:	7e 2f                	jle    121 <lockref_get_not_zero+0x71>
      f2:	8b 44 24 10          	mov    0x10(%esp),%eax
      f6:	8b 54 24 14          	mov    0x14(%esp),%edx
      fa:	8b 74 24 08          	mov    0x8(%esp),%esi
      fe:	f0 0f c7 0e          	lock cmpxchg8b (%esi)
     102:	8b 7c 24 14          	mov    0x14(%esp),%edi
     106:	89 c1                	mov    %eax,%ecx
     108:	89 c3                	mov    %eax,%ebx
     10a:	8b 74 24 10          	mov    0x10(%esp),%esi
     10e:	89 d0                	mov    %edx,%eax
     110:	31 fa                	xor    %edi,%edx
     112:	31 ce                	xor    %ecx,%esi
     114:	09 f2                	or     %esi,%edx
     116:	75 58                	jne    170 <lockref_get_not_zero+0xc0>
    
    to:
    
     350:	8d 4f 01             	lea    0x1(%edi),%ecx
     353:	85 ff                	test   %edi,%edi
     355:	7e 79                	jle    3d0 <lockref_get_not_zero+0xb0>
     357:	f0 0f c7 0e          	lock cmpxchg8b (%esi)
     35b:	75 53                	jne    3b0 <lockref_get_not_zero+0x90>
    Signed-off-by: default avatarUros Bizjak <ubizjak@gmail.com>
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    Acked-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    Link: https://lore.kernel.org/r/20230918184050.9180-1-ubizjak@gmail.com
    a432b7c0
Kconfig 97.3 KB