From: Dapeng Yu Date: Fri, 24 Sep 2021 08:08:20 +0000 (+0800) Subject: net/ice: retry getting VF VSI map after failure X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=b71573ec2fc239e814a3f329a7c88f4067e91eae;p=dpdk.git 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 --- 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);