Re: [lng-odp] [API-NEXT PATCH v5 4/8] Add arch/ files
On Wed, May 10, 2017 at 2:29 AM, Elo, Matias (Nokia - FI/Espoo) wrote: > This may have been reported already, but 64bit ARM build is failing for me: Thanks for reporting. Reproduced and will be fixed in v6. > In file included from ../../platform/linux-generic/arch/arm/odp_cpu.h:59:0, > from ./include/odp_bitset.h:10, > from ./include/odp_schedule_scalable_ordered.h:14, > from ./include/odp_schedule_scalable.h:15, > from ./include/odp_queue_internal.h:36, > from ./include/odp_classification_datamodel.h:27, > from ./include/odp_packet_io_internal.h:23, > from pktio/io_ops.c:7: > ../../platform/linux-generic/arch/arm/odp_llsc.h: In function 'll8': > ../../platform/linux-generic/arch/arm/odp_llsc.h:114:3: error: implicit > declaration of function 'ODP_ABORT' [-Werror=implicit-function-declaration] >ODP_ABORT(); >^ > ../../platform/linux-generic/arch/arm/odp_llsc.h:114:3: error: nested extern > declaration of 'ODP_ABORT' [-Werror=nested-externs] > cc1: all warnings being treated as errors > Makefile:1022: recipe for target 'pktio/io_ops.lo' failed > make[1]: *** [pktio/io_ops.lo] Error 1 > make[1]: Leaving directory '/root/dev/odp.git/platform/linux-generic' > Makefile:506: recipe for target 'all-recursive' failed > make: *** [all-recursive] Error 1 > > > System: > Marvell Armada 8040 (Cortex-A72) @ 1.3GHz > Ubuntu 16.04 - 4.4.8-armada-17.02.2-g4126e30 > > > -Matias > > >> On 5 May 2017, at 7:34, Brian Brooks wrote: >> >> Signed-off-by: Brian Brooks >> Signed-off-by: Ola Liljedahl >> Reviewed-by: Honnappa Nagarahalli >> --- >> platform/linux-generic/Makefile.am | 2 + >> platform/linux-generic/arch/arm/odp_atomic.h | 210 +++ >> platform/linux-generic/arch/arm/odp_cpu.h| 63 ++ >> platform/linux-generic/arch/arm/odp_cpu_idling.h | 51 + >> platform/linux-generic/arch/arm/odp_llsc.h | 249 >> +++ >> platform/linux-generic/arch/default/odp_cpu.h| 10 + >> platform/linux-generic/arch/mips64/odp_cpu.h | 10 + >> platform/linux-generic/arch/powerpc/odp_cpu.h| 10 + >> platform/linux-generic/arch/x86/odp_cpu.h| 41 >> 9 files changed, 646 insertions(+) >> create mode 100644 platform/linux-generic/arch/arm/odp_atomic.h >> create mode 100644 platform/linux-generic/arch/arm/odp_cpu.h >> create mode 100644 platform/linux-generic/arch/arm/odp_cpu_idling.h >> create mode 100644 platform/linux-generic/arch/arm/odp_llsc.h >> create mode 100644 platform/linux-generic/arch/default/odp_cpu.h >> create mode 100644 platform/linux-generic/arch/mips64/odp_cpu.h >> create mode 100644 platform/linux-generic/arch/powerpc/odp_cpu.h >> create mode 100644 platform/linux-generic/arch/x86/odp_cpu.h >> >
Re: [lng-odp] [API-NEXT PATCH v5 4/8] Add arch/ files
> On 13 May 2017, at 1:29, Honnappa Nagarahalli > wrote: > > On 10 May 2017 at 02:29, Elo, Matias (Nokia - FI/Espoo) > wrote: >> This may have been reported already, but 64bit ARM build is failing for me: >> >> >> In file included from ../../platform/linux-generic/arch/arm/odp_cpu.h:59:0, >> from ./include/odp_bitset.h:10, >> from ./include/odp_schedule_scalable_ordered.h:14, >> from ./include/odp_schedule_scalable.h:15, >> from ./include/odp_queue_internal.h:36, >> from ./include/odp_classification_datamodel.h:27, >> from ./include/odp_packet_io_internal.h:23, >> from pktio/io_ops.c:7: >> ../../platform/linux-generic/arch/arm/odp_llsc.h: In function 'll8': >> ../../platform/linux-generic/arch/arm/odp_llsc.h:114:3: error: implicit >> declaration of function 'ODP_ABORT' [-Werror=implicit-function-declaration] >> ODP_ABORT(); >> ^ >> ../../platform/linux-generic/arch/arm/odp_llsc.h:114:3: error: nested extern >> declaration of 'ODP_ABORT' [-Werror=nested-externs] >> cc1: all warnings being treated as errors >> Makefile:1022: recipe for target 'pktio/io_ops.lo' failed >> make[1]: *** [pktio/io_ops.lo] Error 1 >> make[1]: Leaving directory '/root/dev/odp.git/platform/linux-generic' >> Makefile:506: recipe for target 'all-recursive' failed >> make: *** [all-recursive] Error 1 >> >> >> System: >> Marvell Armada 8040 (Cortex-A72) @ 1.3GHz >> Ubuntu 16.04 - 4.4.8-armada-17.02.2-g4126e30 >> >> >> -Matias >> >> > > Is this for clang/gcc? > gcc 5.4.0. $ ./configure --enable-schedule-scalable ... opendataplane 1.14.0.0 ODP Library version:114:0:1 Helper Library version: 112:0:0 implementation_name:odp-linux host: aarch64-unknown-linux-gnu ARCH_DIRarm ARCH_ABIarm64-linux with_platform: linux-generic helper_linux: no prefix: /usr/local sysconfdir: ${prefix}/etc libdir: ${exec_prefix}/lib includedir: ${prefix}/include testdir: WITH_ARCH: arm cc: gcc cc version: 5.4.0 cppflags: am_cppflags: -I/usr/local/include am_cxxflags:-std=c++11 cflags: -g -O2 -I/usr/local/include am_cflags: -pthread -DODP_SCHEDULE_SCALABLE -DIMPLEMENTATION_NAME=odp-linux -DODP_DEBUG_PRINT=0 -DODPH_DEBUG_PRINT=0 -DODP_DEBUG=0 -W -Wall -Werror -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wold-style-definition -Wpointer-arith -Wcast-align -Wnested-externs -Wcast-qual -Wformat-nonliteral -Wformat-security -Wundef -Wwrite-strings -std=c99 ldflags: am_ldflags: -pthread -lrt -ldl libs: -lrt -ldl -lcrypto -L/usr/local/lib -lconfig defs: -DHAVE_CONFIG_H static libraries: yes shared libraries: yes ABI compatible: yes Deprecated APIs:no cunit: no test_vald: no test_perf: no test_perf_proc: no test_cpp: no test_helper:no test_example: no user_guides:no
Re: [lng-odp] [API-NEXT PATCH v5 4/8] Add arch/ files
On 10 May 2017 at 02:29, Elo, Matias (Nokia - FI/Espoo) wrote: > This may have been reported already, but 64bit ARM build is failing for me: > > > In file included from ../../platform/linux-generic/arch/arm/odp_cpu.h:59:0, > from ./include/odp_bitset.h:10, > from ./include/odp_schedule_scalable_ordered.h:14, > from ./include/odp_schedule_scalable.h:15, > from ./include/odp_queue_internal.h:36, > from ./include/odp_classification_datamodel.h:27, > from ./include/odp_packet_io_internal.h:23, > from pktio/io_ops.c:7: > ../../platform/linux-generic/arch/arm/odp_llsc.h: In function 'll8': > ../../platform/linux-generic/arch/arm/odp_llsc.h:114:3: error: implicit > declaration of function 'ODP_ABORT' [-Werror=implicit-function-declaration] >ODP_ABORT(); >^ > ../../platform/linux-generic/arch/arm/odp_llsc.h:114:3: error: nested extern > declaration of 'ODP_ABORT' [-Werror=nested-externs] > cc1: all warnings being treated as errors > Makefile:1022: recipe for target 'pktio/io_ops.lo' failed > make[1]: *** [pktio/io_ops.lo] Error 1 > make[1]: Leaving directory '/root/dev/odp.git/platform/linux-generic' > Makefile:506: recipe for target 'all-recursive' failed > make: *** [all-recursive] Error 1 > > > System: > Marvell Armada 8040 (Cortex-A72) @ 1.3GHz > Ubuntu 16.04 - 4.4.8-armada-17.02.2-g4126e30 > > > -Matias > > Is this for clang/gcc? >> On 5 May 2017, at 7:34, Brian Brooks wrote: >> >> Signed-off-by: Brian Brooks >> Signed-off-by: Ola Liljedahl >> Reviewed-by: Honnappa Nagarahalli >> --- >> platform/linux-generic/Makefile.am | 2 + >> platform/linux-generic/arch/arm/odp_atomic.h | 210 +++ >> platform/linux-generic/arch/arm/odp_cpu.h| 63 ++ >> platform/linux-generic/arch/arm/odp_cpu_idling.h | 51 + >> platform/linux-generic/arch/arm/odp_llsc.h | 249 >> +++ >> platform/linux-generic/arch/default/odp_cpu.h| 10 + >> platform/linux-generic/arch/mips64/odp_cpu.h | 10 + >> platform/linux-generic/arch/powerpc/odp_cpu.h| 10 + >> platform/linux-generic/arch/x86/odp_cpu.h| 41 >> 9 files changed, 646 insertions(+) >> create mode 100644 platform/linux-generic/arch/arm/odp_atomic.h >> create mode 100644 platform/linux-generic/arch/arm/odp_cpu.h >> create mode 100644 platform/linux-generic/arch/arm/odp_cpu_idling.h >> create mode 100644 platform/linux-generic/arch/arm/odp_llsc.h >> create mode 100644 platform/linux-generic/arch/default/odp_cpu.h >> create mode 100644 platform/linux-generic/arch/mips64/odp_cpu.h >> create mode 100644 platform/linux-generic/arch/powerpc/odp_cpu.h >> create mode 100644 platform/linux-generic/arch/x86/odp_cpu.h >> >
Re: [lng-odp] [API-NEXT PATCH v5 4/8] Add arch/ files
This may have been reported already, but 64bit ARM build is failing for me: In file included from ../../platform/linux-generic/arch/arm/odp_cpu.h:59:0, from ./include/odp_bitset.h:10, from ./include/odp_schedule_scalable_ordered.h:14, from ./include/odp_schedule_scalable.h:15, from ./include/odp_queue_internal.h:36, from ./include/odp_classification_datamodel.h:27, from ./include/odp_packet_io_internal.h:23, from pktio/io_ops.c:7: ../../platform/linux-generic/arch/arm/odp_llsc.h: In function 'll8': ../../platform/linux-generic/arch/arm/odp_llsc.h:114:3: error: implicit declaration of function 'ODP_ABORT' [-Werror=implicit-function-declaration] ODP_ABORT(); ^ ../../platform/linux-generic/arch/arm/odp_llsc.h:114:3: error: nested extern declaration of 'ODP_ABORT' [-Werror=nested-externs] cc1: all warnings being treated as errors Makefile:1022: recipe for target 'pktio/io_ops.lo' failed make[1]: *** [pktio/io_ops.lo] Error 1 make[1]: Leaving directory '/root/dev/odp.git/platform/linux-generic' Makefile:506: recipe for target 'all-recursive' failed make: *** [all-recursive] Error 1 System: Marvell Armada 8040 (Cortex-A72) @ 1.3GHz Ubuntu 16.04 - 4.4.8-armada-17.02.2-g4126e30 -Matias > On 5 May 2017, at 7:34, Brian Brooks wrote: > > Signed-off-by: Brian Brooks > Signed-off-by: Ola Liljedahl > Reviewed-by: Honnappa Nagarahalli > --- > platform/linux-generic/Makefile.am | 2 + > platform/linux-generic/arch/arm/odp_atomic.h | 210 +++ > platform/linux-generic/arch/arm/odp_cpu.h| 63 ++ > platform/linux-generic/arch/arm/odp_cpu_idling.h | 51 + > platform/linux-generic/arch/arm/odp_llsc.h | 249 +++ > platform/linux-generic/arch/default/odp_cpu.h| 10 + > platform/linux-generic/arch/mips64/odp_cpu.h | 10 + > platform/linux-generic/arch/powerpc/odp_cpu.h| 10 + > platform/linux-generic/arch/x86/odp_cpu.h| 41 > 9 files changed, 646 insertions(+) > create mode 100644 platform/linux-generic/arch/arm/odp_atomic.h > create mode 100644 platform/linux-generic/arch/arm/odp_cpu.h > create mode 100644 platform/linux-generic/arch/arm/odp_cpu_idling.h > create mode 100644 platform/linux-generic/arch/arm/odp_llsc.h > create mode 100644 platform/linux-generic/arch/default/odp_cpu.h > create mode 100644 platform/linux-generic/arch/mips64/odp_cpu.h > create mode 100644 platform/linux-generic/arch/powerpc/odp_cpu.h > create mode 100644 platform/linux-generic/arch/x86/odp_cpu.h >
[lng-odp] [API-NEXT PATCH v5 4/8] Add arch/ files
Signed-off-by: Brian Brooks Signed-off-by: Ola Liljedahl Reviewed-by: Honnappa Nagarahalli --- platform/linux-generic/Makefile.am | 2 + platform/linux-generic/arch/arm/odp_atomic.h | 210 +++ platform/linux-generic/arch/arm/odp_cpu.h| 63 ++ platform/linux-generic/arch/arm/odp_cpu_idling.h | 51 + platform/linux-generic/arch/arm/odp_llsc.h | 249 +++ platform/linux-generic/arch/default/odp_cpu.h| 10 + platform/linux-generic/arch/mips64/odp_cpu.h | 10 + platform/linux-generic/arch/powerpc/odp_cpu.h| 10 + platform/linux-generic/arch/x86/odp_cpu.h| 41 9 files changed, 646 insertions(+) create mode 100644 platform/linux-generic/arch/arm/odp_atomic.h create mode 100644 platform/linux-generic/arch/arm/odp_cpu.h create mode 100644 platform/linux-generic/arch/arm/odp_cpu_idling.h create mode 100644 platform/linux-generic/arch/arm/odp_llsc.h create mode 100644 platform/linux-generic/arch/default/odp_cpu.h create mode 100644 platform/linux-generic/arch/mips64/odp_cpu.h create mode 100644 platform/linux-generic/arch/powerpc/odp_cpu.h create mode 100644 platform/linux-generic/arch/x86/odp_cpu.h diff --git a/platform/linux-generic/Makefile.am b/platform/linux-generic/Makefile.am index 79f0e70c..6ecafbb8 100644 --- a/platform/linux-generic/Makefile.am +++ b/platform/linux-generic/Makefile.am @@ -8,6 +8,7 @@ AM_CFLAGS += -I$(srcdir)/include AM_CFLAGS += -I$(top_srcdir)/include AM_CFLAGS += -I$(top_srcdir)/include/odp/arch/@ARCH_ABI@ AM_CFLAGS += -I$(top_builddir)/include +AM_CFLAGS += -I$(top_srcdir)/arch/@ARCH_DIR@ AM_CFLAGS += -Iinclude AM_CFLAGS += -DSYSCONFDIR=\"@sysconfdir@\" AM_CFLAGS += -D_ODP_PKTIO_IPC @@ -182,6 +183,7 @@ noinst_HEADERS = \ ${srcdir}/include/protocols/ipsec.h \ ${srcdir}/include/protocols/tcp.h \ ${srcdir}/include/protocols/udp.h \ + ${srcdir}/arch/@ARCH_DIR@/odp_cpu.h \ ${srcdir}/Makefile.inc __LIB__libodp_linux_la_SOURCES = \ diff --git a/platform/linux-generic/arch/arm/odp_atomic.h b/platform/linux-generic/arch/arm/odp_atomic.h new file mode 100644 index ..0ddd8a11 --- /dev/null +++ b/platform/linux-generic/arch/arm/odp_atomic.h @@ -0,0 +1,210 @@ +/* Copyright (c) 2017, ARM Limited + * All rights reserved. + * + * SPDX-License-Identifier:BSD-3-Clause + */ + +#ifndef PLATFORM_LINUXGENERIC_ARCH_ARM_ODP_ATOMIC_H +#define PLATFORM_LINUXGENERIC_ARCH_ARM_ODP_ATOMIC_H + +#ifndef PLATFORM_LINUXGENERIC_ARCH_ARM_ODP_CPU_H +#error This file should not be included directly, please include odp_cpu.h +#endif + +#ifdef CONFIG_DMBSTR + +#define atomic_store_release(loc, val, ro) \ +do { \ + _odp_release_barrier(ro); \ + __atomic_store_n(loc, val, __ATOMIC_RELAXED); \ +} while (0) + +#else + +#define atomic_store_release(loc, val, ro) \ + __atomic_store_n(loc, val, __ATOMIC_RELEASE) + +#endif /* CONFIG_DMBSTR */ + +#if __ARM_ARCH == 8 + +#define HAS_ACQ(mo) ((mo) != __ATOMIC_RELAXED && (mo) != __ATOMIC_RELEASE) +#define HAS_RLS(mo) ((mo) == __ATOMIC_RELEASE || (mo) == __ATOMIC_ACQ_REL || \ +(mo) == __ATOMIC_SEQ_CST) + +#define LL_MO(mo) (HAS_ACQ((mo)) ? __ATOMIC_ACQUIRE : __ATOMIC_RELAXED) +#define SC_MO(mo) (HAS_RLS((mo)) ? __ATOMIC_RELEASE : __ATOMIC_RELAXED) + +#ifndef __ARM_FEATURE_QRDMX /* Feature only available in v8.1a and beyond */ +static inline bool +__lockfree_compare_exchange_16(register __int128 *var, __int128 *exp, + register __int128 neu, bool weak, int mo_success, + int mo_failure) +{ + (void)weak; /* Always do strong CAS or we can't perform atomic read */ + /* Ignore memory ordering for failure, memory order for +* success must be stronger or equal. */ + (void)mo_failure; + register __int128 old; + register __int128 expected; + int ll_mo = LL_MO(mo_success); + int sc_mo = SC_MO(mo_success); + + expected = *exp; + __asm__ volatile("" ::: "memory"); + do { + /* Atomicity of LLD is not guaranteed */ + old = lld(var, ll_mo); + /* Must write back neu or old to verify atomicity of LLD */ + } while (odp_unlikely(scd(var, old == expected ? neu : old, sc_mo))); + *exp = old; /* Always update, atomically read value */ + return old == expected; +} + +static inline __int128 __lockfree_exchange_16(__int128 *var, __int128 neu, + int mo) +{ + register __int128 old; + int ll_mo = LL_MO(mo); + int sc_mo = SC_MO(mo); + + do { + /* Atomicity of LLD is not guaranteed */ + old = lld(var, ll_mo); + /* Must successfully write back to verify atomicity of LLD */ +