aboutsummaryrefslogtreecommitdiff
path: root/platform/linux-generic/arch/x86
diff options
context:
space:
mode:
authorMatias Elo <matias.elo@nokia.com>2023-06-21 09:11:56 +0300
committerMatias Elo <matias.elo@nokia.com>2023-07-03 11:01:39 +0300
commitaa53b41739ab1df3c64aac3302615b6f04c72fb3 (patch)
tree5290a48dde666d08beb023286211c85edaa0b7d6 /platform/linux-generic/arch/x86
parentaf1a174d919465bf262a0dc5c91edaa1d3688fc1 (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.c8
-rw-r--r--platform/linux-generic/arch/x86/odp_sysinfo_parse.c6
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;