Re: [lng-odp] [API-NEXT PATCH v5 4/8] Add arch/ files

2017-05-18 Thread Brian Brooks
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

2017-05-14 Thread Elo, Matias (Nokia - FI/Espoo)

> 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

2017-05-12 Thread Honnappa Nagarahalli
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

2017-05-10 Thread Elo, Matias (Nokia - FI/Espoo)
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

2017-05-04 Thread Brian Brooks
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 */
+