Hi Dominik, Thanks for the patch. One trivial nit and one question: On Thu, Dec 2, 2021 at 6:35 AM Dominik Brodowski <linux@xxxxxxxxxxxxxxxxxxxx> wrote: > + /* We cannot do much with the input pool until it is set up in > + * rand_initalize(); therefore just mix into the crng state. I think you meant "rand_initialize()" here (missing 'i'). > If the added entropy suffices to increase crng_init to 1, future calls > to add_bootloader_randomness() or add_hwgenerator_randomness() used to > progress to credit_entropy_bits(). However, if the input pool is not yet > properly set up, the cmpxchg call within that function can lead to an > infinite recursion. I see what this patch does with crng_global_init_time, and that seems probably sensible, but I didn't understand this part of the reasoning in the commit message; I might just be a bit slow here. Where's the recursion exactly? Or even an infinite loop? As far as I can tell, that portion of credit_entropy_bits() breaks down as: retry: entropy_count = orig = READ_ONCE(r->entropy_count); [ ... do some arithmetic on entropy_count ... ] if (cmpxchg(&r->entropy_count, orig, entropy_count) != orig) goto retry; Why would this be infinite? Why wouldn't the cmpxchg eventually converge to a stable value? I don't see any call that modifies r->entropy_count or orig from inside that block. Is there some other super-spinny concurrent operation? Thanks, Jason