mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-27 19:29:37 +00:00
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>
This commit is contained in:
parent
b8ac29b401
commit
b7a68f67ff
1 changed files with 2 additions and 2 deletions
|
@ -643,10 +643,10 @@ static void __cold _credit_init_bits(size_t bits)
|
|||
|
||||
add = min_t(size_t, bits, POOL_BITS);
|
||||
|
||||
orig = READ_ONCE(input_pool.init_bits);
|
||||
do {
|
||||
orig = READ_ONCE(input_pool.init_bits);
|
||||
new = min_t(unsigned int, POOL_BITS, orig + add);
|
||||
} while (cmpxchg(&input_pool.init_bits, orig, new) != orig);
|
||||
} while (!try_cmpxchg(&input_pool.init_bits, &orig, new));
|
||||
|
||||
if (orig < POOL_READY_BITS && new >= POOL_READY_BITS) {
|
||||
crng_reseed(); /* Sets crng_init to CRNG_READY under base_crng.lock. */
|
||||
|
|
Loading…
Reference in a new issue