From b71573ec2fc239e814a3f329a7c88f4067e91eae Mon Sep 17 00:00:00 2001 From: Dapeng Yu Date: Fri, 24 Sep 2021 16:08:20 +0800 Subject: [PATCH] net/ice: retry getting VF VSI map after failure 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: stable@dpdk.org Signed-off-by: Dapeng Yu Acked-by: Haiyue Wang --- drivers/net/ice/ice_dcf.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/drivers/net/ice/ice_dcf.c b/drivers/net/ice/ice_dcf.c index 38e9a84698..c9c01a14e3 100644 --- a/drivers/net/ice/ice_dcf.c +++ b/drivers/net/ice/ice_dcf.c @@ -534,15 +534,26 @@ 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 err = 0; + int i = 0; + int err = -1; rte_spinlock_lock(&hw->vc_cmd_send_lock); 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; + for (;;) { + if (ice_dcf_get_vf_resource(hw) == 0 && + ice_dcf_get_vf_vsi_map(hw) >= 0) { + err = 0; + break; + } + + if (++i >= ICE_DCF_ARQ_MAX_RETRIES) + break; + + rte_delay_ms(ICE_DCF_ARQ_CHECK_TIME); + } rte_intr_enable(&pci_dev->intr_handle); ice_dcf_enable_irq0(hw); -- 2.20.1