[PATCH v4 00/16] fix packing of structs when building with MSVC
Tyler Retzlaff
roretzla at linux.microsoft.com
Tue Apr 16 02:04:57 CEST 2024
MSVC struct packing is not compatible with GCC provide a macro that can
be used to push existing pack value and sets packing to 1-byte. The
existing __rte_packed macro is then used to restore the pack value
prior to the push.
Instead of providing macros exclusively for MSVC and for GCC the
existing macro is deliberately utilized to trigger a warning if no
existing packing has been pushed allowing easy identification of
locations where the __rte_msvc_pack is missing.
I've decided to only add the macro to packed structs that are built
for Windows. It seems there is little value in adding the macro tree
wide and if new code arrives that is built on Windows the __rte_packed
will flag where the preamble macro is required.
If as a part of review maintainers identify structs they believe
don't require packing so long as they are explicitly identified
i'll remove the __rte_packed as a part of this series.
v4:
* add another missing __rte_msvc_pack to crypto/mlx5 patch
* correct commit message for duplicated packing packing in
crypto/mlx5 patch
v3:
* add missing __rte_msvc_pack to crypto/mlx5
* fix commit messages to reference __rte_msvc_pack macro instead
of __rte_msvc_pushpack(1)
v2:
* app/testpmd, remove packing from simple_gre_hdr
* net/iavf, remove packing from iavf_ipsec_crypto_pkt_metadata,
simple_gre_hdr
* examples, remove packing from pkt_key_qinq, pkt_key_ipv4_5tuple,
pkt_key_ipv6_5tuple, pkt_key_ipv4_addr, pkt_key_ipv6_addr
* eal, remove packing from rte_config, __rte_trace_stream_header
Tyler Retzlaff (16):
eal: provide pack start macro for MSVC
eal: pack structures when building with MSVC
net: pack structures when building with MSVC
common/iavf: pack structures when building with MSVC
common/idpf: pack structures when building with MSVC
common/mlx5: pack structures when building with MSVC
dma/ioat: pack structures when building with MSVC
net/i40e: pack structures when building with MSVC
net/iavf: pack structures when building with MSVC
net/ice: pack structures when building with MSVC
net/mlx5: pack structures when building with MSVC
net/octeon_ep: pack structures when building with MSVC
app/testpmd: pack structures when building with MSVC
app/test: pack structures when building with MSVC
examples: pack structures when building with MSVC
crypto/mlx5: pack structures when building with MSVC
app/test-pmd/csumonly.c | 2 +-
app/test/test_efd.c | 1 +
app/test/test_hash.c | 1 +
app/test/test_member.c | 1 +
drivers/common/iavf/iavf_osdep.h | 2 ++
drivers/common/iavf/virtchnl_inline_ipsec.h | 11 +++++++++++
drivers/common/idpf/base/idpf_osdep.h | 2 ++
drivers/common/mlx5/mlx5_common_mr.h | 4 ++++
drivers/common/mlx5/mlx5_common_utils.h | 1 +
drivers/common/mlx5/mlx5_prm.h | 28 ++++++++++++++++++++++++++++
drivers/crypto/mlx5/mlx5_crypto.h | 1 +
drivers/crypto/mlx5/mlx5_crypto_gcm.c | 1 +
drivers/dma/ioat/ioat_hw_defs.h | 1 +
drivers/net/i40e/base/i40e_osdep.h | 2 ++
drivers/net/iavf/iavf_ipsec_crypto.h | 4 +++-
drivers/net/iavf/iavf_rxtx.c | 2 +-
drivers/net/ice/base/ice_osdep.h | 2 ++
drivers/net/mlx5/hws/mlx5dr.h | 1 +
drivers/net/mlx5/mlx5.h | 1 +
drivers/net/mlx5/mlx5_flow.h | 5 +++++
drivers/net/mlx5/mlx5_hws_cnt.h | 1 +
drivers/net/mlx5/mlx5_utils.h | 4 ++++
drivers/net/octeon_ep/otx_ep_mbox.h | 1 +
examples/common/neon/port_group.h | 1 +
examples/ip_pipeline/cli.c | 10 +++++-----
examples/ipsec-secgw/ipsec.h | 1 +
examples/l3fwd-power/main.c | 2 ++
examples/ptpclient/ptpclient.c | 8 ++++++++
lib/eal/common/eal_private.h | 2 +-
lib/eal/include/rte_common.h | 4 +++-
lib/eal/include/rte_memory.h | 1 +
lib/eal/include/rte_memzone.h | 1 +
lib/eal/include/rte_trace_point.h | 2 +-
lib/eal/x86/include/rte_memcpy.h | 3 +++
lib/net/rte_arp.h | 2 ++
lib/net/rte_dtls.h | 1 +
lib/net/rte_esp.h | 2 ++
lib/net/rte_ether.h | 1 +
lib/net/rte_geneve.h | 1 +
lib/net/rte_gre.h | 4 ++++
lib/net/rte_gtp.h | 5 +++++
lib/net/rte_ib.h | 1 +
lib/net/rte_icmp.h | 3 +++
lib/net/rte_ip.h | 4 ++++
lib/net/rte_l2tpv2.h | 4 ++++
lib/net/rte_macsec.h | 2 ++
lib/net/rte_mpls.h | 1 +
lib/net/rte_pdcp_hdr.h | 4 ++++
lib/net/rte_ppp.h | 1 +
lib/net/rte_sctp.h | 1 +
lib/net/rte_tcp.h | 1 +
lib/net/rte_tls.h | 1 +
lib/net/rte_udp.h | 1 +
lib/net/rte_vxlan.h | 2 ++
54 files changed, 145 insertions(+), 11 deletions(-)
--
1.8.3.1
More information about the dev
mailing list