Signed-off-by: Jun Wang <junwan...@cestc.cn> --- drivers/net/ixgbe/ixgbe_ethdev.c | 73 ++++++++++++++++++++-------------------- 1 file changed, 37 insertions(+), 36 deletions(-)
diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c index c61c52b..0e624f5 100644 --- a/drivers/net/ixgbe/ixgbe_ethdev.c +++ b/drivers/net/ixgbe/ixgbe_ethdev.c @@ -4313,49 +4313,50 @@ static int ixgbevf_dev_xstats_get_names(__rte_unused struct rte_eth_dev *dev, #ifdef RTE_EXEC_ENV_FREEBSD wait = 1; #endif + if (rte_eal_process_type() == RTE_PROC_PRIMARY) { + if (vf) + diag = ixgbevf_check_link(hw, &link_speed, &link_up, wait); + else + diag = ixgbe_check_link(hw, &link_speed, &link_up, wait); - if (vf) - diag = ixgbevf_check_link(hw, &link_speed, &link_up, wait); - else - diag = ixgbe_check_link(hw, &link_speed, &link_up, wait); + if (diag != 0) { + link.link_speed = RTE_ETH_SPEED_NUM_100M; + link.link_duplex = RTE_ETH_LINK_FULL_DUPLEX; + return rte_eth_linkstatus_set(dev, &link); + } - if (diag != 0) { - link.link_speed = RTE_ETH_SPEED_NUM_100M; - link.link_duplex = RTE_ETH_LINK_FULL_DUPLEX; - return rte_eth_linkstatus_set(dev, &link); - } + if (ixgbe_get_media_type(hw) == ixgbe_media_type_fiber && + !ad->sdp3_no_tx_disable) { + esdp_reg = IXGBE_READ_REG(hw, IXGBE_ESDP); + if ((esdp_reg & IXGBE_ESDP_SDP3)) + link_up = 0; + } - if (ixgbe_get_media_type(hw) == ixgbe_media_type_fiber && - !ad->sdp3_no_tx_disable) { - esdp_reg = IXGBE_READ_REG(hw, IXGBE_ESDP); - if ((esdp_reg & IXGBE_ESDP_SDP3)) - link_up = 0; - } - - if (link_up == 0) { - if (ixgbe_get_media_type(hw) == ixgbe_media_type_fiber) { - ixgbe_dev_wait_setup_link_complete(dev, 0); - /* NOTE: review for potential ordering optimization */ - if (!__atomic_test_and_set(&ad->link_thread_running, __ATOMIC_SEQ_CST)) { - /* To avoid race condition between threads, set - * the IXGBE_FLAG_NEED_LINK_CONFIG flag only - * when there is no link thread running. - */ - intr->flags |= IXGBE_FLAG_NEED_LINK_CONFIG; - if (rte_thread_create_internal_control(&ad->link_thread_tid, - "ixgbe-link", - ixgbe_dev_setup_link_thread_handler, dev) < 0) { + if (link_up == 0) { + if (ixgbe_get_media_type(hw) == ixgbe_media_type_fiber) { + ixgbe_dev_wait_setup_link_complete(dev, 0); + /* NOTE: review for potential ordering optimization */ + if (!__atomic_test_and_set(&ad->link_thread_running, __ATOMIC_SEQ_CST)) { + /* To avoid race condition between threads, set + * the IXGBE_FLAG_NEED_LINK_CONFIG flag only + * when there is no link thread running. + */ + intr->flags |= IXGBE_FLAG_NEED_LINK_CONFIG; + if (rte_thread_create_internal_control(&ad->link_thread_tid, + "ixgbe-link", + ixgbe_dev_setup_link_thread_handler, dev) < 0) { + PMD_DRV_LOG(ERR, + "Create link thread failed!"); + /* NOTE: review for potential ordering optimization */ + __atomic_clear(&ad->link_thread_running, __ATOMIC_SEQ_CST); + } + } else { PMD_DRV_LOG(ERR, - "Create link thread failed!"); - /* NOTE: review for potential ordering optimization */ - __atomic_clear(&ad->link_thread_running, __ATOMIC_SEQ_CST); + "Other link thread is running now!"); } - } else { - PMD_DRV_LOG(ERR, - "Other link thread is running now!"); } + return rte_eth_linkstatus_set(dev, &link); } - return rte_eth_linkstatus_set(dev, &link); } link.link_status = RTE_ETH_LINK_UP; -- 1.8.3.1