> -----Original Message----- > From: Jiang, JunyuX <junyux.ji...@intel.com> > Sent: Friday, June 19, 2020 15:44 > To: dev@dpdk.org > Cc: Wu, Jingjing <jingjing...@intel.com>; Xing, Beilei > <beilei.x...@intel.com>; Yang, Qiming <qiming.y...@intel.com>; Jiang, > JunyuX <junyux.ji...@intel.com>; sta...@dpdk.org > Subject: [PATCH] net/iavf: fix RSS RETA settings invalid > > This patch moved the RSS initialization from dev start to dev configure, to > fix > the issue that RSS redirection table can not be kept after restarting port. > > Fixes: 69dd4c3d0898 ("net/avf: enable queue and device") > Cc: sta...@dpdk.org > > Signed-off-by: Junyu Jiang <junyux.ji...@intel.com> > --- > drivers/net/iavf/iavf_ethdev.c | 71 +++++++++++++++++----------------- > 1 file changed, 35 insertions(+), 36 deletions(-) > > diff --git a/drivers/net/iavf/iavf_ethdev.c b/drivers/net/iavf/iavf_ethdev.c > index 2b1066b0a..5e79a2d03 100644 > --- a/drivers/net/iavf/iavf_ethdev.c > +++ b/drivers/net/iavf/iavf_ethdev.c > @@ -136,34 +136,6 @@ static const struct eth_dev_ops iavf_eth_dev_ops = > { > .filter_ctrl = iavf_dev_filter_ctrl, > }; > > -static int > -iavf_dev_configure(struct rte_eth_dev *dev) -{ > - struct iavf_adapter *ad = > - IAVF_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private); > - struct iavf_info *vf = IAVF_DEV_PRIVATE_TO_VF(ad); > - struct rte_eth_conf *dev_conf = &dev->data->dev_conf; > - > - ad->rx_bulk_alloc_allowed = true; > - /* Initialize to TRUE. If any of Rx queues doesn't meet the > - * vector Rx/Tx preconditions, it will be reset. > - */ > - ad->rx_vec_allowed = true; > - ad->tx_vec_allowed = true; > - > - if (dev->data->dev_conf.rxmode.mq_mode & > ETH_MQ_RX_RSS_FLAG) > - dev->data->dev_conf.rxmode.offloads |= > DEV_RX_OFFLOAD_RSS_HASH; > - > - /* Vlan stripping setting */ > - if (vf->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_VLAN) { > - if (dev_conf->rxmode.offloads & > DEV_RX_OFFLOAD_VLAN_STRIP) > - iavf_enable_vlan_strip(ad); > - else > - iavf_disable_vlan_strip(ad); > - } > - return 0; > -} > - > static int > iavf_init_rss(struct iavf_adapter *adapter) { @@ -220,6 +192,41 @@ > iavf_init_rss(struct iavf_adapter *adapter) > return 0; > } > > +static int > +iavf_dev_configure(struct rte_eth_dev *dev) { > + struct iavf_adapter *ad = > + IAVF_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private); > + struct iavf_info *vf = IAVF_DEV_PRIVATE_TO_VF(ad); > + struct rte_eth_conf *dev_conf = &dev->data->dev_conf; > + > + ad->rx_bulk_alloc_allowed = true; > + /* Initialize to TRUE. If any of Rx queues doesn't meet the > + * vector Rx/Tx preconditions, it will be reset. > + */ > + ad->rx_vec_allowed = true; > + ad->tx_vec_allowed = true; > + > + if (dev->data->dev_conf.rxmode.mq_mode & > ETH_MQ_RX_RSS_FLAG) > + dev->data->dev_conf.rxmode.offloads |= > DEV_RX_OFFLOAD_RSS_HASH; > + > + /* Vlan stripping setting */ > + if (vf->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_VLAN) { > + if (dev_conf->rxmode.offloads & > DEV_RX_OFFLOAD_VLAN_STRIP) > + iavf_enable_vlan_strip(ad); > + else > + iavf_disable_vlan_strip(ad); > + } > + > + if (vf->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_RSS_PF) { > + if (iavf_init_rss(ad) != 0) { > + PMD_DRV_LOG(ERR, "configure rss failed"); > + return -1; > + } > + } > + return 0; > +} > + > static int > iavf_init_rxq(struct rte_eth_dev *dev, struct iavf_rx_queue *rxq) { @@ - > 440,13 +447,6 @@ iavf_dev_start(struct rte_eth_dev *dev) > return -1; > } > > - if (vf->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_RSS_PF) { > - if (iavf_init_rss(adapter) != 0) { > - PMD_DRV_LOG(ERR, "configure rss failed"); > - goto err_rss; > - } > - } > - > if (iavf_configure_queues(adapter) != 0) { > PMD_DRV_LOG(ERR, "configure queues failed"); > goto err_queue; > @@ -475,7 +475,6 @@ iavf_dev_start(struct rte_eth_dev *dev) > err_mac: > iavf_add_del_all_mac_addr(adapter, false); > err_queue: > -err_rss: > return -1; > } > > -- > 2.17.1
Acked-by: Qiming Yang <qiming.y...@intel.com>