aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatias Elo <matias.elo@nokia.com>2021-09-14 12:16:50 +0300
committerMatias Elo <matias.elo@nokia.com>2021-09-30 15:29:23 +0300
commita369bcd19a32cae230b9428e29c008dbd785c681 (patch)
tree3f3674282e6f6a1874f9599e22339b1914cc3726
parentfb4f59136bdf65e854c1cc4e786fab5a0f921e54 (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>
-rw-r--r--include/odp/api/abi-default/cpu.h6
-rw-r--r--include/odp/arch/arm32-linux/odp/api/abi/cpu.h10
-rw-r--r--include/odp/arch/arm64-linux/odp/api/abi/cpu.h10
-rw-r--r--include/odp/arch/default-linux/odp/api/abi/cpu.h4
-rw-r--r--include/odp/arch/mips64-linux/odp/api/abi/cpu.h8
-rw-r--r--include/odp/arch/power64-linux/odp/api/abi/cpu.h16
-rw-r--r--include/odp/arch/x86_64-linux/odp/api/abi/cpu.h4
-rw-r--r--platform/linux-generic/Makefile.am32
-rw-r--r--platform/linux-generic/arch/aarch64/odp/api/abi/cpu.h11
-rw-r--r--platform/linux-generic/arch/aarch64/odp/api/abi/cpu_inlines.h32
-rw-r--r--platform/linux-generic/arch/arm/odp/api/abi/cpu.h11
-rw-r--r--platform/linux-generic/arch/arm/odp/api/abi/cpu_inlines.h32
-rw-r--r--platform/linux-generic/arch/default/odp/api/abi/cpu.h5
-rw-r--r--platform/linux-generic/arch/default/odp/api/abi/cpu_generic.h34
-rw-r--r--platform/linux-generic/arch/default/odp/api/abi/cpu_inlines.h17
-rw-r--r--platform/linux-generic/arch/default/odp_cpu_cycles.c21
-rw-r--r--platform/linux-generic/arch/mips64/odp/api/abi/cpu.h9
-rw-r--r--platform/linux-generic/arch/mips64/odp/api/abi/cpu_inlines.h56
-rw-r--r--platform/linux-generic/arch/mips64/odp_cpu_cycles.c37
-rw-r--r--platform/linux-generic/arch/powerpc/odp/api/abi/cpu.h20
-rw-r--r--platform/linux-generic/arch/x86/odp/api/abi/cpu_inlines.h17
-rw-r--r--platform/linux-generic/include/odp/api/plat/cpu_inlines.h25
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)
{