From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 97CA945D3C; Tue, 19 Nov 2024 05:36:17 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 6150F406B8; Tue, 19 Nov 2024 05:36:17 +0100 (CET) Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by mails.dpdk.org (Postfix) with ESMTP id 29FC9402BC for ; Tue, 19 Nov 2024 05:36:15 +0100 (CET) Received: by linux.microsoft.com (Postfix, from userid 1213) id 4FF8D20BEBD1; Mon, 18 Nov 2024 20:36:14 -0800 (PST) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 4FF8D20BEBD1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1731990974; bh=YX2TuYm5VVgNl7MV3ZeIRCCYq0uhXfI8oeYeDPtP8bE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Q861De6c4Lg6Oh96mcfQfbSo6gYAHShUduFumgf0GEDDJsOJ6bxwn7o9OHs0vx4FY xuijoq7l5elX/Cbahry+rGVXAdB24rb22TKJ4Q04TL/5l6T2UhfZUgp0Vks8ie14hg YZ70W5TBSeKLp7MHT7Q1qV3z8GHB9Dv3ciRF5gQU= From: Andre Muezerie To: roretzla@linux.microsoft.com Cc: Yuying.Zhang@intel.com, aman.deep.singh@intel.com, anatoly.burakov@intel.com, bruce.richardson@intel.com, byron.marohn@intel.com, conor.walsh@intel.com, cristian.dumitrescu@intel.com, david.hunt@intel.com, dev@dpdk.org, dsosnowski@nvidia.com, gakhil@marvell.com, jerinj@marvell.com, jingjing.wu@intel.com, kirill.rybalchenko@intel.com, konstantin.v.ananyev@yandex.ru, matan@nvidia.com, orika@nvidia.com, radu.nicolau@intel.com, ruifeng.wang@arm.com, sameh.gobriel@intel.com, sivaprasad.tummala@amd.com, skori@marvell.com, stephen@networkplumber.org, suanmingm@nvidia.com, vattunuru@marvell.com, viacheslavo@nvidia.com, vladimir.medvedkin@intel.com, yipeng1.wang@intel.com, Andre Muezerie Subject: [PATCH v5 00/16] fix packing of structs when building with MSVC Date: Mon, 18 Nov 2024 20:35:25 -0800 Message-Id: <1731990941-10001-1-git-send-email-andremue@linux.microsoft.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1710968771-16435-1-git-send-email-roretzla@linux.microsoft.com> References: <1710968771-16435-1-git-send-email-roretzla@linux.microsoft.com> X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org From: Andre Muezerie 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. v5: * rebase on top of latest main 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 | 30 +++++++++++++++++++++ drivers/crypto/mlx5/mlx5_crypto.h | 2 ++ 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 | 4 +++ 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 | 4 ++- examples/l3fwd/l3fwd_route.h | 2 ++ examples/ptpclient/ptpclient.c | 8 ++++++ examples/vhost_blk/blk_spec.h | 1 + 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_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_ip4.h | 1 + lib/net/rte_ip6.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 | 7 +++++ 56 files changed, 156 insertions(+), 12 deletions(-) -- 2.47.0.vfs.0.3