Skip to content

Commit 534d2ea

Browse files
committed
random: schedule mix_interrupt_randomness() less often
It used to be that mix_interrupt_randomness() would credit 1 bit each time it ran, and so add_interrupt_randomness() would schedule mix() to run every 64 interrupts, a fairly arbitrary number, but nonetheless considered to be a decent enough conservative estimate. Since e3e33fc ("random: do not use input pool from hard IRQs"), mix() is now able to credit multiple bits, depending on the number of calls to add(). This was done for reasons separate from this commit, but it has the nice side effect of enabling this patch to schedule mix() less often. Currently the rules are: a) Credit 1 bit for every 64 calls to add(). b) Schedule mix() once a second that add() is called. c) Schedule mix() once every 64 calls to add(). Rules (a) and (c) no longer need to be coupled. It's still important to have _some_ value in (c), so that we don't "over-saturate" the fast pool, but the once per second we get from rule (b) is a plenty enough baseline. So, by increasing the 64 in rule (c) to something larger, we avoid calling queue_work_on() as frequently during irq storms. This commit changes that 64 in rule (c) to be 1024, which means we schedule mix() 16 times less often. And it does *not* need to change the 64 in rule (a). Fixes: 58340f8 ("random: defer fast pool mixing to worker") Cc: [email protected] Cc: Dominik Brodowski <[email protected]> Acked-by: Sebastian Andrzej Siewior <[email protected]> Signed-off-by: Jason A. Donenfeld <[email protected]>
1 parent a111daf commit 534d2ea

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

drivers/char/random.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1009,7 +1009,7 @@ void add_interrupt_randomness(int irq)
10091009
if (new_count & MIX_INFLIGHT)
10101010
return;
10111011

1012-
if (new_count < 64 && !time_is_before_jiffies(fast_pool->last + HZ))
1012+
if (new_count < 1024 && !time_is_before_jiffies(fast_pool->last + HZ))
10131013
return;
10141014

10151015
if (unlikely(!fast_pool->mix.func))

0 commit comments

Comments
 (0)