From: Dapeng Yu <dapengx...@intel.com> The request of getting VF VSI map request may fail when DCF is busy, this patch adds retry mechanism to make it able to succeed.
Fixes: b09d34ac8584 ("net/ice: fix flow redirector") Cc: sta...@dpdk.org Signed-off-by: Dapeng Yu <dapengx...@intel.com> --- drivers/net/ice/ice_dcf.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/drivers/net/ice/ice_dcf.c b/drivers/net/ice/ice_dcf.c index 38e9a84698..043bd48192 100644 --- a/drivers/net/ice/ice_dcf.c +++ b/drivers/net/ice/ice_dcf.c @@ -534,6 +534,7 @@ int ice_dcf_handle_vsi_update_event(struct ice_dcf_hw *hw) { struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(hw->eth_dev); + int i = 0; int err = 0; rte_spinlock_lock(&hw->vc_cmd_send_lock); @@ -541,8 +542,18 @@ ice_dcf_handle_vsi_update_event(struct ice_dcf_hw *hw) rte_intr_disable(&pci_dev->intr_handle); ice_dcf_disable_irq0(hw); - if (ice_dcf_get_vf_resource(hw) || ice_dcf_get_vf_vsi_map(hw) < 0) - err = -1; + do { + if (ice_dcf_get_vf_resource(hw) || + ice_dcf_get_vf_vsi_map(hw) < 0) { + err = -1; + goto again; + } else { + err = 0; + break; + } +again: + rte_delay_ms(ICE_DCF_ARQ_CHECK_TIME); + } while (i++ < ICE_DCF_ARQ_MAX_RETRIES); rte_intr_enable(&pci_dev->intr_handle); ice_dcf_enable_irq0(hw); -- 2.27.0