> @@ -1701,12 +1696,8 @@ static inline void > rte_eth_linkstatus_get(const struct rte_eth_dev *dev, > struct rte_eth_link *link) > { > - RTE_ATOMIC(uint64_t) *src = (uint64_t __rte_atomic *)&(dev->data- > >dev_link); > - uint64_t *dst = (uint64_t *)link; > - > - RTE_BUILD_BUG_ON(sizeof(*link) != sizeof(uint64_t)); > - > - *dst = rte_atomic_load_explicit(src, rte_memory_order_seq_cst); > + link->val64 = rte_atomic_load_explicit(&dev->data->dev_link.val64, > + rte_memory_order_seq_cst); > }
rte_eth_linkstatus_get() may be called by rte_eth_link_get(): https://elixir.bootlin.com/dpdk/v24.03/source/lib/ethdev/rte_ethdev.c#L2986 The application may call rte_eth_link_get() with the "link" parameter pointing to memory shared by other threads. So link->val64 must be stored atomically: rte_atomic_store_explicit(&link->val64, rte_atomic_load_explicit(&dev->data->dev_link.val64, rte_memory_order_seq_cst), rte_memory_order_seq_cst); With the above modification, Acked-by: Morten Brørup <m...@smartsharesystems.com>