diff options
author | 2017-10-18 12:52:06 +0000 | |
---|---|---|
committer | 2017-10-18 12:52:06 +0000 | |
commit | 49acae7e47a2b05cf0d7c9f464ab18dd89fed246 (patch) | |
tree | 60e1362a1f194319569f7e7c9414ac2e2555f20d | |
parent | Revert previous commit, since not all interfaces behaved the same. (diff) | |
download | wireguard-openbsd-49acae7e47a2b05cf0d7c9f464ab18dd89fed246.tar.xz wireguard-openbsd-49acae7e47a2b05cf0d7c9f464ab18dd89fed246.zip |
Set TSC timecounter frequency to the CPU frequency estimate if unknown
ok mlarkin
-rw-r--r-- | sys/arch/amd64/amd64/identcpu.c | 6 | ||||
-rw-r--r-- | sys/arch/amd64/amd64/tsc.c | 7 |
2 files changed, 7 insertions, 6 deletions
diff --git a/sys/arch/amd64/amd64/identcpu.c b/sys/arch/amd64/amd64/identcpu.c index b180ae9a3ff..2dc79925fa2 100644 --- a/sys/arch/amd64/amd64/identcpu.c +++ b/sys/arch/amd64/amd64/identcpu.c @@ -1,4 +1,4 @@ -/* $OpenBSD: identcpu.c,v 1.89 2017/10/14 04:44:43 jsg Exp $ */ +/* $OpenBSD: identcpu.c,v 1.90 2017/10/18 12:52:06 mikeb Exp $ */ /* $NetBSD: identcpu.c,v 1.1 2003/04/26 18:39:28 fvdl Exp $ */ /* @@ -47,7 +47,7 @@ void replacesmap(void); uint64_t cpu_freq(struct cpu_info *); -void tsc_timecounter_init(struct cpu_info *); +void tsc_timecounter_init(struct cpu_info *, uint64_t); #if NVMM > 0 void cpu_check_vmm_cap(struct cpu_info *); #endif /* NVMM > 0 */ @@ -676,7 +676,7 @@ identifycpu(struct cpu_info *ci) #endif } - tsc_timecounter_init(ci); + tsc_timecounter_init(ci, freq); cpu_topology(ci); #if NVMM > 0 diff --git a/sys/arch/amd64/amd64/tsc.c b/sys/arch/amd64/amd64/tsc.c index d286d1a7efc..4e17fe9a5ed 100644 --- a/sys/arch/amd64/amd64/tsc.c +++ b/sys/arch/amd64/amd64/tsc.c @@ -1,4 +1,4 @@ -/* $OpenBSD: tsc.c,v 1.3 2017/10/17 13:58:10 mikeb Exp $ */ +/* $OpenBSD: tsc.c,v 1.4 2017/10/18 12:52:06 mikeb Exp $ */ /* * Copyright (c) 2016,2017 Reyk Floeter <reyk@openbsd.org> * Copyright (c) 2017 Adam Steen <adam@adamsteen.com.au> @@ -201,14 +201,15 @@ tsc_get_timecount(struct timecounter *tc) } void -tsc_timecounter_init(struct cpu_info *ci) +tsc_timecounter_init(struct cpu_info *ci, uint64_t cpufreq) { if (!(ci->ci_flags & CPUF_PRIMARY) || !(ci->ci_flags & CPUF_CONST_TSC) || !(ci->ci_flags & CPUF_INVAR_TSC)) return; - tsc_frequency = tsc_freq_cpuid(ci); + if ((tsc_frequency = tsc_freq_cpuid(ci)) == 0) + tsc_frequency = cpufreq; tsc_is_invariant = 1; /* Newer CPUs don't require recalibration */ |