@@ -655,21 +655,20 @@ static void process_random_ready_list(void)
/*
* Based on the pool's current entropy fill level, specified as
- * base_entropy_count, and the number of new entropy bits to add,
- * return the amount of new entropy to credit. If the 'fast'
- * parameter is set to true, the calculation will be guaranteed to
- * terminate quickly, but this comes at the expense of capping
- * nbits to one half of the pool size.
+ * base_entropy_count, and the number of new entropy bits in units of
+ * 2^-ENTROPY_SHIFT to add, return the amount of new entropy to
+ * credit. If the 'fast' parameter is set to true, the calculation
+ * will be guaranteed to terminate quickly, but this comes at the
+ * expense of capping nbits to one half of the pool size.
*/
static unsigned int pool_entropy_delta(struct entropy_store *r,
int base_entropy_count,
- int nbits, bool fast)
+ int nfrac, bool fast)
{
const int pool_size = r->poolinfo->poolfracbits;
int entropy_count = base_entropy_count;
- int nfrac = nbits << ENTROPY_SHIFT;
- if (!nbits)
+ if (!nfrac)
return 0;
/*
@@ -729,7 +728,9 @@ static void credit_entropy_bits(struct entropy_store *r, int nbits)
retry:
orig = READ_ONCE(r->entropy_count);
- entropy_count = orig + pool_entropy_delta(r, orig, nbits, false);
+ entropy_count = orig + pool_entropy_delta(r, orig,
+ nbits << ENTROPY_SHIFT,
+ false);
if (cmpxchg(&r->entropy_count, orig, entropy_count) != orig)
goto retry;
Currently pool_entropy_delta() expects its nbits argument to be given in units of integral bits. Using fractional bits for processing intermediate entropy counts consistently throughout the code will facilitate upcoming changes to the entropy accounting logic in add_interrupt_randomness(). Replace pool_entropy_delta()'s nbits argument with nfrac, which used to be a local variable and is expected to be given in units of 2^-ENTROPY_SHIFT. Adapt the single caller, credit_entropy_bits(), accordingly. Signed-off-by: Nicolai Stange <nstange@suse.de> --- drivers/char/random.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-)