Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys Back out the recent rnd stop-gap/stop-gap/stop-gap measu...
details: https://anonhg.NetBSD.org/src/rev/61827dc7d424
branches: trunk
changeset: 789621:61827dc7d424
user: riastradh <riastradh%NetBSD.org@localhost>
date: Tue Aug 27 19:30:10 2013 +0000
description:
Back out the recent rnd stop-gap/stop-gap/stop-gap measures.
This reverts
sys/dev/rnd_private.h -> r1.1
sys/kern/init_main.c -> r1.450
sys/kern/kern_rndq.c -> r1.14
sys/kern/kern_rndsink.c -> r1.2
Parts of these changes will be added back, and the rndsource
callbacks will be fixed to avoid the lock recursion bug that
motivated the stop-gaps in the first place.
ok tls
diffstat:
sys/dev/rnd_private.h | 5 +----
sys/kern/init_main.c | 9 ++++-----
sys/kern/kern_rndq.c | 41 ++++++++++++++++++++---------------------
sys/kern/kern_rndsink.c | 6 ++----
4 files changed, 27 insertions(+), 34 deletions(-)
diffs (200 lines):
diff -r c53844ad641a -r 61827dc7d424 sys/dev/rnd_private.h
--- a/sys/dev/rnd_private.h Tue Aug 27 18:29:28 2013 +0000
+++ b/sys/dev/rnd_private.h Tue Aug 27 19:30:10 2013 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: rnd_private.h,v 1.3 2013/08/26 23:41:24 tls Exp $ */
+/* $NetBSD: rnd_private.h,v 1.4 2013/08/27 19:30:10 riastradh Exp $ */
/*-
* Copyright (c) 1997 The NetBSD Foundation, Inc.
@@ -55,7 +55,4 @@
(short read ok) */
uint32_t rnd_extract_data(void *, uint32_t, uint32_t);
-int rnd_process_events(void); /* XXX should be static */
-void rnd_wakeup_readers(void); /* XXX should be static */
-
#endif
diff -r c53844ad641a -r 61827dc7d424 sys/kern/init_main.c
--- a/sys/kern/init_main.c Tue Aug 27 18:29:28 2013 +0000
+++ b/sys/kern/init_main.c Tue Aug 27 19:30:10 2013 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: init_main.c,v 1.451 2013/08/25 21:12:56 tls Exp $ */
+/* $NetBSD: init_main.c,v 1.452 2013/08/27 19:30:10 riastradh Exp $ */
/*-
* Copyright (c) 2008, 2009 The NetBSD Foundation, Inc.
@@ -97,7 +97,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: init_main.c,v 1.451 2013/08/25 21:12:56 tls Exp $");
+__KERNEL_RCSID(0, "$NetBSD: init_main.c,v 1.452 2013/08/27 19:30:10 riastradh Exp $");
#include "opt_ddb.h"
#include "opt_ipsec.h"
@@ -519,9 +519,6 @@
/* Now timer is working. Enable preemption. */
kpreempt_enable();
- /* Enable deferred processing of RNG samples */
- rnd_init_softint();
-
#ifdef SYSVSHM
/* Initialize System V style shared memory. */
shminit();
@@ -568,6 +565,8 @@
if_attachdomain();
splx(s);
+ rnd_init_softint();
+
#ifdef GPROF
/* Initialize kernel profiling. */
kmstartup();
diff -r c53844ad641a -r 61827dc7d424 sys/kern/kern_rndq.c
--- a/sys/kern/kern_rndq.c Tue Aug 27 18:29:28 2013 +0000
+++ b/sys/kern/kern_rndq.c Tue Aug 27 19:30:10 2013 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: kern_rndq.c,v 1.17 2013/08/27 14:01:35 riastradh Exp $ */
+/* $NetBSD: kern_rndq.c,v 1.18 2013/08/27 19:30:10 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.17 2013/08/27 14:01:35 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_rndq.c,v 1.18 2013/08/27 19:30:10 riastradh Exp $");
#include <sys/param.h>
#include <sys/ioctl.h>
@@ -141,10 +141,12 @@
void *rnd_process, *rnd_wakeup;
struct callout skew_callout;
+void rnd_wakeup_readers(void);
static inline u_int32_t rnd_estimate_entropy(krndsource_t *, u_int32_t);
static inline u_int32_t rnd_counter(void);
static void rnd_intr(void *);
static void rnd_wake(void *);
+static void rnd_process_events(void);
u_int32_t rnd_extract_data_locked(void *, u_int32_t, u_int32_t); /* XXX */
static void rnd_add_data_ts(krndsource_t *, const void *const,
uint32_t, uint32_t, uint32_t);
@@ -165,10 +167,7 @@
void
rnd_init_softint(void) {
rnd_process = softint_establish(SOFTINT_SERIAL|SOFTINT_MPSAFE,
- rnd_intr, NULL);
- rnd_wakeup = softint_establish(SOFTINT_CLOCK|SOFTINT_MPSAFE,
- rnd_wake, NULL);
- rnd_intr(NULL);
+ rnd_intr, NULL);
}
/*
@@ -211,6 +210,7 @@
rnd_schedule_softint(rnd_process);
return;
}
+ rnd_process_events();
}
static inline void
@@ -220,6 +220,11 @@
rnd_schedule_softint(rnd_wakeup);
return;
}
+ if (!cold) {
+ rnd_wakeup = softint_establish(SOFTINT_CLOCK|SOFTINT_MPSAFE,
+ rnd_wake, NULL);
+ }
+ rnd_wakeup_readers();
}
/*
@@ -815,10 +820,8 @@
* by the add routines directly if the callout has never fired (that
* is, if we are "cold" -- just booted).
*
- * Returns >0 if we got enough entropy to distribute some (wake sleepers)
- * 0 elsewise.
*/
-int
+static void
rnd_process_events(void)
{
rnd_sample_t *sample = NULL;
@@ -932,15 +935,19 @@
rnd_sample_free(sample);
}
- return wake;
+
+ /*
+ * Wake up any potential readers waiting.
+ */
+ if (wake) {
+ rnd_schedule_wakeup();
+ }
}
static void
rnd_intr(void *arg)
{
- if (rnd_process_events()) {
- rnd_schedule_wakeup();
- }
+ rnd_process_events();
}
static void
@@ -1028,19 +1035,11 @@
u_int32_t
rnd_extract_data(void *p, u_int32_t len, u_int32_t flags)
{
- int wake;
uint32_t retval;
- wake = rnd_process_events(); /* XXX extra take/release rndpool_mtx */
-
mutex_spin_enter(&rndpool_mtx);
retval = rnd_extract_data_locked(p, len, flags);
mutex_spin_exit(&rndpool_mtx);
-
- if (wake) {
- rnd_schedule_wakeup();
- }
-
return retval;
}
diff -r c53844ad641a -r 61827dc7d424 sys/kern/kern_rndsink.c
--- a/sys/kern/kern_rndsink.c Tue Aug 27 18:29:28 2013 +0000
+++ b/sys/kern/kern_rndsink.c Tue Aug 27 19:30:10 2013 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: kern_rndsink.c,v 1.4 2013/08/26 23:41:24 tls Exp $ */
+/* $NetBSD: kern_rndsink.c,v 1.5 2013/08/27 19:30:10 riastradh Exp $ */
/*-
* Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_rndsink.c,v 1.4 2013/08/26 23:41:24 tls Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_rndsink.c,v 1.5 2013/08/27 19:30:10 riastradh Exp $");
#include <sys/param.h>
#include <sys/types.h>
@@ -131,8 +131,6 @@
const uint32_t bits_needed = ((bytes + RND_ENTROPY_THRESHOLD) * NBBY);
- (void)rnd_process_events(); /* XXX extra take/release rndpool_mtx */
-
mutex_spin_enter(&rndpool_mtx);
if (bits_needed <= rndpool_get_entropy_count(&rnd_pool)) {
const uint32_t extracted __unused =
Home |
Main Index |
Thread Index |
Old Index