* Move __rte_aligned from the end of {struct,union} definitions to be between {struct,union} and tag.
The placement between {struct,union} and the tag allows the desired alignment to be imparted on the type regardless of the toolchain being used for all of GCC, LLVM, MSVC compilers building both C and C++. * Replace use of __rte_aligned(a) on variables/fields with alignas(a). Signed-off-by: Tyler Retzlaff <roret...@linux.microsoft.com> Acked-by: Morten Brørup <m...@smartsharesystems.com> --- lib/stack/rte_stack.h | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/lib/stack/rte_stack.h b/lib/stack/rte_stack.h index a379300..8ff0659 100644 --- a/lib/stack/rte_stack.h +++ b/lib/stack/rte_stack.h @@ -15,6 +15,8 @@ #ifndef _RTE_STACK_H_ #define _RTE_STACK_H_ +#include <stdalign.h> + #ifdef __cplusplus extern "C" { #endif @@ -42,7 +44,7 @@ struct rte_stack_lf_head { struct rte_stack_lf_list { /** List head */ - struct rte_stack_lf_head head __rte_aligned(16); + alignas(16) struct rte_stack_lf_head head; /** List len */ RTE_ATOMIC(uint64_t) len; }; @@ -52,11 +54,11 @@ struct rte_stack_lf_list { */ struct rte_stack_lf { /** LIFO list of elements */ - struct rte_stack_lf_list used __rte_cache_aligned; + alignas(RTE_CACHE_LINE_SIZE) struct rte_stack_lf_list used; /** LIFO list of free elements */ - struct rte_stack_lf_list free __rte_cache_aligned; + alignas(RTE_CACHE_LINE_SIZE) struct rte_stack_lf_list free; /** LIFO elements */ - struct rte_stack_lf_elem elems[] __rte_cache_aligned; + alignas(RTE_CACHE_LINE_SIZE) struct rte_stack_lf_elem elems[]; }; /* Structure containing the LIFO, its current length, and a lock for mutual @@ -71,9 +73,9 @@ struct rte_stack_std { /* The RTE stack structure contains the LIFO structure itself, plus metadata * such as its name and memzone pointer. */ -struct rte_stack { +struct __rte_cache_aligned rte_stack { /** Name of the stack. */ - char name[RTE_STACK_NAMESIZE] __rte_cache_aligned; + alignas(RTE_CACHE_LINE_SIZE) char name[RTE_STACK_NAMESIZE]; /** Memzone containing the rte_stack structure. */ const struct rte_memzone *memzone; uint32_t capacity; /**< Usable size of the stack. */ @@ -82,7 +84,7 @@ struct rte_stack { struct rte_stack_lf stack_lf; /**< Lock-free LIFO structure. */ struct rte_stack_std stack_std; /**< LIFO structure. */ }; -} __rte_cache_aligned; +}; /** * The stack uses lock-free push and pop functions. This flag is only -- 1.8.3.1