net/ice: fix RSS advanced rule
authorJunyu Jiang <junyux.jiang@intel.com>
Tue, 7 Apr 2020 01:48:17 +0000 (01:48 +0000)
committerFerruh Yigit <ferruh.yigit@intel.com>
Tue, 21 Apr 2020 11:57:06 +0000 (13:57 +0200)
This patch moved the RSS initialization from dev start to dev configure
to fix RSS advanced rule invalid issue after running port stop and port
start.

Fixes: 5ad3db8d4bdd ("net/ice: enable advanced RSS")
Cc: stable@dpdk.org
Signed-off-by: Junyu Jiang <junyux.jiang@intel.com>
Tested-by: Zhiwei He <zhiwei.he@intel.com>
Acked-by: Qiming Yang <qiming.yang@intel.com>
drivers/net/ice/ice_ethdev.c

index 3c38472..d5110c4 100644 (file)
@@ -2436,24 +2436,6 @@ ice_dev_uninit(struct rte_eth_dev *dev)
        return 0;
 }
 
-static int
-ice_dev_configure(struct rte_eth_dev *dev)
-{
-       struct ice_adapter *ad =
-               ICE_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private);
-
-       /* Initialize to TRUE. If any of Rx queues doesn't meet the
-        * bulk allocation or vector Rx preconditions we will reset it.
-        */
-       ad->rx_bulk_alloc_allowed = true;
-       ad->tx_simple_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;
-
-       return 0;
-}
-
 static int ice_init_rss(struct ice_pf *pf)
 {
        struct ice_hw *hw = ICE_PF_TO_HW(pf);
@@ -2584,6 +2566,32 @@ static int ice_init_rss(struct ice_pf *pf)
        return 0;
 }
 
+static int
+ice_dev_configure(struct rte_eth_dev *dev)
+{
+       struct ice_adapter *ad =
+               ICE_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private);
+       struct ice_pf *pf = ICE_DEV_PRIVATE_TO_PF(dev->data->dev_private);
+       int ret;
+
+       /* Initialize to TRUE. If any of Rx queues doesn't meet the
+        * bulk allocation or vector Rx preconditions we will reset it.
+        */
+       ad->rx_bulk_alloc_allowed = true;
+       ad->tx_simple_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;
+
+       ret = ice_init_rss(pf);
+       if (ret) {
+               PMD_DRV_LOG(ERR, "Failed to enable rss for PF");
+               return ret;
+       }
+
+       return 0;
+}
+
 static void
 __vsi_queues_bind_intr(struct ice_vsi *vsi, uint16_t msix_vect,
                       int base_queue, int nb_queue)
@@ -2787,12 +2795,6 @@ ice_dev_start(struct rte_eth_dev *dev)
                }
        }
 
-       ret = ice_init_rss(pf);
-       if (ret) {
-               PMD_DRV_LOG(ERR, "Failed to enable rss for PF");
-               goto rx_err;
-       }
-
        ice_set_rx_function(dev);
        ice_set_tx_function(dev);