diff options
author | Dmitry Eremin-Solenikov <dmitry.ereminsolenikov@linaro.org> | 2017-11-23 01:31:27 +0300 |
---|---|---|
committer | Maxim Uvarov <maxim.uvarov@linaro.org> | 2018-01-18 22:07:24 +0300 |
commit | ffee6ee63f437bab54151da5f31d54385c3247af (patch) | |
tree | 47198fbc964952fc90398b63557058301b422f63 | |
parent | 22e7c58bf12540c95168f079f6b39375c96f6e94 (diff) |
linux-gen, include: switch cpu.h to api+abi
Signed-off-by: Dmitry Eremin-Solenikov <dmitry.ereminsolenikov@linaro.org>
Reviewed-by: Bill Fischofer <bill.fischofer@linaro.org>
Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>
20 files changed, 184 insertions, 28 deletions
diff --git a/Makefile.inc b/Makefile.inc index 91be46bcb..12ee3bab3 100644 --- a/Makefile.inc +++ b/Makefile.inc @@ -1,7 +1,6 @@ ODP_INCLUDES = \ -I$(top_builddir)/platform/@with_platform@/include \ -I$(top_srcdir)/platform/@with_platform@/include \ - -I$(top_srcdir)/platform/@with_platform@/arch/@ARCH_DIR@ \ -I$(top_builddir)/include \ -I$(top_srcdir)/include @@ -10,6 +9,7 @@ ODP_INCLUDES += \ -I$(top_srcdir)/include/odp/arch/@ARCH_ABI@ else ODP_INCLUDES += \ + -I$(top_srcdir)/platform/@with_platform@/arch/@ARCH_DIR@ \ -I$(top_srcdir)/platform/@with_platform@/include-abi endif diff --git a/include/Makefile.am b/include/Makefile.am index a2d8dfc02..4a84e2836 100644 --- a/include/Makefile.am +++ b/include/Makefile.am @@ -61,6 +61,7 @@ odpapiabidefaultinclude_HEADERS = \ odp/api/abi-default/buffer.h \ odp/api/abi-default/byteorder.h \ odp/api/abi-default/classification.h \ + odp/api/abi-default/cpu.h \ odp/api/abi-default/cpumask.h \ odp/api/abi-default/crypto.h \ odp/api/abi-default/debug.h \ @@ -100,6 +101,7 @@ odpapiabiarchinclude_HEADERS = \ odp/arch/arm32-linux/odp/api/abi/buffer.h \ odp/arch/arm32-linux/odp/api/abi/byteorder.h \ odp/arch/arm32-linux/odp/api/abi/classification.h \ + odp/arch/arm32-linux/odp/api/abi/cpu.h \ odp/arch/arm32-linux/odp/api/abi/cpumask.h \ odp/arch/arm32-linux/odp/api/abi/crypto.h \ odp/arch/arm32-linux/odp/api/abi/debug.h \ @@ -135,6 +137,7 @@ odpapiabiarchinclude_HEADERS = \ odp/arch/arm64-linux/odp/api/abi/buffer.h \ odp/arch/arm64-linux/odp/api/abi/byteorder.h \ odp/arch/arm64-linux/odp/api/abi/classification.h \ + odp/arch/arm64-linux/odp/api/abi/cpu.h \ odp/arch/arm64-linux/odp/api/abi/cpumask.h \ odp/arch/arm64-linux/odp/api/abi/crypto.h \ odp/arch/arm64-linux/odp/api/abi/debug.h \ @@ -170,6 +173,7 @@ odpapiabiarchinclude_HEADERS = \ odp/arch/mips64-linux/odp/api/abi/buffer.h \ odp/arch/mips64-linux/odp/api/abi/byteorder.h \ odp/arch/mips64-linux/odp/api/abi/classification.h \ + odp/arch/mips64-linux/odp/api/abi/cpu.h \ odp/arch/mips64-linux/odp/api/abi/cpumask.h \ odp/arch/mips64-linux/odp/api/abi/crypto.h \ odp/arch/mips64-linux/odp/api/abi/debug.h \ @@ -205,6 +209,7 @@ odpapiabiarchinclude_HEADERS = \ odp/arch/power64-linux/odp/api/abi/buffer.h \ odp/arch/power64-linux/odp/api/abi/byteorder.h \ odp/arch/power64-linux/odp/api/abi/classification.h \ + odp/arch/power64-linux/odp/api/abi/cpu.h \ odp/arch/power64-linux/odp/api/abi/cpumask.h \ odp/arch/power64-linux/odp/api/abi/crypto.h \ odp/arch/power64-linux/odp/api/abi/debug.h \ @@ -240,6 +245,7 @@ odpapiabiarchinclude_HEADERS = \ odp/arch/x86_32-linux/odp/api/abi/buffer.h \ odp/arch/x86_32-linux/odp/api/abi/byteorder.h \ odp/arch/x86_32-linux/odp/api/abi/classification.h \ + odp/arch/x86_32-linux/odp/api/abi/cpu.h \ odp/arch/x86_32-linux/odp/api/abi/cpumask.h \ odp/arch/x86_32-linux/odp/api/abi/crypto.h \ odp/arch/x86_32-linux/odp/api/abi/debug.h \ @@ -275,6 +281,7 @@ odpapiabiarchinclude_HEADERS = \ odp/arch/x86_64-linux/odp/api/abi/buffer.h \ odp/arch/x86_64-linux/odp/api/abi/byteorder.h \ odp/arch/x86_64-linux/odp/api/abi/classification.h \ + odp/arch/x86_64-linux/odp/api/abi/cpu.h \ odp/arch/x86_64-linux/odp/api/abi/cpumask.h \ odp/arch/x86_64-linux/odp/api/abi/crypto.h \ odp/arch/x86_64-linux/odp/api/abi/debug.h \ diff --git a/platform/linux-generic/arch/powerpc/odp/api/cpu_arch.h b/include/odp/api/abi-default/cpu.h index 22b1da2dd..fea13a484 100644 --- a/platform/linux-generic/arch/powerpc/odp/api/cpu_arch.h +++ b/include/odp/api/abi-default/cpu.h @@ -4,18 +4,22 @@ * SPDX-License-Identifier: BSD-3-Clause */ -#ifndef ODP_PLAT_CPU_ARCH_H_ -#define ODP_PLAT_CPU_ARCH_H_ +#ifndef ODP_ABI_CPU_H_ +#define ODP_ABI_CPU_H_ #ifdef __cplusplus extern "C" { #endif +#ifndef _ODP_CACHE_LINE_SIZE #define _ODP_CACHE_LINE_SIZE 64 +#endif +#ifdef _ODP_NEED_GENERIC_CPU_PAUSE static inline void odp_cpu_pause(void) { } +#endif #ifdef __cplusplus } diff --git a/include/odp/api/spec/cpu.h b/include/odp/api/spec/cpu.h index 04fbbe900..7cab4d76b 100644 --- a/include/odp/api/spec/cpu.h +++ b/include/odp/api/spec/cpu.h @@ -161,13 +161,14 @@ uint64_t odp_cpu_cycles_max(void); uint64_t odp_cpu_cycles_resolution(void); /** + * @def odp_cpu_pause * Pause CPU execution for a short while * * This call is intended for tight loops which poll a shared resource. A short * pause within the loop may save energy and improve system performance as * CPU polling frequency is reduced. */ -void odp_cpu_pause(void); +/* void odp_cpu_pause(void); */ /** * @} diff --git a/platform/linux-generic/arch/aarch64/odp/api/cpu_arch.h b/include/odp/arch/arm32-linux/odp/api/abi/cpu.h index 7c75a690e..49546e256 100644 --- a/platform/linux-generic/arch/aarch64/odp/api/cpu_arch.h +++ b/include/odp/arch/arm32-linux/odp/api/abi/cpu.h @@ -4,8 +4,8 @@ * SPDX-License-Identifier: BSD-3-Clause */ -#ifndef ODP_PLAT_CPU_ARCH_H_ -#define ODP_PLAT_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/arch/arm/odp/api/cpu_arch.h b/include/odp/arch/arm64-linux/odp/api/abi/cpu.h index 7c75a690e..49546e256 100644 --- a/platform/linux-generic/arch/arm/odp/api/cpu_arch.h +++ b/include/odp/arch/arm64-linux/odp/api/abi/cpu.h @@ -4,8 +4,8 @@ * SPDX-License-Identifier: BSD-3-Clause */ -#ifndef ODP_PLAT_CPU_ARCH_H_ -#define ODP_PLAT_CPU_ARCH_H_ +#ifndef ODP_API_ABI_CPU_H_ +#define ODP_API_ABI_CPU_H_ #ifdef __cplusplus extern "C" { diff --git a/include/odp/arch/mips64-linux/odp/api/abi/cpu.h b/include/odp/arch/mips64-linux/odp/api/abi/cpu.h new file mode 100644 index 000000000..9e1126ebf --- /dev/null +++ b/include/odp/arch/mips64-linux/odp/api/abi/cpu.h @@ -0,0 +1,32 @@ +/* Copyright (c) 2016, Linaro Limited + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef ODP_API_ABI_CPU_H_ +#define ODP_API_ABI_CPU_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined __OCTEON__ +#define _ODP_CACHE_LINE_SIZE 128 +#else +#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 + +#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 new file mode 100644 index 000000000..7e835f068 --- /dev/null +++ b/include/odp/arch/power64-linux/odp/api/abi/cpu.h @@ -0,0 +1,8 @@ +/* Copyright (c) 2017, Linaro Limited + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#define _ODP_NEED_GENERIC_CPU_PAUSE +#include <odp/api/abi-default/cpu.h> diff --git a/platform/linux-generic/arch/x86/odp/api/cpu_arch.h b/include/odp/arch/x86_32-linux/odp/api/abi/cpu.h index 44e6b30ed..3942bd327 100644 --- a/platform/linux-generic/arch/x86/odp/api/cpu_arch.h +++ b/include/odp/arch/x86_32-linux/odp/api/abi/cpu.h @@ -4,8 +4,8 @@ * SPDX-License-Identifier: BSD-3-Clause */ -#ifndef ODP_PLAT_CPU_ARCH_H_ -#define ODP_PLAT_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/arch/default/odp/api/cpu_arch.h b/include/odp/arch/x86_64-linux/odp/api/abi/cpu.h index 22b1da2dd..2a5095859 100644 --- a/platform/linux-generic/arch/default/odp/api/cpu_arch.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_PLAT_CPU_ARCH_H_ -#define ODP_PLAT_CPU_ARCH_H_ +#ifndef ODP_API_ABI_CPU_ARCH_H_ +#define ODP_API_ABI_CPU_ARCH_H_ #ifdef __cplusplus extern "C" { @@ -15,6 +15,7 @@ extern "C" { static inline void odp_cpu_pause(void) { + __asm__ __volatile__ ("pause"); } #ifdef __cplusplus diff --git a/platform/linux-generic/Makefile.am b/platform/linux-generic/Makefile.am index 8b497fcd5..364e56cd6 100644 --- a/platform/linux-generic/Makefile.am +++ b/platform/linux-generic/Makefile.am @@ -5,6 +5,7 @@ include $(top_srcdir)/platform/Makefile.inc AM_CPPFLAGS = $(ODP_INCLUDES) AM_CPPFLAGS += -I$(top_srcdir)/platform/$(with_platform)/arch +AM_CPPFLAGS += -I$(top_srcdir)/platform/$(with_platform)/arch/@ARCH_DIR@ AM_CPPFLAGS += -I$(top_srcdir)/platform/$(with_platform)/arch/default AM_CPPFLAGS += $(OPENSSL_CPPFLAGS) @@ -255,7 +256,9 @@ if ARCH_IS_ARM __LIB__libodp_linux_la_SOURCES += arch/default/odp_cpu_cycles.c \ arch/default/odp_global_time.c \ arch/default/odp_sysinfo_parse.c -arch_odp_headers = arch/arm/odp/api/cpu_arch.h +if !ODP_ABI_COMPAT +odpapiabiarchinclude_HEADERS += arch/arm/odp/api/abi/cpu.h +endif noinst_HEADERS += arch/arm/odp_atomic.h \ arch/arm/odp_cpu.h \ arch/arm/odp_cpu_idling.h \ @@ -266,7 +269,9 @@ if ARCH_IS_AARCH64 __LIB__libodp_linux_la_SOURCES += arch/default/odp_cpu_cycles.c \ arch/aarch64/odp_global_time.c \ arch/default/odp_sysinfo_parse.c -arch_odp_headers = arch/aarch64/odp/api/cpu_arch.h +if !ODP_ABI_COMPAT +odpapiabiarchinclude_HEADERS += arch/aarch64/odp/api/abi/cpu.h +endif noinst_HEADERS += arch/aarch64/odp_atomic.h \ arch/aarch64/odp_cpu.h \ arch/aarch64/odp_cpu_idling.h \ @@ -277,7 +282,9 @@ if ARCH_IS_MIPS64 __LIB__libodp_linux_la_SOURCES += arch/mips64/odp_cpu_cycles.c \ arch/default/odp_global_time.c \ arch/mips64/odp_sysinfo_parse.c -arch_odp_headers = arch/mips64/odp/api/cpu_arch.h +if !ODP_ABI_COMPAT +odpapiabiarchinclude_HEADERS += arch/mips64/odp/api/abi/cpu.h +endif noinst_HEADERS += arch/default/odp_cpu.h \ arch/default/odp_cpu_idling.h endif @@ -285,7 +292,9 @@ if ARCH_IS_POWERPC __LIB__libodp_linux_la_SOURCES += arch/default/odp_cpu_cycles.c \ arch/default/odp_global_time.c \ arch/powerpc/odp_sysinfo_parse.c -arch_odp_headers = arch/powerpc/odp/api/cpu_arch.h +if !ODP_ABI_COMPAT +odpapiabiarchinclude_HEADERS += arch/powerpc/odp/api/abi/cpu.h +endif noinst_HEADERS += arch/default/odp_cpu.h \ arch/default/odp_cpu_idling.h endif @@ -294,17 +303,14 @@ __LIB__libodp_linux_la_SOURCES += arch/x86/cpu_flags.c \ arch/x86/odp_cpu_cycles.c \ arch/x86/odp_global_time.c \ arch/x86/odp_sysinfo_parse.c -arch_odp_headers = arch/x86/odp/api/cpu_arch.h +if !ODP_ABI_COMPAT +odpapiabiarchinclude_HEADERS += arch/x86/odp/api/abi/cpu.h +endif noinst_HEADERS += arch/x86/cpu_flags.h noinst_HEADERS += arch/default/odp_cpu.h \ arch/default/odp_cpu_idling.h endif -noinst_HEADERS += arch/default/odp/api/cpu_arch.h - -odpapiarchincludedir = $(archincludedir)/odp/api -odpapiarchinclude_HEADERS = $(arch_odp_headers) - if HAVE_PCAP __LIB__libodp_linux_la_SOURCES += pktio/pcap.c endif diff --git a/platform/linux-generic/arch/aarch64/odp/api/abi/cpu.h b/platform/linux-generic/arch/aarch64/odp/api/abi/cpu.h new file mode 100644 index 000000000..49546e256 --- /dev/null +++ b/platform/linux-generic/arch/aarch64/odp/api/abi/cpu.h @@ -0,0 +1,30 @@ +/* Copyright (c) 2016, Linaro Limited + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef ODP_API_ABI_CPU_H_ +#define ODP_API_ABI_CPU_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#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 + +#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 new file mode 100644 index 000000000..49546e256 --- /dev/null +++ b/platform/linux-generic/arch/arm/odp/api/abi/cpu.h @@ -0,0 +1,30 @@ +/* Copyright (c) 2016, Linaro Limited + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef ODP_API_ABI_CPU_H_ +#define ODP_API_ABI_CPU_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#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 + +#endif diff --git a/platform/linux-generic/arch/mips64/odp/api/cpu_arch.h b/platform/linux-generic/arch/mips64/odp/api/abi/cpu.h index 3582b129b..403f0eba2 100644 --- a/platform/linux-generic/arch/mips64/odp/api/cpu_arch.h +++ b/platform/linux-generic/arch/mips64/odp/api/abi/cpu.h @@ -4,8 +4,8 @@ * SPDX-License-Identifier: BSD-3-Clause */ -#ifndef ODP_PLAT_CPU_ARCH_H_ -#define ODP_PLAT_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/arch/powerpc/odp/api/abi/cpu.h b/platform/linux-generic/arch/powerpc/odp/api/abi/cpu.h new file mode 100644 index 000000000..7e835f068 --- /dev/null +++ b/platform/linux-generic/arch/powerpc/odp/api/abi/cpu.h @@ -0,0 +1,8 @@ +/* Copyright (c) 2017, Linaro Limited + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#define _ODP_NEED_GENERIC_CPU_PAUSE +#include <odp/api/abi-default/cpu.h> diff --git a/platform/linux-generic/arch/x86/cpu_flags.c b/platform/linux-generic/arch/x86/cpu_flags.c index fd8806462..b59a35818 100644 --- a/platform/linux-generic/arch/x86/cpu_flags.c +++ b/platform/linux-generic/arch/x86/cpu_flags.c @@ -39,7 +39,7 @@ #include "config.h" -#include <cpu_flags.h> +#include "cpu_flags.h" #include <odp_debug_internal.h> #include <odp_arch_time_internal.h> #include <stdio.h> diff --git a/platform/linux-generic/arch/x86/odp/api/abi/cpu.h b/platform/linux-generic/arch/x86/odp/api/abi/cpu.h new file mode 100644 index 000000000..3942bd327 --- /dev/null +++ b/platform/linux-generic/arch/x86/odp/api/abi/cpu.h @@ -0,0 +1,29 @@ +/* Copyright (c) 2016, Linaro Limited + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef ODP_API_ABI_CPU_H_ +#define ODP_API_ABI_CPU_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#define _ODP_CACHE_LINE_SIZE 64 + +static inline void odp_cpu_pause(void) +{ +#ifdef __SSE2__ + __asm__ __volatile__ ("pause"); +#else + __asm__ __volatile__ ("rep; nop"); +#endif +} + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/platform/linux-generic/arch/x86/odp_sysinfo_parse.c b/platform/linux-generic/arch/x86/odp_sysinfo_parse.c index be2dfb230..b99e523d4 100644 --- a/platform/linux-generic/arch/x86/odp_sysinfo_parse.c +++ b/platform/linux-generic/arch/x86/odp_sysinfo_parse.c @@ -7,7 +7,7 @@ #include "config.h" #include <odp_internal.h> -#include <cpu_flags.h> +#include "cpu_flags.h" #include <string.h> int cpuinfo_parser(FILE *file, system_info_t *sysinfo) diff --git a/platform/linux-generic/include/odp/api/align.h b/platform/linux-generic/include/odp/api/align.h index c238b80af..af09e895e 100644 --- a/platform/linux-generic/include/odp/api/align.h +++ b/platform/linux-generic/include/odp/api/align.h @@ -17,7 +17,7 @@ extern "C" { #endif -#include <odp/api/cpu_arch.h> +#include <odp/api/abi/cpu.h> /** @ingroup odp_compiler_optim * @{ diff --git a/platform/linux-generic/include/odp/api/cpu.h b/platform/linux-generic/include/odp/api/cpu.h index d49c782b1..89674d699 100644 --- a/platform/linux-generic/include/odp/api/cpu.h +++ b/platform/linux-generic/include/odp/api/cpu.h @@ -17,7 +17,7 @@ extern "C" { #endif -#include <odp/api/cpu_arch.h> +#include <odp/api/abi/cpu.h> #include <odp/api/spec/cpu.h> |