Omit call to rnd_getmore from rnd_process_events.

There are three cases to consider here:

1. You have on-demand synchronous rndsources, e.g. RDRAND (and you're
willing to use it).  In that case, you'll just use those whenever you
need to extract entropy.  There's no benefit to requesting more from
them when we're entering data into the pool.

2. You have on-demand asynchronous rndsources.  These should continue
trying to feed data to the entropy pool as long as it needs more, so
there's no benefit to requesting more from them when we're entering
data into the pool.

3. You don't have any on-demand rndsources.  Then rnd_getmore does
nothing, so there's no benefit to calling it.

ok tls
This commit is contained in:
riastradh 2016-02-17 00:57:36 +00:00
parent 0cbde2cd73
commit 3d1bee43d3
1 changed files with 3 additions and 8 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: kern_rndq.c,v 1.76 2016/02/17 00:43:42 riastradh Exp $ */
/* $NetBSD: kern_rndq.c,v 1.77 2016/02/17 00:57:36 riastradh Exp $ */
/*-
* Copyright (c) 1997-2013 The NetBSD Foundation, Inc.
@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: kern_rndq.c,v 1.76 2016/02/17 00:43:42 riastradh Exp $");
__KERNEL_RCSID(0, "$NetBSD: kern_rndq.c,v 1.77 2016/02/17 00:57:36 riastradh Exp $");
#include <sys/param.h>
#include <sys/atomic.h>
@ -1127,15 +1127,10 @@ skip: SIMPLEQ_INSERT_TAIL(&df_samples, sample, next);
/*
* If we filled the pool past the threshold, wake anyone
* waiting for entropy. Otherwise, ask all the entropy sources
* for more.
* waiting for entropy.
*/
if (pool_entropy > RND_ENTROPY_THRESHOLD * 8) {
wake++;
} else {
rnd_getmore(howmany((RND_POOLBITS - pool_entropy), NBBY));
rnd_printf_verbose("rnd: empty, asking for %d bytes\n",
(int)(howmany((RND_POOLBITS - pool_entropy), NBBY)));
}
/* Now we hold no locks: clean up. */