]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/blobdiff - drivers/char/random.c
random: initialize the non-blocking pool via add_hwgenerator_randomness()
[mirror_ubuntu-zesty-kernel.git] / drivers / char / random.c
index 0158d3bff7e553a7b57ca3c9ad6aa25dd469411c..4e2627a8d22671bed9459245a356592a6ffdac4c 100644 (file)
@@ -1849,12 +1849,18 @@ void add_hwgenerator_randomness(const char *buffer, size_t count,
 {
        struct entropy_store *poolp = &input_pool;
 
-       /* Suspend writing if we're above the trickle threshold.
-        * We'll be woken up again once below random_write_wakeup_thresh,
-        * or when the calling thread is about to terminate.
-        */
-       wait_event_interruptible(random_write_wait, kthread_should_stop() ||
+       if (unlikely(nonblocking_pool.initialized == 0))
+               poolp = &nonblocking_pool;
+       else {
+               /* Suspend writing if we're above the trickle
+                * threshold.  We'll be woken up again once below
+                * random_write_wakeup_thresh, or when the calling
+                * thread is about to terminate.
+                */
+               wait_event_interruptible(random_write_wait,
+                                        kthread_should_stop() ||
                        ENTROPY_BITS(&input_pool) <= random_write_wakeup_bits);
+       }
        mix_pool_bytes(poolp, buffer, count);
        credit_entropy_bits(poolp, entropy);
 }