Thanks Jia. Comments as below. > -----Original Message----- > From: Guo, Jia > Sent: Tuesday, July 21, 2020 11:58 AM > To: Jiang, MaoX <maox.ji...@intel.com>; Ye, Xiaolong > <xiaolong...@intel.com> > Cc: dev@dpdk.org; sta...@dpdk.org > Subject: Re: [dpdk-dev] [PATCH 1/2] net/i40e: fix binding interrupt without > msix vectors > > hi, jiang mao > > On 7/9/2020 3:50 AM, Jiang Mao wrote: > > The value of vsi->nb_msix shouldn`t be zero, otherwise, all of > > interrupts will be bind to vector 0. > > > > Fixes: 4861cde461 (i40e: new poll mode driver) > > Cc: sta...@dpdk.org > > > Blank line is need before Signed-off. And please remember --reply-to when > you send new version patch to trace the comments. > > > > Signed-off-by: Jiang Mao <maox.ji...@intel.com> > > --- > > drivers/net/i40e/i40e_ethdev.c | 31 +++++++++++++++++++++++-------- > > drivers/net/i40e/i40e_ethdev.h | 2 +- > > 2 files changed, 24 insertions(+), 9 deletions(-) > > > > diff --git a/drivers/net/i40e/i40e_ethdev.c > b/drivers/net/i40e/i40e_ethdev.c > > index 777e149..16fcb8d 100644 > > --- a/drivers/net/i40e/i40e_ethdev.c > > +++ b/drivers/net/i40e/i40e_ethdev.c > > @@ -2001,7 +2001,7 @@ void i40e_flex_payload_reg_set_default(struct > i40e_hw *hw) > > I40E_WRITE_FLUSH(hw); > > } > > > > -void > > +int > > i40e_vsi_queues_bind_intr(struct i40e_vsi *vsi, uint16_t itr_idx) > > { > > struct rte_eth_dev *dev = vsi->adapter->eth_dev; > > @@ -2021,10 +2021,14 @@ void i40e_flex_payload_reg_set_default(struct > i40e_hw *hw) > > > > /* VF bind interrupt */ > > if (vsi->type == I40E_VSI_SRIOV) { > > + if (vsi->nb_msix == 0) { > > + PMD_DRV_LOG(ERR, "No msix resource"); > > + return -EINVAL; > > + } > > __vsi_queues_bind_intr(vsi, msix_vect, > > vsi->base_queue, vsi->nb_qps, > > itr_idx); > > - return; > > + return 0; > > } > > > > /* PF & VMDq bind interrupt */ > > @@ -2041,7 +2045,10 @@ void i40e_flex_payload_reg_set_default(struct > i40e_hw *hw) > > } > > > > for (i = 0; i < vsi->nb_used_qps; i++) { > > - if (nb_msix <= 1) { > > + if (vsi->nb_msix == 0) { > > + PMD_DRV_LOG(ERR, "No msix resource"); > > + return -EINVAL; > > + } else if (nb_msix <= 1) { > > if (!rte_intr_allow_others(intr_handle)) > > /* allow to share MISC_VEC_ID */ > > msix_vect = I40E_MISC_VEC_ID; > > @@ -2066,6 +2073,8 @@ void i40e_flex_payload_reg_set_default(struct > i40e_hw *hw) > > msix_vect++; > > nb_msix--; > > } > > + > > + return 0; > > } > > > > static void > > @@ -2306,21 +2315,27 @@ void i40e_flex_payload_reg_set_default(struct > i40e_hw *hw) > > /* Map queues with MSIX interrupt */ > > main_vsi->nb_used_qps = dev->data->nb_rx_queues - > > pf->nb_cfg_vmdq_vsi * > RTE_LIBRTE_I40E_QUEUE_NUM_PER_VM; > > - i40e_vsi_queues_bind_intr(main_vsi, I40E_ITR_INDEX_DEFAULT); > > + ret = i40e_vsi_queues_bind_intr(main_vsi, > I40E_ITR_INDEX_DEFAULT); > > + if (ret < 0) > > > Better to add some print log out of the calling if it is need. Below is > the same.
At i40e_vsi_queues_bind_intr(), I have add a print log, I think it`s enough, otherwise it will add too many print log in code. > > > > + return ret; > > i40e_vsi_enable_queues_intr(main_vsi); > > > > /* Map VMDQ VSI queues with MSIX interrupt */ > > for (i = 0; i < pf->nb_cfg_vmdq_vsi; i++) { > > pf->vmdq[i].vsi->nb_used_qps = > RTE_LIBRTE_I40E_QUEUE_NUM_PER_VM; > > - i40e_vsi_queues_bind_intr(pf->vmdq[i].vsi, > > - I40E_ITR_INDEX_DEFAULT); > > + ret = i40e_vsi_queues_bind_intr(pf->vmdq[i].vsi, > > + I40E_ITR_INDEX_DEFAULT); > > + if (ret < 0) > > + return ret; > > i40e_vsi_enable_queues_intr(pf->vmdq[i].vsi); > > } > > > > /* enable FDIR MSIX interrupt */ > > if (pf->fdir.fdir_vsi) { > > - i40e_vsi_queues_bind_intr(pf->fdir.fdir_vsi, > > - I40E_ITR_INDEX_NONE); > > + ret = i40e_vsi_queues_bind_intr(pf->fdir.fdir_vsi, > > + I40E_ITR_INDEX_NONE); > > + if (ret < 0) > > + return ret; > > i40e_vsi_enable_queues_intr(pf->fdir.fdir_vsi); > > } > > > > diff --git a/drivers/net/i40e/i40e_ethdev.h > b/drivers/net/i40e/i40e_ethdev.h > > index e5d0ce5..33fbe77 100644 > > --- a/drivers/net/i40e/i40e_ethdev.h > > +++ b/drivers/net/i40e/i40e_ethdev.h > > @@ -1248,7 +1248,7 @@ struct i40e_vsi *i40e_vsi_setup(struct i40e_pf *pf, > > void i40e_pf_disable_irq0(struct i40e_hw *hw); > > void i40e_pf_enable_irq0(struct i40e_hw *hw); > > int i40e_dev_link_update(struct rte_eth_dev *dev, int > wait_to_complete); > > -void i40e_vsi_queues_bind_intr(struct i40e_vsi *vsi, uint16_t itr_idx); > > +int i40e_vsi_queues_bind_intr(struct i40e_vsi *vsi, uint16_t itr_idx); > > void i40e_vsi_queues_unbind_intr(struct i40e_vsi *vsi); > > int i40e_vsi_vlan_pvid_set(struct i40e_vsi *vsi, > > struct i40e_vsi_vlan_pvid_info *info);