Module Name: src Committed By: martin Date: Sat Jun 20 16:05:06 UTC 2020
Modified Files: src/sys/arch/x86/x86 [netbsd-8]: cpu_rng.c Log Message: Pull up following revision(s) (requested by riastradh in ticket #1560): sys/arch/x86/x86/cpu_rng.c: revision 1.16 Use x86_read_psl/x86_disable_intr/x86_read_psl to defer interrupts. Using x86_disable_intr/x86_enable_intr causes a bit of a snag when we try it early at boot before we're ready to handle interrupts, because it has the effect of enabling interrupts! Fixes instant reset at boot on VIA CPUs. The instant reset on boot is new since the entropy rework, which initialized the x86 CPU RNG earlier than before, but in principle this could also cause other problems while not early at boot too. XXX pullup To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.5.12.1 src/sys/arch/x86/x86/cpu_rng.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/x86/x86/cpu_rng.c diff -u src/sys/arch/x86/x86/cpu_rng.c:1.5 src/sys/arch/x86/x86/cpu_rng.c:1.5.12.1 --- src/sys/arch/x86/x86/cpu_rng.c:1.5 Mon Feb 29 00:17:54 2016 +++ src/sys/arch/x86/x86/cpu_rng.c Sat Jun 20 16:05:06 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: cpu_rng.c,v 1.5 2016/02/29 00:17:54 riastradh Exp $ */ +/* $NetBSD: cpu_rng.c,v 1.5.12.1 2020/06/20 16:05:06 martin Exp $ */ /*- * Copyright (c) 2015 The NetBSD Foundation, Inc. @@ -136,6 +136,7 @@ exhausted: static size_t cpu_rng_via(cpu_rng_t *out) { + u_long psl; uint32_t creg0, rndsts; /* @@ -149,9 +150,9 @@ cpu_rng_via(cpu_rng_t *out) * even if such a fault is generated. * * XXX can this really happen if we don't use "rep xstorrng"? - * */ kpreempt_disable(); + psl = x86_read_psl(); x86_disable_intr(); creg0 = rcr0(); lcr0(creg0 & ~(CR0_EM|CR0_TS)); /* Permit access to SIMD/FPU path */ @@ -165,7 +166,7 @@ cpu_rng_via(cpu_rng_t *out) : "=a" (rndsts), "+D" (out) : "d" (0) : "memory"); /* Put CR0 back how it was */ lcr0(creg0); - x86_enable_intr(); + x86_write_psl(psl); kpreempt_enable(); /*