random: use try_cmpxchg in _credit_init_bits
authorUros Bizjak <ubizjak@gmail.com>
Thu, 14 Jul 2022 18:28:22 +0000 (20:28 +0200)
committerJason A. Donenfeld <Jason@zx2c4.com>
Mon, 18 Jul 2022 13:04:04 +0000 (15:04 +0200)
commitb7a68f67ff4911e8a842d03f6f97fa91a8d483f5
tree14f878e40474fd14b5cfb224b794e8e5e1919f3f
parentb8ac29b40183a6038919768b5d189c9bd91ce9b4
random: use try_cmpxchg in _credit_init_bits

Use `!try_cmpxchg(ptr, &orig, new)` instead of `cmpxchg(ptr, orig, new)
!= orig` in _credit_init_bits. This has two benefits:

- The x86 cmpxchg instruction returns success in the ZF flag, so this
  change saves a compare after cmpxchg, as well as a related move
  instruction in front of cmpxchg.

- try_cmpxchg implicitly assigns the *ptr value to &orig when cmpxchg
  fails, enabling further code simplifications.

This patch has no functional change.

Signed-off-by: Uros Bizjak <ubizjak@gmail.com>
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
drivers/char/random.c