[PATCH v6 30/39] ipsec: use C11 alignas
Konstantin Ananyev
konstantin.ananyev at huawei.com
Tue Feb 27 10:42:44 CET 2024
> Subject: [PATCH v6 30/39] ipsec: use C11 alignas
>
> 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/ipsec/rte_ipsec.h | 4 ++--
> lib/ipsec/sa.h | 4 ++--
> 2 files changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/lib/ipsec/rte_ipsec.h b/lib/ipsec/rte_ipsec.h
> index 44cecab..f15f6f2 100644
> --- a/lib/ipsec/rte_ipsec.h
> +++ b/lib/ipsec/rte_ipsec.h
> @@ -55,7 +55,7 @@ struct rte_ipsec_sa_pkt_func {
> * - pointer to security/crypto session, plus other related data
> * - session/device specific functions to prepare/process IPsec packets.
> */
> -struct rte_ipsec_session {
> +struct __rte_cache_aligned rte_ipsec_session {
> /**
> * SA that session belongs to.
> * Note that multiple sessions can belong to the same SA.
> @@ -77,7 +77,7 @@ struct rte_ipsec_session {
> };
> /** functions to prepare/process IPsec packets */
> struct rte_ipsec_sa_pkt_func pkt_func;
> -} __rte_cache_aligned;
> +};
>
> /**
> * Checks that inside given rte_ipsec_session crypto/security fields
> diff --git a/lib/ipsec/sa.h b/lib/ipsec/sa.h
> index 4b30bea..2560d33 100644
> --- a/lib/ipsec/sa.h
> +++ b/lib/ipsec/sa.h
> @@ -75,7 +75,7 @@ enum sa_algo_type {
> ALGO_TYPE_MAX
> };
>
> -struct rte_ipsec_sa {
> +struct __rte_cache_aligned rte_ipsec_sa {
>
> uint64_t type; /* type of given SA */
> uint64_t udata; /* user defined */
> @@ -141,7 +141,7 @@ struct rte_ipsec_sa {
> } errors;
> } statistics;
>
> -} __rte_cache_aligned;
> +};
>
> int
> ipsec_sa_pkt_func_select(const struct rte_ipsec_session *ss,
> --
Acked-by: Konstantin Ananyev <konstantin.ananyev at huawei.com>
> 1.8.3.1
More information about the dev
mailing list