On Mon, Dec 23, 2024 at 12:03 PM David Marchand <david.march...@redhat.com> wrote: > > v6: > > * replace __rte_msvc_pack with __rte_packed_begin > > * replace __rte_packed with __rte_packed_end > > * update checkpatches.sh to ensure __rte_packed_begin and > > __rte_packed_end are used in pairs > > I had mentionned this in a separate thread. > Why not do like OVS and have a RTE_PACKED() macro? > > #ifdef RTE_TOOLCHAIN_MSVC > #define RTE_PACKED(...) __pragma(pack(push, 1)) __VA_ARGS__ > __pragma(pack(pop)) > #else > #define RTE_PACKED(...) __VA_ARGS__ __attribute__((__packed__)) > #endif
Mm, in practice, this would be problematic with struct where endianness matters (for example). In file included from ../../../git/pub/dpdk.org/main/lib/net/rte_ip.h:9, from ../../../git/pub/dpdk.org/main/lib/ethdev/rte_flow.h:25, from ../../../git/pub/dpdk.org/main/lib/ethdev/rte_eth_ctrl.h:11, from ../../../git/pub/dpdk.org/main/lib/ethdev/rte_ethdev.h:1472, from ../../../git/pub/dpdk.org/main/lib/ethdev/ethdev_driver.h:21, from ../../../git/pub/dpdk.org/main/drivers/net/failsafe/failsafe_ops.c:15: ../../../git/pub/dpdk.org/main/lib/net/rte_ip4.h:48:1: error: embedding a directive within macro arguments is not portable [-Werror] 48 | #if RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN | ^ ../../../git/pub/dpdk.org/main/lib/net/rte_ip4.h:51:1: error: embedding a directive within macro arguments is not portable [-Werror] 51 | #elif RTE_BYTE_ORDER == RTE_BIG_ENDIAN | ^ ../../../git/pub/dpdk.org/main/lib/net/rte_ip4.h:54:1: error: embedding a directive within macro arguments is not portable [-Werror] 54 | #endif | ^ > > This removes the need for updating checkpatch. > Plus, builds on Linux will catch issues (hopefully by the author of > the change, before submitting). > > > > * remove __rte_packed > > Please mark it deprecated for now (see RTE_DEPRECATED / add a > deprecation notice) and we will remove it in 25.11. Still, please rework this part. -- David Marchand