Module Name: src Committed By: msaitoh Date: Mon May 18 13:09:55 UTC 2015
Modified Files: src/sys/arch/x86/x86: cpu.c Log Message: OOOOPS. Revert previous. To generate a diff of this commit: cvs rdiff -u -r1.114 -r1.115 src/sys/arch/x86/x86/cpu.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.c diff -u src/sys/arch/x86/x86/cpu.c:1.114 src/sys/arch/x86/x86/cpu.c:1.115 --- src/sys/arch/x86/x86/cpu.c:1.114 Mon May 18 13:04:21 2015 +++ src/sys/arch/x86/x86/cpu.c Mon May 18 13:09:55 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: cpu.c,v 1.114 2015/05/18 13:04:21 msaitoh Exp $ */ +/* $NetBSD: cpu.c,v 1.115 2015/05/18 13:09:55 msaitoh Exp $ */ /*- * Copyright (c) 2000-2012 NetBSD Foundation, Inc. @@ -62,7 +62,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.114 2015/05/18 13:04:21 msaitoh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.115 2015/05/18 13:09:55 msaitoh Exp $"); #include "opt_ddb.h" #include "opt_mpbios.h" /* for MPDEBUG */ @@ -76,23 +76,18 @@ __KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.11 #include <sys/proc.h> #include <sys/systm.h> #include <sys/device.h> -#include <sys/kernel.h> #include <sys/kmem.h> #include <sys/cpu.h> #include <sys/cpufreq.h> #include <sys/idle.h> #include <sys/atomic.h> #include <sys/reboot.h> -#include <sys/cprng.h> -#include <sys/rndpool.h> -#include <sys/rndsource.h> #include <uvm/uvm.h> #include "acpica.h" /* for NACPICA, for mp_verbose */ #include <machine/cpufunc.h> -#include <machine/cputypes.h> #include <machine/cpuvar.h> #include <machine/pmap.h> #include <machine/vmparam.h> @@ -140,9 +135,6 @@ struct cpu_softc { device_t sc_dev; /* device tree glue */ struct cpu_info *sc_info; /* pointer to CPU info */ bool sc_wasonline; - callout_t sc_rnd_callout; - krndsource_t sc_rnd_source; - size_t sc_rnd_need; }; #ifdef MULTIPROCESSOR @@ -487,89 +479,9 @@ cpu_attach(device_t parent, device_t sel (void)config_defer(self, cpu_defer); } -void rdrand(size_t, void *); - -void -rdrand(size_t bytes, void *priv) -{ - struct cpu_softc *sc = priv; -#ifdef i386 - uint32_t r, valid; -#else - uint64_t r, valid; -#endif - uint32_t len = sizeof(r); - int i; - - while (bytes > 0) { - for (i = 0; i < 4; i++) { - __asm volatile( - "xor %1, %1\n\t" - "rdrand %0\n\t" - "rcl $1, %1\n" - : "=r" (r), "=r" (valid) : : "cc"); - - if (valid) { -#if 0 -#ifdef i386 - printf("RND 0x%08x\n", r); -#else - printf("RND 0x%016" PRIx64 "\n", r); -#endif -#endif - rnd_add_data(&sc->sc_rnd_source, &r, len, - len * NBBY); - bytes -= len; - break; - } - } - } -} - -static void x86_rnd_get(void *); -void x86_rnd_callback(size_t, void *); - -/* Callback */ -void -x86_rnd_callback(size_t bytes, void *priv) -{ - struct cpu_softc *sc = priv; - - sc->sc_rnd_need = bytes; - callout_reset(&sc->sc_rnd_callout, 0, x86_rnd_get, sc); -} - -/* Callout */ -static void -x86_rnd_get(void *priv) -{ - struct cpu_softc *sc = priv; - - rdrand(sc->sc_rnd_need, sc); - sc->sc_rnd_need = 16; /* By default */ - callout_reset(&sc->sc_rnd_callout, hz, x86_rnd_get, sc); -} - static void cpu_defer(device_t self) { - struct cpu_softc *sc = device_private(self); - char rnd_name[sizeof(sc->sc_rnd_source.name)]; - - if ((cpu_vendor == CPUVENDOR_INTEL) - && (cpu_feature[1] & CPUID2_RDRAND)) { - aprint_normal_dev(sc->sc_dev, "have rdrand\n"); - sc->sc_rnd_need = 16; /* By default */ - rndsource_setcb(&sc->sc_rnd_source, x86_rnd_callback, sc); - snprintf(rnd_name, sizeof(rnd_name), "rdrand-%s", - device_xname(sc->sc_dev)); - rnd_attach_source(&sc->sc_rnd_source, rnd_name, - RND_TYPE_RNG, - RND_FLAG_COLLECT_VALUE|RND_FLAG_HASCB); - callout_init(&sc->sc_rnd_callout, CALLOUT_MPSAFE); - callout_reset(&sc->sc_rnd_callout, hz, x86_rnd_get, sc); - } - cpu_rescan(self, NULL, NULL); }