random: credit architectural init the exact amount
[linux-2.6-microblaze.git] / drivers / char / random.c
index 95982dc..2906259 100644 (file)
@@ -927,9 +927,8 @@ static struct notifier_block pm_notifier = { .notifier_call = random_pm_notifica
  */
 int __init random_init(const char *command_line)
 {
-       size_t i;
        ktime_t now = ktime_get_real();
-       bool arch_init = true;
+       unsigned int i, arch_bytes;
        unsigned long rv;
 
 #if defined(LATENT_ENTROPY_PLUGIN)
@@ -937,11 +936,12 @@ int __init random_init(const char *command_line)
        _mix_pool_bytes(compiletime_seed, sizeof(compiletime_seed));
 #endif
 
-       for (i = 0; i < BLAKE2S_BLOCK_SIZE; i += sizeof(rv)) {
+       for (i = 0, arch_bytes = BLAKE2S_BLOCK_SIZE;
+            i < BLAKE2S_BLOCK_SIZE; i += sizeof(rv)) {
                if (!arch_get_random_seed_long_early(&rv) &&
                    !arch_get_random_long_early(&rv)) {
                        rv = random_get_entropy();
-                       arch_init = false;
+                       arch_bytes -= sizeof(rv);
                }
                _mix_pool_bytes(&rv, sizeof(rv));
        }
@@ -952,8 +952,8 @@ int __init random_init(const char *command_line)
 
        if (crng_ready())
                crng_reseed();
-       else if (arch_init && trust_cpu)
-               credit_init_bits(BLAKE2S_BLOCK_SIZE * 8);
+       else if (trust_cpu)
+               credit_init_bits(arch_bytes * 8);
 
        WARN_ON(register_pm_notifier(&pm_notifier));