Re: [dpdk-dev] [EXT] [PATCH v3 3/3] eal/stack: enable lock-free stack for aarch64
From: Eads, Gage <hidden>
Date: 2019-07-19 04:42:13
quoted hunk ↗ jump to hunk
-----Original Message----- From: Jerin Jacob Kollanukkaran [mailto:jerinj@marvell.com] Sent: Thursday, July 18, 2019 11:18 PM To: Phil Yang <redacted>; dev@dpdk.org Cc: thomas@monjalon.net; hemant.agrawal@nxp.com; Honnappa.Nagarahalli@arm.com; gavin.hu@arm.com; nd@arm.com; Eads, Gage [off-list ref] Subject: RE: [EXT] [PATCH v3 3/3] eal/stack: enable lock-free stack for aarch64quoted
-----Original Message----- From: Phil Yang <redacted> Sent: Friday, June 28, 2019 1:42 PM To: dev@dpdk.org Cc: thomas@monjalon.net; Jerin Jacob Kollanukkaran [off-list ref]; hemant.agrawal@nxp.com; Honnappa.Nagarahalli@arm.com; gavin.hu@arm.com; nd@arm.com; gage.eads@intel.com Subject: [EXT] [PATCH v3 3/3] eal/stack: enable lock-free stack for aarch64 Enable both c11 atomic and non c11 atomic lock-free stack foraarch64.quoted
Signed-off-by: Phil Yang <redacted> Reviewed-by: Honnappa Nagarahalli <redacted> Tested-by: Honnappa Nagarahalli <redacted> Removed Items -------------diff --git a/lib/librte_stack/rte_stack_lf_c11.hb/lib/librte_stack/rte_stack_lf_c11.h index 3d677ae..67c21fd 100644--- a/lib/librte_stack/rte_stack_lf_c11.h +++ b/lib/librte_stack/rte_stack_lf_c11.h@@ -36,7 +36,7 @@ __rte_stack_lf_push_elems(struct rte_stack_lf_list*list, struct rte_stack_lf_elem *last, unsigned int num) { -#ifndef RTE_ARCH_X86_64 +#if !defined(RTE_ARCH_X86_64) && !defined(RTE_ARCH_ARM64) RTE_SET_USED(first); RTE_SET_USED(last); RTE_SET_USED(list);@@ -88,7 +88,7 @@ __rte_stack_lf_pop_elems(struct rte_stack_lf_list*list,quoted
void **obj_table, struct rte_stack_lf_elem **last) { -#ifndef RTE_ARCH_X86_64 +#if !defined(RTE_ARCH_X86_64) && !defined(RTE_ARCH_ARM64) RTE_SET_USED(obj_table); RTE_SET_USED(last); RTE_SET_USED(list);diff --git a/lib/librte_stack/rte_stack_lf_generic.hb/lib/librte_stack/rte_stack_lf_generic.h index 3182151..488fd9f 100644--- a/lib/librte_stack/rte_stack_lf_generic.h +++ b/lib/librte_stack/rte_stack_lf_generic.h@@ -36,7 +36,7 @@ __rte_stack_lf_push_elems(struct rte_stack_lf_list*list, struct rte_stack_lf_elem *last, unsigned int num) { -#ifndef RTE_ARCH_X86_64 +#if !defined(RTE_ARCH_X86_64) && !defined(RTE_ARCH_ARM64) RTE_SET_USED(first); RTE_SET_USED(last); RTE_SET_USED(list);@@ -84,7 +84,7 @@ __rte_stack_lf_pop_elems(struct rte_stack_lf_list*list,quoted
void **obj_table, struct rte_stack_lf_elem **last) { -#ifndef RTE_ARCH_X86_64 +#if !defined(RTE_ARCH_X86_64) && !defined(RTE_ARCH_ARM64) RTE_SET_USED(obj_table); RTE_SET_USED(last); RTE_SET_USED(list);Can we remove this all #ifdef clutter by adding the following $ git diffdiff --git a/lib/librte_stack/rte_stack_lf.h b/lib/librte_stack/rte_stack_lf.h index f5581f0c2..46af08b83 100644 --- a/lib/librte_stack/rte_stack_lf.h +++ b/lib/librte_stack/rte_stack_lf.h@@ -5,7 +5,7 @@ #ifndef _RTE_STACK_LF_H_ #define _RTE_STACK_LF_H_ -#ifdef RTE_USE_C11_MEM_MODEL +#if defined (RTE_USE_C11_MEM_MODEL) && defined(RTE_ARCH_X86_64)&& +defined(RTE_ARCH_ARM64)
I assume you meant (defined(RTE_ARCH_X86_64) || defined(RTE_ARCH_ARM64))?
#include "rte_stack_lf_c11.h" #else #include "rte_stack_lf_generic.h"
The ifdefs in those two headers prevent DPDK from trying to build rte_atomic128_cmp_exchange() on architectures that don't implement it. So the proposal wouldn't quite work, since rte_stack_lf_generic.h calls rte_atomic128_cmp_exchange(). Something like this could work: #if !(defined(RTE_ARCH_X86_64) || defined(RTE_ARCH_ARM64)) #include rte_stack_lf_stubs.h #else #ifdef RTE_USE_C11_MEM_MODEL #include "rte_stack_lf_c11.h" #else #include "rte_stack_lf_generic.h" #endif #endif Where rte_stack_lf_stubs.h is a new header containing stub implementations of __rte_stack_lf_count, __rte_stack_lf_push_elems, and __rte_stack_lf_pop_elems. It still has some ifdef clutter, but less overall.