diff options
author | Matias Elo <matias.elo@nokia.com> | 2021-09-14 12:16:50 +0300 |
---|---|---|
committer | Matias Elo <matias.elo@nokia.com> | 2021-09-30 15:29:23 +0300 |
commit | a369bcd19a32cae230b9428e29c008dbd785c681 (patch) | |
tree | 3f3674282e6f6a1874f9599e22339b1914cc3726 | |
parent | fb4f59136bdf65e854c1cc4e786fab5a0f921e54 (diff) |
linux-gen: cpu: refactor inlining code
Refactor CPU ABI and implementation files to follow common project inlining
style. odp_cpu_pause() function is now defined only once per architecture.
After this clean-up it's simpler for an implementation to add inlined
versions of CPU module functions.
Signed-off-by: Matias Elo <matias.elo@nokia.com>
Reviewed-by: Jere Leppänen <jere.leppanen@nokia.com>
22 files changed, 272 insertions, 145 deletions
diff --git a/include/odp/api/abi-default/cpu.h b/include/odp/api/abi-default/cpu.h index a9b9f2c29..24e5351ad 100644 --- a/include/odp/api/abi-default/cpu.h +++ b/include/odp/api/abi-default/cpu.h @@ -15,12 +15,6 @@ extern "C" { #define ODP_CACHE_LINE_SIZE 64 #endif -#ifdef _ODP_NEED_GENERIC_CPU_PAUSE -static inline void odp_cpu_pause(void) -{ -} -#endif - #ifdef __cplusplus } #endif diff --git a/include/odp/arch/arm32-linux/odp/api/abi/cpu.h b/include/odp/arch/arm32-linux/odp/api/abi/cpu.h index 0ab5b8e14..d7485c090 100644 --- a/include/odp/arch/arm32-linux/odp/api/abi/cpu.h +++ b/include/odp/arch/arm32-linux/odp/api/abi/cpu.h @@ -13,16 +13,6 @@ extern "C" { #define ODP_CACHE_LINE_SIZE 64 -static inline void odp_cpu_pause(void) -{ - /* YIELD hints the CPU to switch to another thread if possible - * and executes as a NOP otherwise. - * ISB flushes the pipeline, then restarts. This is guaranteed to - * stall the CPU a number of cycles. - */ - __asm volatile("isb" ::: "memory"); -} - #ifdef __cplusplus } #endif diff --git a/include/odp/arch/arm64-linux/odp/api/abi/cpu.h b/include/odp/arch/arm64-linux/odp/api/abi/cpu.h index 0ab5b8e14..d7485c090 100644 --- a/include/odp/arch/arm64-linux/odp/api/abi/cpu.h +++ b/include/odp/arch/arm64-linux/odp/api/abi/cpu.h @@ -13,16 +13,6 @@ extern "C" { #define ODP_CACHE_LINE_SIZE 64 -static inline void odp_cpu_pause(void) -{ - /* YIELD hints the CPU to switch to another thread if possible - * and executes as a NOP otherwise. - * ISB flushes the pipeline, then restarts. This is guaranteed to - * stall the CPU a number of cycles. - */ - __asm volatile("isb" ::: "memory"); -} - #ifdef __cplusplus } #endif diff --git a/include/odp/arch/default-linux/odp/api/abi/cpu.h b/include/odp/arch/default-linux/odp/api/abi/cpu.h index bddc7627c..d7485c090 100644 --- a/include/odp/arch/default-linux/odp/api/abi/cpu.h +++ b/include/odp/arch/default-linux/odp/api/abi/cpu.h @@ -13,10 +13,6 @@ extern "C" { #define ODP_CACHE_LINE_SIZE 64 -static inline void odp_cpu_pause(void) -{ -} - #ifdef __cplusplus } #endif diff --git a/include/odp/arch/mips64-linux/odp/api/abi/cpu.h b/include/odp/arch/mips64-linux/odp/api/abi/cpu.h index 450bd0928..6e2573a74 100644 --- a/include/odp/arch/mips64-linux/odp/api/abi/cpu.h +++ b/include/odp/arch/mips64-linux/odp/api/abi/cpu.h @@ -17,14 +17,6 @@ extern "C" { #error Please add support for your arch in abi/cpu.h #endif -static inline void odp_cpu_pause(void) -{ - __asm__ __volatile__ ("nop"); - __asm__ __volatile__ ("nop"); - __asm__ __volatile__ ("nop"); - __asm__ __volatile__ ("nop"); -} - #ifdef __cplusplus } #endif diff --git a/include/odp/arch/power64-linux/odp/api/abi/cpu.h b/include/odp/arch/power64-linux/odp/api/abi/cpu.h index 9e3338d60..42a5dd22c 100644 --- a/include/odp/arch/power64-linux/odp/api/abi/cpu.h +++ b/include/odp/arch/power64-linux/odp/api/abi/cpu.h @@ -1,9 +1,21 @@ /* Copyright (c) 2017-2018, Linaro Limited + * Copyright (c) 2021, Nokia * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ -#define _ODP_NEED_GENERIC_CPU_PAUSE +#ifndef ODP_API_ABI_CPU_H_ +#define ODP_API_ABI_CPU_H_ + +#ifdef __cplusplus +extern "C" { +#endif + #define ODP_CACHE_LINE_SIZE 128 -#include <odp/api/abi-default/cpu.h> + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/odp/arch/x86_64-linux/odp/api/abi/cpu.h b/include/odp/arch/x86_64-linux/odp/api/abi/cpu.h index 69b82eb05..d7485c090 100644 --- a/include/odp/arch/x86_64-linux/odp/api/abi/cpu.h +++ b/include/odp/arch/x86_64-linux/odp/api/abi/cpu.h @@ -4,8 +4,8 @@ * SPDX-License-Identifier: BSD-3-Clause */ -#ifndef ODP_API_ABI_CPU_ARCH_H_ -#define ODP_API_ABI_CPU_ARCH_H_ +#ifndef ODP_API_ABI_CPU_H_ +#define ODP_API_ABI_CPU_H_ #ifdef __cplusplus extern "C" { diff --git a/platform/linux-generic/Makefile.am b/platform/linux-generic/Makefile.am index 8c75e5ec0..e763c0abc 100644 --- a/platform/linux-generic/Makefile.am +++ b/platform/linux-generic/Makefile.am @@ -275,12 +275,13 @@ __LIB__libodp_linux_la_SOURCES += arch/default/odp_atomic.c \ arch/default/odp_global_time.c \ arch/default/odp_hash_crc32.c \ arch/arm/odp_sysinfo_parse.c -odpapiabiarchinclude_HEADERS += arch/default/odp/api/abi/cpu_inlines.h \ - arch/default/odp/api/abi/cpu_time.h \ +odpapiabiarchinclude_HEADERS += arch/default/odp/api/abi/cpu_time.h \ arch/default/odp/api/abi/hash_crc32.h if !ODP_ABI_COMPAT odpapiabiarchinclude_HEADERS += arch/default/odp/api/abi/atomic_generic.h \ arch/default/odp/api/abi/atomic_inlines.h \ + arch/default/odp/api/abi/cpu_generic.h \ + arch/arm/odp/api/abi/cpu_inlines.h \ arch/arm/odp/api/abi/cpu.h endif noinst_HEADERS += arch/arm/odp_atomic.h \ @@ -297,14 +298,15 @@ __LIB__libodp_linux_la_SOURCES += arch/aarch64/odp_atomic.c \ arch/aarch64/odp_global_time.c \ arch/default/odp_hash_crc32.c \ arch/aarch64/odp_sysinfo_parse.c -odpapiabiarchinclude_HEADERS += arch/default/odp/api/abi/cpu_inlines.h \ - arch/aarch64/odp/api/abi/cpu_time.h \ +odpapiabiarchinclude_HEADERS += arch/aarch64/odp/api/abi/cpu_time.h \ arch/aarch64/odp/api/abi/hash_crc32.h if !ODP_ABI_COMPAT odpapiabiarchinclude_HEADERS += arch/default/odp/api/abi/atomic_generic.h \ arch/aarch64/odp/api/abi/atomic_inlines.h \ arch/aarch64/odp/api/abi/atomic.h \ - arch/aarch64/odp/api/abi/cpu.h + arch/default/odp/api/abi/cpu_generic.h \ + arch/aarch64/odp/api/abi/cpu_inlines.h \ + arch/aarch64/odp/api/abi/cpu.h endif noinst_HEADERS += arch/aarch64/odp_atomic.h \ arch/aarch64/odp_cpu.h \ @@ -317,12 +319,13 @@ __LIB__libodp_linux_la_SOURCES += arch/default/odp_atomic.c \ arch/default/odp_global_time.c \ arch/default/odp_hash_crc32.c \ arch/default/odp_sysinfo_parse.c -odpapiabiarchinclude_HEADERS += arch/default/odp/api/abi/cpu_inlines.h \ - arch/default/odp/api/abi/cpu_time.h \ +odpapiabiarchinclude_HEADERS += arch/default/odp/api/abi/cpu_time.h \ arch/default/odp/api/abi/hash_crc32.h if !ODP_ABI_COMPAT odpapiabiarchinclude_HEADERS += arch/default/odp/api/abi/atomic_generic.h \ arch/default/odp/api/abi/atomic_inlines.h \ + arch/default/odp/api/abi/cpu_generic.h \ + arch/default/odp/api/abi/cpu_inlines.h \ arch/default/odp/api/abi/cpu.h endif noinst_HEADERS += arch/default/odp_atomic.h \ @@ -331,16 +334,16 @@ noinst_HEADERS += arch/default/odp_atomic.h \ endif if ARCH_IS_MIPS64 __LIB__libodp_linux_la_SOURCES += arch/default/odp_atomic.c \ - arch/mips64/odp_cpu_cycles.c \ arch/default/odp_global_time.c \ arch/default/odp_hash_crc32.c \ arch/mips64/odp_sysinfo_parse.c -odpapiabiarchinclude_HEADERS += arch/default/odp/api/abi/cpu_inlines.h \ - arch/default/odp/api/abi/cpu_time.h \ +odpapiabiarchinclude_HEADERS += arch/default/odp/api/abi/cpu_time.h \ arch/default/odp/api/abi/hash_crc32.h if !ODP_ABI_COMPAT odpapiabiarchinclude_HEADERS += arch/default/odp/api/abi/atomic_generic.h \ arch/default/odp/api/abi/atomic_inlines.h \ + arch/default/odp/api/abi/cpu_generic.h \ + arch/mips64/odp/api/abi/cpu_inlines.h \ arch/mips64/odp/api/abi/cpu.h endif noinst_HEADERS += arch/default/odp_atomic.h \ @@ -353,12 +356,13 @@ __LIB__libodp_linux_la_SOURCES += arch/default/odp_atomic.c \ arch/default/odp_global_time.c \ arch/default/odp_hash_crc32.c \ arch/powerpc/odp_sysinfo_parse.c -odpapiabiarchinclude_HEADERS += arch/default/odp/api/abi/cpu_inlines.h \ - arch/default/odp/api/abi/cpu_time.h \ +odpapiabiarchinclude_HEADERS += arch/default/odp/api/abi/cpu_time.h \ arch/default/odp/api/abi/hash_crc32.h if !ODP_ABI_COMPAT odpapiabiarchinclude_HEADERS += arch/default/odp/api/abi/atomic_generic.h \ arch/default/odp/api/abi/atomic_inlines.h \ + arch/default/odp/api/abi/cpu_generic.h \ + arch/default/odp/api/abi/cpu_inlines.h \ arch/powerpc/odp/api/abi/cpu.h endif noinst_HEADERS += arch/default/odp_atomic.h \ @@ -372,13 +376,13 @@ __LIB__libodp_linux_la_SOURCES += arch/default/odp_atomic.c \ arch/x86/odp_global_time.c \ arch/default/odp_hash_crc32.c \ arch/x86/odp_sysinfo_parse.c -odpapiabiarchinclude_HEADERS += arch/x86/odp/api/abi/cpu_inlines.h \ - arch/x86/odp/api/abi/cpu_rdtsc.h \ +odpapiabiarchinclude_HEADERS += arch/x86/odp/api/abi/cpu_rdtsc.h \ arch/x86/odp/api/abi/cpu_time.h \ arch/x86/odp/api/abi/hash_crc32.h if !ODP_ABI_COMPAT odpapiabiarchinclude_HEADERS += arch/default/odp/api/abi/atomic_generic.h \ arch/default/odp/api/abi/atomic_inlines.h \ + arch/x86/odp/api/abi/cpu_inlines.h \ arch/x86/odp/api/abi/cpu.h endif noinst_HEADERS += arch/x86/cpu_flags.h \ diff --git a/platform/linux-generic/arch/aarch64/odp/api/abi/cpu.h b/platform/linux-generic/arch/aarch64/odp/api/abi/cpu.h index 97a2861c5..825ff19d4 100644 --- a/platform/linux-generic/arch/aarch64/odp/api/abi/cpu.h +++ b/platform/linux-generic/arch/aarch64/odp/api/abi/cpu.h @@ -17,15 +17,8 @@ extern "C" { #define ODP_CACHE_LINE_SIZE _ODP_CACHE_LINE_SIZE #endif -static inline void odp_cpu_pause(void) -{ - /* YIELD hints the CPU to switch to another thread if possible - * and executes as a NOP otherwise. - * ISB flushes the pipeline, then restarts. This is guaranteed to - * stall the CPU a number of cycles. - */ - __asm volatile("isb" ::: "memory"); -} +/* Inlined functions for non-ABI compat mode */ +#include <odp/api/plat/cpu_inlines.h> #ifdef __cplusplus } diff --git a/platform/linux-generic/arch/aarch64/odp/api/abi/cpu_inlines.h b/platform/linux-generic/arch/aarch64/odp/api/abi/cpu_inlines.h new file mode 100644 index 000000000..bf44806a0 --- /dev/null +++ b/platform/linux-generic/arch/aarch64/odp/api/abi/cpu_inlines.h @@ -0,0 +1,32 @@ +/* Copyright (c) 2016-2018, Linaro Limited + * Copyright (c) 2021, Nokia + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef ODP_ARCH_CPU_INLINES_H_ +#define ODP_ARCH_CPU_INLINES_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +static inline void _odp_cpu_pause(void) +{ + /* YIELD hints the CPU to switch to another thread if possible + * and executes as a NOP otherwise. + * ISB flushes the pipeline, then restarts. This is guaranteed to + * stall the CPU a number of cycles. + */ + __asm volatile("isb" ::: "memory"); +} + +/* Use generic implementations for the rest of the functions */ +#include <odp/api/abi/cpu_generic.h> + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/platform/linux-generic/arch/arm/odp/api/abi/cpu.h b/platform/linux-generic/arch/arm/odp/api/abi/cpu.h index 0ab5b8e14..9224af9a0 100644 --- a/platform/linux-generic/arch/arm/odp/api/abi/cpu.h +++ b/platform/linux-generic/arch/arm/odp/api/abi/cpu.h @@ -13,15 +13,8 @@ extern "C" { #define ODP_CACHE_LINE_SIZE 64 -static inline void odp_cpu_pause(void) -{ - /* YIELD hints the CPU to switch to another thread if possible - * and executes as a NOP otherwise. - * ISB flushes the pipeline, then restarts. This is guaranteed to - * stall the CPU a number of cycles. - */ - __asm volatile("isb" ::: "memory"); -} +/* Inlined functions for non-ABI compat mode */ +#include <odp/api/plat/cpu_inlines.h> #ifdef __cplusplus } diff --git a/platform/linux-generic/arch/arm/odp/api/abi/cpu_inlines.h b/platform/linux-generic/arch/arm/odp/api/abi/cpu_inlines.h new file mode 100644 index 000000000..bf44806a0 --- /dev/null +++ b/platform/linux-generic/arch/arm/odp/api/abi/cpu_inlines.h @@ -0,0 +1,32 @@ +/* Copyright (c) 2016-2018, Linaro Limited + * Copyright (c) 2021, Nokia + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef ODP_ARCH_CPU_INLINES_H_ +#define ODP_ARCH_CPU_INLINES_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +static inline void _odp_cpu_pause(void) +{ + /* YIELD hints the CPU to switch to another thread if possible + * and executes as a NOP otherwise. + * ISB flushes the pipeline, then restarts. This is guaranteed to + * stall the CPU a number of cycles. + */ + __asm volatile("isb" ::: "memory"); +} + +/* Use generic implementations for the rest of the functions */ +#include <odp/api/abi/cpu_generic.h> + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/platform/linux-generic/arch/default/odp/api/abi/cpu.h b/platform/linux-generic/arch/default/odp/api/abi/cpu.h index 8f64790c3..e09efdfcf 100644 --- a/platform/linux-generic/arch/default/odp/api/abi/cpu.h +++ b/platform/linux-generic/arch/default/odp/api/abi/cpu.h @@ -13,9 +13,8 @@ extern "C" { #define ODP_CACHE_LINE_SIZE 64 -static inline void odp_cpu_pause(void) -{ -} +/* Inlined functions for non-ABI compat mode */ +#include <odp/api/plat/cpu_inlines.h> #ifdef __cplusplus } diff --git a/platform/linux-generic/arch/default/odp/api/abi/cpu_generic.h b/platform/linux-generic/arch/default/odp/api/abi/cpu_generic.h new file mode 100644 index 000000000..b75e65717 --- /dev/null +++ b/platform/linux-generic/arch/default/odp/api/abi/cpu_generic.h @@ -0,0 +1,34 @@ +/* Copyright (c) 2015-2018, Linaro Limited + * Copyright (c) 2021, Nokia + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef ODP_API_ABI_CPU_GENERIC_H_ +#define ODP_API_ABI_CPU_GENERIC_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include <stdint.h> + +uint64_t _odp_cpu_cycles(void); +int _odp_cpu_cycles_init_global(void); + +static inline uint64_t _odp_cpu_cycles_max(void) +{ + return UINT64_MAX; +} + +static inline uint64_t _odp_cpu_cycles_resolution(void) +{ + return 1; +} + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/platform/linux-generic/arch/default/odp/api/abi/cpu_inlines.h b/platform/linux-generic/arch/default/odp/api/abi/cpu_inlines.h index f9c2bae9d..54aeae946 100644 --- a/platform/linux-generic/arch/default/odp/api/abi/cpu_inlines.h +++ b/platform/linux-generic/arch/default/odp/api/abi/cpu_inlines.h @@ -7,9 +7,18 @@ #ifndef ODP_ARCH_CPU_INLINES_H_ #define ODP_ARCH_CPU_INLINES_H_ -#undef odp_cpu_pause -#undef odp_cpu_cycles -#undef odp_cpu_cycles_max -#undef odp_cpu_cycles_resolution +#ifdef __cplusplus +extern "C" { +#endif + +static inline void _odp_cpu_pause(void) +{ +} + +#include <odp/api/abi/cpu_generic.h> + +#ifdef __cplusplus +} +#endif #endif diff --git a/platform/linux-generic/arch/default/odp_cpu_cycles.c b/platform/linux-generic/arch/default/odp_cpu_cycles.c index 542a68dbe..5d0d5db1d 100644 --- a/platform/linux-generic/arch/default/odp_cpu_cycles.c +++ b/platform/linux-generic/arch/default/odp_cpu_cycles.c @@ -1,4 +1,5 @@ /* Copyright (c) 2015-2018, Linaro Limited + * Copyright (c) 2021, Nokia * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -6,16 +7,19 @@ #include <odp_posix_extensions.h> +#include <stdint.h> #include <stdlib.h> #include <time.h> -#include <odp/api/cpu.h> #include <odp_debug_internal.h> +#include <odp_global_data.h> #include <odp_init_internal.h> #define GIGA 1000000000 -uint64_t odp_cpu_cycles(void) +#include <odp/api/abi/cpu_generic.h> + +uint64_t _odp_cpu_cycles(void) { struct timespec time; uint64_t sec, ns, hz, cycles; @@ -26,7 +30,8 @@ uint64_t odp_cpu_cycles(void) if (ret != 0) ODP_ABORT("clock_gettime failed\n"); - hz = odp_cpu_hz_max(); + hz = odp_global_ro.system_info.cpu_hz_max[0]; + sec = (uint64_t)time.tv_sec; ns = (uint64_t)time.tv_nsec; @@ -36,16 +41,6 @@ uint64_t odp_cpu_cycles(void) return cycles; } -uint64_t odp_cpu_cycles_max(void) -{ - return UINT64_MAX; -} - -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/api/abi/cpu.h b/platform/linux-generic/arch/mips64/odp/api/abi/cpu.h index 45d95e9e3..a6ce523d0 100644 --- a/platform/linux-generic/arch/mips64/odp/api/abi/cpu.h +++ b/platform/linux-generic/arch/mips64/odp/api/abi/cpu.h @@ -17,13 +17,8 @@ extern "C" { #error Please add support for your arch in cpu_arch.h #endif -static inline void odp_cpu_pause(void) -{ - __asm__ __volatile__ ("nop"); - __asm__ __volatile__ ("nop"); - __asm__ __volatile__ ("nop"); - __asm__ __volatile__ ("nop"); -} +/* Inlined functions for non-ABI compat mode */ +#include <odp/api/plat/cpu_inlines.h> #ifdef __cplusplus } diff --git a/platform/linux-generic/arch/mips64/odp/api/abi/cpu_inlines.h b/platform/linux-generic/arch/mips64/odp/api/abi/cpu_inlines.h new file mode 100644 index 000000000..d3a424432 --- /dev/null +++ b/platform/linux-generic/arch/mips64/odp/api/abi/cpu_inlines.h @@ -0,0 +1,56 @@ +/* Copyright (c) 2016-2018, Linaro Limited + * Copyright (c) 2021, Nokia + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef ODP_ARCH_CPU_INLINES_H_ +#define ODP_ARCH_CPU_INLINES_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include <stdint.h> + +static inline void _odp_cpu_pause(void) +{ + __asm__ __volatile__ ("nop"); + __asm__ __volatile__ ("nop"); + __asm__ __volatile__ ("nop"); + __asm__ __volatile__ ("nop"); +} + +uint64_t _odp_cpu_cycles(void) +{ + #define CVMX_TMP_STR(x) CVMX_TMP_STR2(x) + #define CVMX_TMP_STR2(x) #x + uint64_t cycle; + + __asm__ __volatile__ ("rdhwr %[rt],$" CVMX_TMP_STR(31) : + [rt] "=d" (cycle) : : "memory"); + + return cycle; +} + +uint64_t _odp_cpu_cycles_max(void) +{ + return UINT64_MAX; +} + +uint64_t _odp_cpu_cycles_resolution(void) +{ + return 1; +} + +int _odp_cpu_cycles_init_global(void) +{ + return 0; +} + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/platform/linux-generic/arch/mips64/odp_cpu_cycles.c b/platform/linux-generic/arch/mips64/odp_cpu_cycles.c deleted file mode 100644 index 6423af76d..000000000 --- a/platform/linux-generic/arch/mips64/odp_cpu_cycles.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (c) 2015-2018, Linaro Limited - * All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -#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) -{ - #define CVMX_TMP_STR(x) CVMX_TMP_STR2(x) - #define CVMX_TMP_STR2(x) #x - uint64_t cycle; - - __asm__ __volatile__ ("rdhwr %[rt],$" CVMX_TMP_STR(31) : - [rt] "=d" (cycle) : : "memory"); - - return cycle; -} - -uint64_t odp_cpu_cycles_max(void) -{ - return UINT64_MAX; -} - -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/powerpc/odp/api/abi/cpu.h b/platform/linux-generic/arch/powerpc/odp/api/abi/cpu.h index 9e3338d60..ecf56e82e 100644 --- a/platform/linux-generic/arch/powerpc/odp/api/abi/cpu.h +++ b/platform/linux-generic/arch/powerpc/odp/api/abi/cpu.h @@ -1,9 +1,25 @@ /* Copyright (c) 2017-2018, Linaro Limited + * Copyright (c) 2021, Nokia * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ -#define _ODP_NEED_GENERIC_CPU_PAUSE +#ifndef ODP_API_ABI_CPU_H_ +#define ODP_API_ABI_CPU_H_ + +#ifdef __cplusplus +extern "C" { +#endif + #define ODP_CACHE_LINE_SIZE 128 -#include <odp/api/abi-default/cpu.h> + +/* Inlined functions for non-ABI compat mode */ +#include <odp/api/plat/cpu_inlines.h> + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/platform/linux-generic/arch/x86/odp/api/abi/cpu_inlines.h b/platform/linux-generic/arch/x86/odp/api/abi/cpu_inlines.h index 1eb8a9561..4b542a577 100644 --- a/platform/linux-generic/arch/x86/odp/api/abi/cpu_inlines.h +++ b/platform/linux-generic/arch/x86/odp/api/abi/cpu_inlines.h @@ -1,4 +1,5 @@ /* Copyright (c) 2018, Linaro Limited + * Copyright (c) 2021, Nokia * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -7,10 +8,14 @@ #ifndef ODP_ARCH_CPU_INLINES_H_ #define ODP_ARCH_CPU_INLINES_H_ +#ifdef __cplusplus +extern "C" { +#endif + #include <stdint.h> #include <odp/api/abi/cpu_rdtsc.h> -_ODP_INLINE void odp_cpu_pause(void) +static inline void _odp_cpu_pause(void) { #ifdef __SSE2__ __asm__ __volatile__ ("pause"); @@ -19,19 +24,23 @@ _ODP_INLINE void odp_cpu_pause(void) #endif } -_ODP_INLINE uint64_t odp_cpu_cycles(void) +static inline uint64_t _odp_cpu_cycles(void) { return _odp_cpu_rdtsc(); } -_ODP_INLINE uint64_t odp_cpu_cycles_max(void) +static inline uint64_t _odp_cpu_cycles_max(void) { return UINT64_MAX; } -_ODP_INLINE uint64_t odp_cpu_cycles_resolution(void) +static inline uint64_t _odp_cpu_cycles_resolution(void) { return 1; } +#ifdef __cplusplus +} +#endif + #endif diff --git a/platform/linux-generic/include/odp/api/plat/cpu_inlines.h b/platform/linux-generic/include/odp/api/plat/cpu_inlines.h index 054801e80..60c4bb920 100644 --- a/platform/linux-generic/include/odp/api/plat/cpu_inlines.h +++ b/platform/linux-generic/include/odp/api/plat/cpu_inlines.h @@ -1,4 +1,5 @@ /* Copyright (c) 2018, Linaro Limited + * Copyright (c) 2021, Nokia * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause @@ -9,6 +10,10 @@ #include <odp/api/hints.h> +#include <odp/api/abi/cpu_inlines.h> + +#include <stdint.h> + /** @cond _ODP_HIDE_FROM_DOXYGEN_ */ #ifndef _ODP_NO_INLINE @@ -23,7 +28,25 @@ #define _ODP_INLINE #endif -#include <odp/api/abi/cpu_inlines.h> +_ODP_INLINE void odp_cpu_pause(void) +{ + _odp_cpu_pause(); +} + +_ODP_INLINE uint64_t odp_cpu_cycles_max(void) +{ + return _odp_cpu_cycles_max(); +} + +_ODP_INLINE uint64_t odp_cpu_cycles_resolution(void) +{ + return _odp_cpu_cycles_resolution(); +} + +_ODP_INLINE uint64_t odp_cpu_cycles(void) +{ + return _odp_cpu_cycles(); +} _ODP_INLINE uint64_t odp_cpu_cycles_diff(uint64_t c2, uint64_t c1) { |