[v4,20/39] rcu: 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/rcu/rte_rcu_qsbr.h | 16 +++++++++-------
1 file changed, 9 insertions(+), 7 deletions(-)
@@ -21,6 +21,8 @@
* entered quiescent state.
*/
+#include <stdalign.h>
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -69,7 +71,7 @@
#define RTE_QSBR_THRID_INVALID 0xffffffff
/* Worker thread counter */
-struct rte_rcu_qsbr_cnt {
+struct __rte_cache_aligned rte_rcu_qsbr_cnt {
RTE_ATOMIC(uint64_t) cnt;
/**< Quiescent state counter. Value 0 indicates the thread is offline
* 64b counter is used to avoid adding more code to address
@@ -78,7 +80,7 @@ struct rte_rcu_qsbr_cnt {
*/
RTE_ATOMIC(uint32_t) lock_cnt;
/**< Lock counter. Used when RTE_LIBRTE_RCU_DEBUG is enabled */
-} __rte_cache_aligned;
+};
#define __RTE_QSBR_CNT_THR_OFFLINE 0
#define __RTE_QSBR_CNT_INIT 1
@@ -91,28 +93,28 @@ struct rte_rcu_qsbr_cnt {
* 1) Quiescent state counter array
* 2) Register thread ID array
*/
-struct rte_rcu_qsbr {
- RTE_ATOMIC(uint64_t) token __rte_cache_aligned;
+struct __rte_cache_aligned rte_rcu_qsbr {
+ alignas(RTE_CACHE_LINE_SIZE) RTE_ATOMIC(uint64_t) token;
/**< Counter to allow for multiple concurrent quiescent state queries */
RTE_ATOMIC(uint64_t) acked_token;
/**< Least token acked by all the threads in the last call to
* rte_rcu_qsbr_check API.
*/
- uint32_t num_elems __rte_cache_aligned;
+ alignas(RTE_CACHE_LINE_SIZE) uint32_t num_elems;
/**< Number of elements in the thread ID array */
RTE_ATOMIC(uint32_t) num_threads;
/**< Number of threads currently using this QS variable */
uint32_t max_threads;
/**< Maximum number of threads using this QS variable */
- struct rte_rcu_qsbr_cnt qsbr_cnt[0] __rte_cache_aligned;
+ alignas(RTE_CACHE_LINE_SIZE) struct rte_rcu_qsbr_cnt qsbr_cnt[0];
/**< Quiescent state counter array of 'max_threads' elements */
/**< Registered thread IDs are stored in a bitmap array,
* after the quiescent state counter array.
*/
-} __rte_cache_aligned;
+};
/**
* Call back function called to free the resources.