diff options
author | Matias Elo <matias.elo@nokia.com> | 2023-06-21 09:11:56 +0300 |
---|---|---|
committer | Matias Elo <matias.elo@nokia.com> | 2023-07-03 11:01:39 +0300 |
commit | aa53b41739ab1df3c64aac3302615b6f04c72fb3 (patch) | |
tree | 5290a48dde666d08beb023286211c85edaa0b7d6 /platform/linux-generic/arch/x86 | |
parent | af1a174d919465bf262a0dc5c91edaa1d3688fc1 (diff) |
linux-gen: cpu: detect constant_tsc from cpuinfo
INVTSC x86 CPU flag may not be always available with VMs. So, try also to
find 'constant_tsc' flag from /proc/cpuinfo.
Signed-off-by: Matias Elo <matias.elo@nokia.com>
Reviewed-by: Petri Savolainen <petri.savolainen@nokia.com>
Diffstat (limited to 'platform/linux-generic/arch/x86')
-rw-r--r-- | platform/linux-generic/arch/x86/cpu_flags.c | 8 | ||||
-rw-r--r-- | platform/linux-generic/arch/x86/odp_sysinfo_parse.c | 6 |
2 files changed, 12 insertions, 2 deletions
diff --git a/platform/linux-generic/arch/x86/cpu_flags.c b/platform/linux-generic/arch/x86/cpu_flags.c index 482c25739..9211df002 100644 --- a/platform/linux-generic/arch/x86/cpu_flags.c +++ b/platform/linux-generic/arch/x86/cpu_flags.c @@ -10,9 +10,12 @@ */ #include "cpu_flags.h" -#include <odp_debug_internal.h> + #include <odp/api/abi/time_cpu.h> +#include <odp_debug_internal.h> +#include <odp_global_data.h> + #include <cpuid.h> #include <errno.h> #include <stdio.h> @@ -356,7 +359,8 @@ void _odp_cpu_flags_print_all(void) int _odp_time_cpu_global_freq_is_const(void) { - if (cpu_get_flag_enabled(RTE_CPUFLAG_INVTSC) > 0) + if (odp_global_ro.system_info.cpu_constant_tsc || + cpu_get_flag_enabled(RTE_CPUFLAG_INVTSC) > 0) return 1; _ODP_ERR("WARN: assuming constant TSC based on CPU arch, but could not confirm from CPU " diff --git a/platform/linux-generic/arch/x86/odp_sysinfo_parse.c b/platform/linux-generic/arch/x86/odp_sysinfo_parse.c index c74c52045..3cbdb2037 100644 --- a/platform/linux-generic/arch/x86/odp_sysinfo_parse.c +++ b/platform/linux-generic/arch/x86/odp_sysinfo_parse.c @@ -1,4 +1,5 @@ /* Copyright (c) 2016-2018, Linaro Limited + * Copyright (c) 2023, Nokia * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -30,6 +31,11 @@ int _odp_cpuinfo_parser(FILE *file, system_info_t *sysinfo) strcpy(sysinfo->cpu_arch_str, "x86"); while (fgets(str, sizeof(str), file) != NULL && id < CONFIG_NUM_CPU_IDS) { + if (strstr(str, "flags") && strstr(str, "constant_tsc")) { + sysinfo->cpu_constant_tsc = 1; + continue; + } + pos = strstr(str, "model name"); if (pos) { freq_set = false; |