lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite for Android: free password hash cracker in your pocket
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <aHk9sFNyvzHx6Qjs@slm.duckdns.org>
Date: Thu, 17 Jul 2025 08:15:12 -1000
From: Tejun Heo <tj@...nel.org>
To: Uros Bizjak <ubizjak@...il.com>
Cc: linux-kernel@...r.kernel.org, Lai Jiangshan <jiangshanlai@...il.com>
Subject: Re: [PATCH] workqueue: Use atomic_try_cmpxchg_relaxed() in
 tryinc_node_nr_active()

On Wed, Jul 09, 2025 at 03:19:03PM +0200, Uros Bizjak wrote:
> Use try_cmpxchg() family of locking primitives instead of
> cmpxchg(*ptr, old, new) == old.
> 
> The x86 CMPXCHG instruction returns success in the ZF flag, so this
> change saves a compare after CMPXCHG (and related move instruction
> in front of CMPXCHG).
> 
> Also, try_cmpxchg() implicitly assigns old *ptr value to "old" when
> CMPXCHG fails. There is no need to re-read the value in the loop.
> 
> The generated assembly improves from:
> 
>      3f7:	44 8b 0a             	mov    (%rdx),%r9d
>      3fa:	eb 12                	jmp    40e <...>
>      3fc:	8d 79 01             	lea    0x1(%rcx),%edi
>      3ff:	89 c8                	mov    %ecx,%eax
>      401:	f0 0f b1 7a 04       	lock cmpxchg %edi,0x4(%rdx)
>      406:	39 c1                	cmp    %eax,%ecx
>      408:	0f 84 83 00 00 00    	je     491 <...>
>      40e:	8b 4a 04             	mov    0x4(%rdx),%ecx
>      411:	41 39 c9             	cmp    %ecx,%r9d
>      414:	7f e6                	jg     3fc <...>
> 
> to:
> 
>     256b:	45 8b 08             	mov    (%r8),%r9d
>     256e:	41 8b 40 04          	mov    0x4(%r8),%eax
>     2572:	41 39 c1             	cmp    %eax,%r9d
>     2575:	7e 10                	jle    2587 <...>
>     2577:	8d 78 01             	lea    0x1(%rax),%edi
>     257a:	f0 41 0f b1 78 04    	lock cmpxchg %edi,0x4(%r8)
>     2580:	75 f0                	jne    2572 <...>
> 
> No functional change intended.
> 
> Signed-off-by: Uros Bizjak <ubizjak@...il.com>
> Cc: Tejun Heo <tj@...nel.org>
> Cc: Lai Jiangshan <jiangshanlai@...il.com>

Applied to wq/for-6.17.

Thanks.

-- 
tejun

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ