diff options
author | Petri Savolainen <petri.savolainen@linaro.org> | 2018-05-24 14:43:38 +0300 |
---|---|---|
committer | Maxim Uvarov <maxim.uvarov@linaro.org> | 2018-05-28 18:07:56 +0300 |
commit | d6e4b3df266ee1c847763ba50fa802d9e9e62b5e (patch) | |
tree | c7b6350d9c341229ee31af00f7b418ecb0e3dab5 /platform/linux-generic/arch | |
parent | bdc44eae6bac8aed26170d21cf05fe99ba9d84d6 (diff) |
linux-gen: cpu: add cpu cycles init global
Add global init function to check e.g. if CPU cycle counter
instruction is available on x86.
Signed-off-by: Petri Savolainen <petri.savolainen@linaro.org>
Reviewed-by: Bill Fischofer <bill.fischofer@linaro.org>
Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>
Diffstat (limited to 'platform/linux-generic/arch')
-rw-r--r-- | platform/linux-generic/arch/default/odp_cpu_cycles.c | 6 | ||||
-rw-r--r-- | platform/linux-generic/arch/mips64/odp_cpu_cycles.c | 6 | ||||
-rw-r--r-- | platform/linux-generic/arch/x86/cpu_flags.c | 8 | ||||
-rw-r--r-- | platform/linux-generic/arch/x86/cpu_flags.h | 1 | ||||
-rw-r--r-- | platform/linux-generic/arch/x86/odp_cpu_cycles.c | 14 |
5 files changed, 35 insertions, 0 deletions
diff --git a/platform/linux-generic/arch/default/odp_cpu_cycles.c b/platform/linux-generic/arch/default/odp_cpu_cycles.c index 3e3df0879..88e70b2e4 100644 --- a/platform/linux-generic/arch/default/odp_cpu_cycles.c +++ b/platform/linux-generic/arch/default/odp_cpu_cycles.c @@ -13,6 +13,7 @@ #include <odp/api/cpu.h> #include <odp_debug_internal.h> +#include <odp_init_internal.h> #define GIGA 1000000000 @@ -46,3 +47,8 @@ uint64_t odp_cpu_cycles_resolution(void) { return 1; } + +int _odp_cpu_cycles_init_global(void) +{ + return 0; +} diff --git a/platform/linux-generic/arch/mips64/odp_cpu_cycles.c b/platform/linux-generic/arch/mips64/odp_cpu_cycles.c index 26b928788..72a0e5b0c 100644 --- a/platform/linux-generic/arch/mips64/odp_cpu_cycles.c +++ b/platform/linux-generic/arch/mips64/odp_cpu_cycles.c @@ -9,6 +9,7 @@ #include <odp/api/cpu.h> #include <odp/api/hints.h> #include <odp/api/system_info.h> +#include <odp_init_internal.h> uint64_t odp_cpu_cycles(void) { @@ -31,3 +32,8 @@ uint64_t odp_cpu_cycles_resolution(void) { return 1; } + +int _odp_cpu_cycles_init_global(void) +{ + return 0; +} diff --git a/platform/linux-generic/arch/x86/cpu_flags.c b/platform/linux-generic/arch/x86/cpu_flags.c index 0fcaa477e..f5a744fd7 100644 --- a/platform/linux-generic/arch/x86/cpu_flags.c +++ b/platform/linux-generic/arch/x86/cpu_flags.c @@ -368,3 +368,11 @@ int cpu_has_global_time(void) return 0; } + +int cpu_flags_has_rdtsc(void) +{ + if (cpu_get_flag_enabled(RTE_CPUFLAG_TSC) > 0) + return 1; + + return 0; +} diff --git a/platform/linux-generic/arch/x86/cpu_flags.h b/platform/linux-generic/arch/x86/cpu_flags.h index b0d268888..879c9aadc 100644 --- a/platform/linux-generic/arch/x86/cpu_flags.h +++ b/platform/linux-generic/arch/x86/cpu_flags.h @@ -12,6 +12,7 @@ extern "C" { #endif void cpu_flags_print_all(void); +int cpu_flags_has_rdtsc(void); #ifdef __cplusplus } diff --git a/platform/linux-generic/arch/x86/odp_cpu_cycles.c b/platform/linux-generic/arch/x86/odp_cpu_cycles.c index 12af1c17a..4e50b6da0 100644 --- a/platform/linux-generic/arch/x86/odp_cpu_cycles.c +++ b/platform/linux-generic/arch/x86/odp_cpu_cycles.c @@ -6,6 +6,10 @@ #include <odp/api/cpu.h> +#include "cpu_flags.h" +#include <odp_init_internal.h> +#include <odp_debug_internal.h> + uint64_t odp_cpu_cycles(void) { union { @@ -32,3 +36,13 @@ uint64_t odp_cpu_cycles_resolution(void) { return 1; } + +int _odp_cpu_cycles_init_global(void) +{ + if (cpu_flags_has_rdtsc() == 0) { + ODP_ERR("RDTSC instruction not supported\n"); + return -1; + } + + return 0; +} |