[PATCH v5 05/39] ring: use C11 alignas
Konstantin Ananyev
konstantin.ananyev at huawei.com
Mon Feb 26 14:23:35 CET 2024
>
> The current location used for __rte_aligned(a) for alignment of types
> and variables is not compatible with MSVC. There is only a single
> location accepted by both toolchains.
>
> For variables standard C11 offers alignas(a) supported by conformant
> compilers i.e. both MSVC and GCC.
>
> For types the standard offers no alignment facility that compatibly
> interoperates with C and C++ but may be achieved by relocating the
> placement of __rte_aligned(a) to the aforementioned location accepted
> by all currently supported toolchains.
>
> To allow alignment for both compilers do the following:
>
> * 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 at linux.microsoft.com>
> Acked-by: Morten Brørup <mb at smartsharesystems.com>
> ---
> lib/ring/rte_ring_core.h | 16 +++++++++-------
> lib/ring/rte_ring_peek_zc.h | 4 ++--
> 2 files changed, 11 insertions(+), 9 deletions(-)
>
> diff --git a/lib/ring/rte_ring_core.h b/lib/ring/rte_ring_core.h
> index b770873..497d535 100644
> --- a/lib/ring/rte_ring_core.h
> +++ b/lib/ring/rte_ring_core.h
> @@ -19,6 +19,8 @@
> * instead.
> */
>
> +#include <stdalign.h>
> +
> #ifdef __cplusplus
> extern "C" {
> #endif
> @@ -78,7 +80,7 @@ struct rte_ring_headtail {
>
> union __rte_ring_rts_poscnt {
> /** raw 8B value to read/write *cnt* and *pos* as one atomic op */
> - RTE_ATOMIC(uint64_t) raw __rte_aligned(8);
> + alignas(8) RTE_ATOMIC(uint64_t) raw;
One small question - here and below, would it possible to do 'alignas(sizeof(uint64_t))' instead of 'alignas(8)?
Or MSVC has some restrictions here?
> struct {
> uint32_t cnt; /**< head/tail reference counter */
> uint32_t pos; /**< head/tail position */
> @@ -94,7 +96,7 @@ struct rte_ring_rts_headtail {
>
More information about the dev
mailing list