• Jason A. Donenfeld's avatar
    random: reseed in delayed work rather than on-demand · 9148de31
    Jason A. Donenfeld authored
    Currently, we reseed when random bytes are requested, if the current
    seed is too old. Since random bytes can be requested from all contexts,
    including hard IRQ, this means sometimes we wind up adding a bit of
    latency to hard IRQ. This was so much of a problem on s390x that now
    s390x just doesn't provide its architectural RNG from hard IRQ context,
    so we miss out in that case.
    
    Instead, let's just schedule a persistent delayed work, so that the
    reseeding and potentially expensive operations will always happen from
    process context, reducing unexpected latencies from hard IRQ.
    
    This also has the nice effect of accumulating a transcript of random
    inputs over time, since it means that we amass more input values. And it
    should make future vDSO integration a bit easier.
    
    Cc: Harald Freudenberger <freude@linux.ibm.com>
    Cc: Juergen Christ <jchrist@linux.ibm.com>
    Cc: Alexander Gordeev <agordeev@linux.ibm.com>
    Cc: Dominik Brodowski <linux@dominikbrodowski.net>
    Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Cc: Tejun Heo <tj@kernel.org>
    Signed-off-by: default avatarJason A. Donenfeld <Jason@zx2c4.com>
    9148de31
random.c 49.4 KB