net/ixgbe: stop link setup alarm handler before start
We should stop alarm handler before resetting the HW to avoid concurrent device reconfiguration. Fixes: 0408f47ba4d6 ("net/ixgbe: fix busy polling while fiber link update") CC: stable@dpdk.org Signed-off-by: Ilya Maximets <i.maximets@samsung.com> Tested-by: Anatoly Burakov <anatoly.burakov@intel.com> Acked-by: Qi Zhang <qi.z.zhang@intel.com>
This commit is contained in:
parent
725f5dd0bf
commit
916193dda6
@ -2549,6 +2549,9 @@ ixgbe_dev_start(struct rte_eth_dev *dev)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* Stop the link setup handler before resetting the HW. */
|
||||
rte_eal_alarm_cancel(ixgbe_dev_setup_link_alarm_handler, dev);
|
||||
|
||||
/* disable uio/vfio intr/eventfd mapping */
|
||||
rte_intr_disable(intr_handle);
|
||||
|
||||
@ -2731,8 +2734,6 @@ ixgbe_dev_start(struct rte_eth_dev *dev)
|
||||
if (err)
|
||||
goto error;
|
||||
|
||||
ixgbe_dev_link_update(dev, 0);
|
||||
|
||||
skip_link_setup:
|
||||
|
||||
if (rte_intr_allow_others(intr_handle)) {
|
||||
@ -2768,6 +2769,12 @@ skip_link_setup:
|
||||
"please call hierarchy_commit() "
|
||||
"before starting the port");
|
||||
|
||||
/*
|
||||
* Update link status right before return, because it may
|
||||
* start link configuration process in a separate thread.
|
||||
*/
|
||||
ixgbe_dev_link_update(dev, 0);
|
||||
|
||||
return 0;
|
||||
|
||||
error:
|
||||
@ -5061,6 +5068,9 @@ ixgbevf_dev_start(struct rte_eth_dev *dev)
|
||||
|
||||
PMD_INIT_FUNC_TRACE();
|
||||
|
||||
/* Stop the link setup handler before resetting the HW. */
|
||||
rte_eal_alarm_cancel(ixgbe_dev_setup_link_alarm_handler, dev);
|
||||
|
||||
err = hw->mac.ops.reset_hw(hw);
|
||||
if (err) {
|
||||
PMD_INIT_LOG(ERR, "Unable to reset vf hardware (%d)", err);
|
||||
@ -5096,8 +5106,6 @@ ixgbevf_dev_start(struct rte_eth_dev *dev)
|
||||
|
||||
ixgbevf_dev_rxtx_start(dev);
|
||||
|
||||
ixgbevf_dev_link_update(dev, 0);
|
||||
|
||||
/* check and configure queue intr-vector mapping */
|
||||
if (rte_intr_cap_multiple(intr_handle) &&
|
||||
dev->data->dev_conf.intr_conf.rxq) {
|
||||
@ -5135,6 +5143,12 @@ ixgbevf_dev_start(struct rte_eth_dev *dev)
|
||||
/* Re-enable interrupt for VF */
|
||||
ixgbevf_intr_enable(dev);
|
||||
|
||||
/*
|
||||
* Update link status right before return, because it may
|
||||
* start link configuration process in a separate thread.
|
||||
*/
|
||||
ixgbevf_dev_link_update(dev, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user