]> Zhao Yanbai Git Server - minix.git/commitdiff
kernel, random: adaptive entropy gathering 40/540/2
authorBen Gras <ben@minix3.org>
Sun, 5 May 2013 23:52:34 +0000 (23:52 +0000)
committerBen Gras <ben@minix3.org>
Tue, 7 May 2013 17:19:06 +0000 (17:19 +0000)
kernel: stop gathering timestamps once the bin is full per interrupt

random: once seeded, retrieve new entropy at a lower rate

Change-Id: I4ce6081d39274728d82c6889686d1650cfd5fc2e

drivers/random/main.c
lib/libsys/arch/i386/get_randomness.c

index f2a65db8c51f5ce2201d2a23c04e9c73d76244d0..18ed36d34dcf5977fc1f4fe26d714a39b5acf08f 100644 (file)
@@ -273,6 +273,7 @@ static void r_random(message *UNUSED(m_ptr))
   static struct k_randomness_bin krandom_bin;
   u32_t hi, lo;
   rand_t r;
+  int nextperiod = random_isseeded() ? KRANDOM_PERIOD*500 : KRANDOM_PERIOD;
 
   bin = (bin+1) % RANDOM_SOURCES;
 
@@ -285,7 +286,7 @@ static void r_random(message *UNUSED(m_ptr))
   random_update(RND_TIMING, &r, 1);
 
   /* Schedule new alarm for next m_random call. */
-  if (OK != (s=sys_setalarm(KRANDOM_PERIOD, 0)))
+  if (OK != (s=sys_setalarm(nextperiod, 0)))
        printf("RANDOM: sys_setalarm failed: %d\n", s);
 }
 
index 720f674722c1112157ac2de82bc8dc4e628bf586..0a7f9e9d5c9ed209f1590b6ba8482d535053d48c 100644 (file)
@@ -22,6 +22,7 @@ int source;
   unsigned long tsc_high, tsc_low;
  
   source %= RANDOM_SOURCES;
+  if (rand->bin[source].r_size >= RANDOM_ELEMENTS) return;
   r_next= rand->bin[source].r_next;  
   read_tsc((u32_t *) &tsc_high, (u32_t *) &tsc_low);
   rand->bin[source].r_buf[r_next] = tsc_low;