lkml.org 
[lkml]   [2022]   [Jun]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 002/102] random: schedule mix_interrupt_randomness() less often
    Date
    From: Jason A. Donenfeld <Jason@zx2c4.com>

    commit 534d2eaf1970274150596fdd2bf552721e65d6b2 upstream.

    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 e3e33fc2ea7f ("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: 58340f8e952b ("random: defer fast pool mixing to worker")
    Cc: stable@vger.kernel.org
    Cc: Dominik Brodowski <linux@dominikbrodowski.net>
    Acked-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/char/random.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    --- a/drivers/char/random.c
    +++ b/drivers/char/random.c
    @@ -1001,7 +1001,7 @@ void add_interrupt_randomness(int irq)
    if (new_count & MIX_INFLIGHT)
    return;

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

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

    \
     
     \ /
      Last update: 2022-06-27 13:25    [W:4.262 / U:0.036 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site