On 7/13/22 16:11, Jason A. Donenfeld wrote: > Currently the jitter mechanism will require two timer ticks per > iteration, and it requires N iterations per bit. This N is determined > with a small measurement, and if it's too big, it won't waste time with > jitter entropy because it'd take too long or not have sufficient entropy > anyway. > > With the current max N of 32, there are large timeouts on systems with a > small CONFIG_HZ. Rather than set that maximum to 32, instead choose a > factor of CONFIG_HZ. In this case, 1/30 seems to yield sane values for > different configurations of CONFIG_HZ. > > Reported-by: Vladimir Murzin <vladimir.murzin@xxxxxxx> > Fixes: 78c768e619fb ("random: vary jitter iterations based on cycle counter speed") > Signed-off-by: Jason A. Donenfeld <Jason@xxxxxxxxx> > --- > Vladimir - Can you let me know if this appears to fix the issue you're > seeing? -Jason Works for me, thanks! :) > > drivers/char/random.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/char/random.c b/drivers/char/random.c > index e3dd1dd3dd22..a1af90bacc9f 100644 > --- a/drivers/char/random.c > +++ b/drivers/char/random.c > @@ -1174,7 +1174,7 @@ static void __cold entropy_timer(struct timer_list *timer) > */ > static void __cold try_to_generate_entropy(void) > { > - enum { NUM_TRIAL_SAMPLES = 8192, MAX_SAMPLES_PER_BIT = 32 }; > + enum { NUM_TRIAL_SAMPLES = 8192, MAX_SAMPLES_PER_BIT = HZ / 30 }; > struct entropy_timer_state stack; > unsigned int i, num_different = 0; > unsigned long last = random_get_entropy(); FWIW Tested-by: Vladimir Murzin <vladimir.murzin@xxxxxxx> Cheers Vladimir