for_each_possible_cpu (i) {
                struct rnd_state *state = &per_cpu(net_rand_state, i);
                state->s1 = __seed(state->s1 ^ entropy, 2);
+               prandom_u32_state(state);
        }
 }
 EXPORT_SYMBOL(prandom_seed);
 }
 core_initcall(prandom_init);
 
+static void __prandom_timer(unsigned long dontcare);
+static DEFINE_TIMER(seed_timer, __prandom_timer, 0, 0);
+
+static void __prandom_timer(unsigned long dontcare)
+{
+       u32 entropy;
+
+       get_random_bytes(&entropy, sizeof(entropy));
+       prandom_seed(entropy);
+       /* reseed every ~60 seconds, in [40 .. 80) interval with slack */
+       seed_timer.expires = jiffies + (40 * HZ + (prandom_u32() % (40 * HZ)));
+       add_timer(&seed_timer);
+}
+
+static void prandom_start_seed_timer(void)
+{
+       set_timer_slack(&seed_timer, HZ);
+       seed_timer.expires = jiffies + 40 * HZ;
+       add_timer(&seed_timer);
+}
+
 /*
  *     Generate better values after random number generator
  *     is fully initialized.
                /* mix it in */
                prandom_u32_state(state);
        }
+       prandom_start_seed_timer();
        return 0;
 }
 late_initcall(prandom_reseed);