> -----Original Message----- > From: Yu, DapengX <dapengx...@intel.com> > Sent: Tuesday, September 14, 2021 11:09 > To: Yang, Qiming <qiming.y...@intel.com>; Zhang, Qi Z <qi.z.zh...@intel.com> > Cc: dev@dpdk.org; Wang, Haiyue <haiyue.w...@intel.com>; Yu, DapengX > <dapengx...@intel.com>; > sta...@dpdk.org > Subject: [PATCH] net/ice: retry getting VF VSI map after it fails > > 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); >
I think we can remove the 'goto', and sleep if we can (like < MAX_RERRIES), like: int err = -1; int i = 0; 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.27.0