I tried this modification and it works as well. [root@compute3 /]# /dpdk/app/dpdk-dumpcap -i 0000:18:00.0 File: /tmp/dpdk-dumpcap_0_0000:18:00.0_20240321043451.pcapng Capturing on '0000:18:00.0' Packets captured: 499 ^C Packets received/dropped on interface '0000:18:00.0': 499/0 (100.0) diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c index c61c52b2966b..86ccbdd78292 100644 --- a/drivers/net/ixgbe/ixgbe_ethdev.c +++ b/drivers/net/ixgbe/ixgbe_ethdev.c @@ -4293,6 +4293,9 @@ ixgbe_dev_link_update_share(struct rte_eth_dev *dev, int wait = 1; u32 esdp_reg; + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -1; + memset(&link, 0, sizeof(link)); link.link_status = RTE_ETH_LINK_DOWN; link.link_speed = RTE_ETH_SPEED_NUM_NONE; junwang01@cestc.cn From: Stephen Hemminger Date: 2024-03-21 01:33 To: dev CC: junwang01; Stephen Hemminger Subject: [PATCH] net/ixgbe: do not update link status in secondary process The code to update link status is not safe in secondary process. If called from secondary it will crash, example from dumpcap: ixgbe_dev_link_update_share() ixgbe_dev_link_update() rte_eth_link_get() Signed-off-by: Stephen Hemminger Reported-by: Jun Wang --- Simpler version of earlier patch, and add explanation. drivers/net/ixgbe/ixgbe_ethdev.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c index c61c52b2966b..86ccbdd78292 100644 --- a/drivers/net/ixgbe/ixgbe_ethdev.c +++ b/drivers/net/ixgbe/ixgbe_ethdev.c @@ -4293,6 +4293,9 @@ ixgbe_dev_link_update_share(struct rte_eth_dev *dev, int wait = 1; u32 esdp_reg; + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -1; + memset(&link, 0, sizeof(link)); link.link_status = RTE_ETH_LINK_DOWN; link.link_speed = RTE_ETH_SPEED_NUM_NONE; -- 2.43.0