[v4,03/39] stack: use C11 alignas
Checks
Commit Message
* 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 <roretzla@linux.microsoft.com>
Acked-by: Morten Brørup <mb@smartsharesystems.com>
---
lib/stack/rte_stack.h | 16 +++++++++-------
1 file changed, 9 insertions(+), 7 deletions(-)
@@ -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