summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Gwynne <dlg@cvs.openbsd.org>2020-06-03 06:54:05 +0000
committerDavid Gwynne <dlg@cvs.openbsd.org>2020-06-03 06:54:05 +0000
commit792d20efd01fa0e61a1fcc564b335bb031e57655 (patch)
treeaf168ea0c31a82ddb7857840be91f52ac85e3836
parent5f29f306e1e533d9f3f2151984b92d9297460fd8 (diff)
let the random subsystem read the tsc for event "timestamps".
-rw-r--r--sys/arch/amd64/amd64/machdep.c11
-rw-r--r--sys/arch/amd64/include/cpu.h12
2 files changed, 11 insertions, 12 deletions
diff --git a/sys/arch/amd64/amd64/machdep.c b/sys/arch/amd64/amd64/machdep.c
index fe16af19570..9dab8947af0 100644
--- a/sys/arch/amd64/amd64/machdep.c
+++ b/sys/arch/amd64/amd64/machdep.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: machdep.c,v 1.266 2020/05/31 06:23:56 dlg Exp $ */
+/* $OpenBSD: machdep.c,v 1.267 2020/06/03 06:54:04 dlg Exp $ */
/* $NetBSD: machdep.c,v 1.3 2003/05/07 22:58:18 fvdl Exp $ */
/*-
@@ -2055,12 +2055,3 @@ check_context(const struct reg *regs, struct trapframe *tf)
return 0;
}
-
-unsigned int
-cpu_rnd_messybits(void)
-{
- struct timespec ts;
-
- nanotime(&ts);
- return (ts.tv_nsec ^ (ts.tv_sec << 20));
-}
diff --git a/sys/arch/amd64/include/cpu.h b/sys/arch/amd64/include/cpu.h
index 95f715d5e0f..5a76eb21e3c 100644
--- a/sys/arch/amd64/include/cpu.h
+++ b/sys/arch/amd64/include/cpu.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: cpu.h,v 1.136 2020/05/31 06:23:56 dlg Exp $ */
+/* $OpenBSD: cpu.h,v 1.137 2020/06/03 06:54:04 dlg Exp $ */
/* $NetBSD: cpu.h,v 1.1 2003/04/26 18:39:39 fvdl Exp $ */
/*-
@@ -304,7 +304,15 @@ void cpu_unidle(struct cpu_info *);
#include <machine/cpufunc.h>
#include <machine/psl.h>
-unsigned int cpu_rnd_messybits(void);
+static inline unsigned int
+cpu_rnd_messybits(void)
+{
+ unsigned int hi, lo;
+
+ __asm volatile("rdtsc" : "=d" (hi), "=a" (lo));
+
+ return (hi ^ lo);
+}
#endif /* _KERNEL */