patches for DPDK stable branches
 help / color / mirror / Atom feed
* [RFC PATCH] drivers/net: fix RSS multi-queue mode check
@ 2023-02-23 16:04 Ferruh Yigit
  2023-02-27  1:34 ` lihuisong (C)
  0 siblings, 1 reply; 5+ messages in thread
From: Ferruh Yigit @ 2023-02-23 16:04 UTC (permalink / raw)
  To: Ajit Khaparde, Somnath Kotur, Rahul Lakkireddy, Simei Su,
	Wenjun Wu, Marcin Wojtas, Michal Krawczyk, Shai Brandes,
	Evgeny Schemeilin, Igor Chauskin, John Daley, Hyong Youb Kim,
	Qi Zhang, Xiao Wang, Junfeng Guo, Ziyang Xuan, Xiaoyun Wang,
	Guoyang Zhou, Dongdong Liu, Yisen Zhuang, Yuying Zhang,
	Beilei Xing, Jingjing Wu, Qiming Yang, Shijith Thotton,
	Srisivasubramanian Srinivasan, Long Li, Chaoyong He,
	Niklas Söderlund, Jiawen Wu, Rasesh Mody,
	Devendra Singh Rawat, Jerin Jacob, Maciej Czekaj, Jian Wang,
	Jochen Behrens, Andrew Rybchenko, Ferruh Yigit
  Cc: Thomas Monjalon, dev, stable

'rxmode.mq_mode' is an enum which should be an abstraction over values,
instead of mask it with 'RTE_ETH_MQ_RX_RSS_FLAG' to detect if RSS is
supported, directly compare with 'RTE_ETH_MQ_RX_RSS' enum element.

Most of the time only 'RTE_ETH_MQ_RX_RSS' is requested by user, that is
why output is almost same, but there may be cases driver doesn't support
RSS combinations, like 'RTE_ETH_MQ_RX_VMDQ_DCB_RSS' but that is hidden
by masking with 'RTE_ETH_MQ_RX_RSS_FLAG'.

Fixes: 73fb89dd6a00 ("drivers/net: fix RSS hash offload flag if no RSS")
Cc: stable@dpdk.org

Signed-off-by: Ferruh Yigit <ferruh.yigit@amd.com>

---

There are more usage like "rxmode->mq_mode & RTE_ETH_MQ_RX_RSS_FLAG" in
drivers, not sure to fix all in this commit or not, feedback welcomed.
---
 drivers/net/bnxt/bnxt_ethdev.c       | 2 +-
 drivers/net/cxgbe/cxgbe_ethdev.c     | 2 +-
 drivers/net/e1000/igb_ethdev.c       | 4 ++--
 drivers/net/ena/ena_ethdev.c         | 2 +-
 drivers/net/enic/enic_ethdev.c       | 2 +-
 drivers/net/fm10k/fm10k_ethdev.c     | 2 +-
 drivers/net/gve/gve_ethdev.c         | 2 +-
 drivers/net/hinic/hinic_pmd_ethdev.c | 2 +-
 drivers/net/hns3/hns3_ethdev.c       | 2 +-
 drivers/net/hns3/hns3_ethdev_vf.c    | 2 +-
 drivers/net/i40e/i40e_ethdev.c       | 2 +-
 drivers/net/iavf/iavf_ethdev.c       | 2 +-
 drivers/net/ice/ice_dcf_ethdev.c     | 2 +-
 drivers/net/ice/ice_ethdev.c         | 2 +-
 drivers/net/igc/igc_ethdev.c         | 2 +-
 drivers/net/ixgbe/ixgbe_ethdev.c     | 4 ++--
 drivers/net/liquidio/lio_ethdev.c    | 2 +-
 drivers/net/mana/mana.c              | 2 +-
 drivers/net/netvsc/hn_ethdev.c       | 2 +-
 drivers/net/nfp/nfp_common.c         | 2 +-
 drivers/net/ngbe/ngbe_ethdev.c       | 2 +-
 drivers/net/qede/qede_ethdev.c       | 2 +-
 drivers/net/thunderx/nicvf_ethdev.c  | 2 +-
 drivers/net/txgbe/txgbe_ethdev.c     | 2 +-
 drivers/net/txgbe/txgbe_ethdev_vf.c  | 2 +-
 drivers/net/vmxnet3/vmxnet3_ethdev.c | 2 +-
 26 files changed, 28 insertions(+), 28 deletions(-)

diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c
index 753e86b4b2af..14c0d5f8c72b 100644
--- a/drivers/net/bnxt/bnxt_ethdev.c
+++ b/drivers/net/bnxt/bnxt_ethdev.c
@@ -1143,7 +1143,7 @@ static int bnxt_dev_configure_op(struct rte_eth_dev *eth_dev)
 	bp->rx_cp_nr_rings = bp->rx_nr_rings;
 	bp->tx_cp_nr_rings = bp->tx_nr_rings;
 
-	if (eth_dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
+	if (eth_dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
 		rx_offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
 	eth_dev->data->dev_conf.rxmode.offloads = rx_offloads;
 
diff --git a/drivers/net/cxgbe/cxgbe_ethdev.c b/drivers/net/cxgbe/cxgbe_ethdev.c
index 45bbeaef0ceb..0e9ccc0587ba 100644
--- a/drivers/net/cxgbe/cxgbe_ethdev.c
+++ b/drivers/net/cxgbe/cxgbe_ethdev.c
@@ -440,7 +440,7 @@ int cxgbe_dev_configure(struct rte_eth_dev *eth_dev)
 
 	CXGBE_FUNC_TRACE();
 
-	if (eth_dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
+	if (eth_dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
 		eth_dev->data->dev_conf.rxmode.offloads |=
 			RTE_ETH_RX_OFFLOAD_RSS_HASH;
 
diff --git a/drivers/net/e1000/igb_ethdev.c b/drivers/net/e1000/igb_ethdev.c
index 8858f975f8cc..8e6b43c2ff2d 100644
--- a/drivers/net/e1000/igb_ethdev.c
+++ b/drivers/net/e1000/igb_ethdev.c
@@ -1146,7 +1146,7 @@ eth_igb_configure(struct rte_eth_dev *dev)
 
 	PMD_INIT_FUNC_TRACE();
 
-	if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
+	if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
 		dev->data->dev_conf.rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
 
 	/* multiple queue mode checking */
@@ -3255,7 +3255,7 @@ igbvf_dev_configure(struct rte_eth_dev *dev)
 	PMD_INIT_LOG(DEBUG, "Configured Virtual Function port id: %d",
 		     dev->data->port_id);
 
-	if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
+	if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
 		dev->data->dev_conf.rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
 
 	/*
diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c
index efcb163027c8..6929d7066fbd 100644
--- a/drivers/net/ena/ena_ethdev.c
+++ b/drivers/net/ena/ena_ethdev.c
@@ -2307,7 +2307,7 @@ static int ena_dev_configure(struct rte_eth_dev *dev)
 
 	adapter->state = ENA_ADAPTER_STATE_CONFIG;
 
-	if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
+	if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
 		dev->data->dev_conf.rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
 	dev->data->dev_conf.txmode.offloads |= RTE_ETH_TX_OFFLOAD_MULTI_SEGS;
 
diff --git a/drivers/net/enic/enic_ethdev.c b/drivers/net/enic/enic_ethdev.c
index cdf091559196..f3a7bc161408 100644
--- a/drivers/net/enic/enic_ethdev.c
+++ b/drivers/net/enic/enic_ethdev.c
@@ -323,7 +323,7 @@ static int enicpmd_dev_configure(struct rte_eth_dev *eth_dev)
 		return ret;
 	}
 
-	if (eth_dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
+	if (eth_dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
 		eth_dev->data->dev_conf.rxmode.offloads |=
 			RTE_ETH_RX_OFFLOAD_RSS_HASH;
 
diff --git a/drivers/net/fm10k/fm10k_ethdev.c b/drivers/net/fm10k/fm10k_ethdev.c
index 8b83063f0a2d..49d7849ba5ea 100644
--- a/drivers/net/fm10k/fm10k_ethdev.c
+++ b/drivers/net/fm10k/fm10k_ethdev.c
@@ -450,7 +450,7 @@ fm10k_dev_configure(struct rte_eth_dev *dev)
 
 	PMD_INIT_FUNC_TRACE();
 
-	if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
+	if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
 		dev->data->dev_conf.rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
 
 	/* multiple queue mode checking */
diff --git a/drivers/net/gve/gve_ethdev.c b/drivers/net/gve/gve_ethdev.c
index cf28a4a3b710..f34755a369fb 100644
--- a/drivers/net/gve/gve_ethdev.c
+++ b/drivers/net/gve/gve_ethdev.c
@@ -92,7 +92,7 @@ gve_dev_configure(struct rte_eth_dev *dev)
 {
 	struct gve_priv *priv = dev->data->dev_private;
 
-	if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
+	if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
 		dev->data->dev_conf.rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
 
 	if (dev->data->dev_conf.rxmode.offloads & RTE_ETH_RX_OFFLOAD_TCP_LRO)
diff --git a/drivers/net/hinic/hinic_pmd_ethdev.c b/drivers/net/hinic/hinic_pmd_ethdev.c
index 7aa5e7d8e929..872ee97b1e97 100644
--- a/drivers/net/hinic/hinic_pmd_ethdev.c
+++ b/drivers/net/hinic/hinic_pmd_ethdev.c
@@ -311,7 +311,7 @@ static int hinic_dev_configure(struct rte_eth_dev *dev)
 		return -EINVAL;
 	}
 
-	if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
+	if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
 		dev->data->dev_conf.rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
 
 	/* mtu size is 256~9600 */
diff --git a/drivers/net/hns3/hns3_ethdev.c b/drivers/net/hns3/hns3_ethdev.c
index 6babf67fcec2..fd3e499a3d38 100644
--- a/drivers/net/hns3/hns3_ethdev.c
+++ b/drivers/net/hns3/hns3_ethdev.c
@@ -2016,7 +2016,7 @@ hns3_dev_configure(struct rte_eth_dev *dev)
 			goto cfg_err;
 	}
 
-	if ((uint32_t)mq_mode & RTE_ETH_MQ_RX_RSS_FLAG) {
+	if (mq_mode == RTE_ETH_MQ_RX_RSS) {
 		conf->rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
 		rss_conf = conf->rx_adv_conf.rss_conf;
 		ret = hns3_dev_rss_hash_update(dev, &rss_conf);
diff --git a/drivers/net/hns3/hns3_ethdev_vf.c b/drivers/net/hns3/hns3_ethdev_vf.c
index d051a1357b9f..00eb22d05558 100644
--- a/drivers/net/hns3/hns3_ethdev_vf.c
+++ b/drivers/net/hns3/hns3_ethdev_vf.c
@@ -494,7 +494,7 @@ hns3vf_dev_configure(struct rte_eth_dev *dev)
 	}
 
 	/* When RSS is not configured, redirect the packet queue 0 */
-	if ((uint32_t)mq_mode & RTE_ETH_MQ_RX_RSS_FLAG) {
+	if (mq_mode == RTE_ETH_MQ_RX_RSS) {
 		conf->rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
 		rss_conf = conf->rx_adv_conf.rss_conf;
 		ret = hns3_dev_rss_hash_update(dev, &rss_conf);
diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
index 7726a89d99fb..3c3dbc285c96 100644
--- a/drivers/net/i40e/i40e_ethdev.c
+++ b/drivers/net/i40e/i40e_ethdev.c
@@ -1884,7 +1884,7 @@ i40e_dev_configure(struct rte_eth_dev *dev)
 	ad->tx_simple_allowed = true;
 	ad->tx_vec_allowed = true;
 
-	if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
+	if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
 		dev->data->dev_conf.rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
 
 	ret = i40e_dev_init_vlan(dev);
diff --git a/drivers/net/iavf/iavf_ethdev.c b/drivers/net/iavf/iavf_ethdev.c
index 3196210f2c1d..39860c08b606 100644
--- a/drivers/net/iavf/iavf_ethdev.c
+++ b/drivers/net/iavf/iavf_ethdev.c
@@ -638,7 +638,7 @@ iavf_dev_configure(struct rte_eth_dev *dev)
 	ad->rx_vec_allowed = true;
 	ad->tx_vec_allowed = true;
 
-	if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
+	if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
 		dev->data->dev_conf.rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
 
 	/* Large VF setting */
diff --git a/drivers/net/ice/ice_dcf_ethdev.c b/drivers/net/ice/ice_dcf_ethdev.c
index dcbf2af5b039..f61a30716e5e 100644
--- a/drivers/net/ice/ice_dcf_ethdev.c
+++ b/drivers/net/ice/ice_dcf_ethdev.c
@@ -711,7 +711,7 @@ ice_dcf_dev_configure(struct rte_eth_dev *dev)
 	ad->rx_bulk_alloc_allowed = true;
 	ad->tx_simple_allowed = true;
 
-	if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
+	if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
 		dev->data->dev_conf.rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
 
 	return 0;
diff --git a/drivers/net/ice/ice_ethdev.c b/drivers/net/ice/ice_ethdev.c
index 0d011bbffa77..96595fd7afaf 100644
--- a/drivers/net/ice/ice_ethdev.c
+++ b/drivers/net/ice/ice_ethdev.c
@@ -3403,7 +3403,7 @@ ice_dev_configure(struct rte_eth_dev *dev)
 	ad->rx_bulk_alloc_allowed = true;
 	ad->tx_simple_allowed = true;
 
-	if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
+	if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
 		dev->data->dev_conf.rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
 
 	if (dev->data->nb_rx_queues) {
diff --git a/drivers/net/igc/igc_ethdev.c b/drivers/net/igc/igc_ethdev.c
index fab2ab6d1ce7..49f2b3738b84 100644
--- a/drivers/net/igc/igc_ethdev.c
+++ b/drivers/net/igc/igc_ethdev.c
@@ -375,7 +375,7 @@ eth_igc_configure(struct rte_eth_dev *dev)
 
 	PMD_INIT_FUNC_TRACE();
 
-	if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
+	if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
 		dev->data->dev_conf.rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
 
 	ret  = igc_check_mq_mode(dev);
diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c
index 88118bc30560..328ccf918e86 100644
--- a/drivers/net/ixgbe/ixgbe_ethdev.c
+++ b/drivers/net/ixgbe/ixgbe_ethdev.c
@@ -2431,7 +2431,7 @@ ixgbe_dev_configure(struct rte_eth_dev *dev)
 
 	PMD_INIT_FUNC_TRACE();
 
-	if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
+	if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
 		dev->data->dev_conf.rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
 
 	/* multiple queue mode checking */
@@ -5321,7 +5321,7 @@ ixgbevf_dev_configure(struct rte_eth_dev *dev)
 	PMD_INIT_LOG(DEBUG, "Configured Virtual Function port id: %d",
 		     dev->data->port_id);
 
-	if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
+	if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
 		dev->data->dev_conf.rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
 
 	/*
diff --git a/drivers/net/liquidio/lio_ethdev.c b/drivers/net/liquidio/lio_ethdev.c
index ebcfbb1a5c0f..07fbaeda1ee6 100644
--- a/drivers/net/liquidio/lio_ethdev.c
+++ b/drivers/net/liquidio/lio_ethdev.c
@@ -1722,7 +1722,7 @@ lio_dev_configure(struct rte_eth_dev *eth_dev)
 
 	PMD_INIT_FUNC_TRACE();
 
-	if (eth_dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
+	if (eth_dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
 		eth_dev->data->dev_conf.rxmode.offloads |=
 			RTE_ETH_RX_OFFLOAD_RSS_HASH;
 
diff --git a/drivers/net/mana/mana.c b/drivers/net/mana/mana.c
index 43221e743e87..76de691a8252 100644
--- a/drivers/net/mana/mana.c
+++ b/drivers/net/mana/mana.c
@@ -78,7 +78,7 @@ mana_dev_configure(struct rte_eth_dev *dev)
 	struct mana_priv *priv = dev->data->dev_private;
 	struct rte_eth_conf *dev_conf = &dev->data->dev_conf;
 
-	if (dev_conf->rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
+	if (dev_conf->rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
 		dev_conf->rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
 
 	if (dev->data->nb_rx_queues != dev->data->nb_tx_queues) {
diff --git a/drivers/net/netvsc/hn_ethdev.c b/drivers/net/netvsc/hn_ethdev.c
index d0bbc0a4c0c0..4950b061799c 100644
--- a/drivers/net/netvsc/hn_ethdev.c
+++ b/drivers/net/netvsc/hn_ethdev.c
@@ -721,7 +721,7 @@ static int hn_dev_configure(struct rte_eth_dev *dev)
 
 	PMD_INIT_FUNC_TRACE();
 
-	if (dev_conf->rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
+	if (dev_conf->rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
 		dev_conf->rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
 
 	unsupported = txmode->offloads & ~HN_TX_OFFLOAD_CAPS;
diff --git a/drivers/net/nfp/nfp_common.c b/drivers/net/nfp/nfp_common.c
index 907777a9e44d..a774fad3fba2 100644
--- a/drivers/net/nfp/nfp_common.c
+++ b/drivers/net/nfp/nfp_common.c
@@ -161,7 +161,7 @@ nfp_net_configure(struct rte_eth_dev *dev)
 	rxmode = &dev_conf->rxmode;
 	txmode = &dev_conf->txmode;
 
-	if (rxmode->mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
+	if (rxmode->mq_mode == RTE_ETH_MQ_RX_RSS)
 		rxmode->offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
 
 	/* Checking TX mode */
diff --git a/drivers/net/ngbe/ngbe_ethdev.c b/drivers/net/ngbe/ngbe_ethdev.c
index c32d954769b0..5b53781c4aaf 100644
--- a/drivers/net/ngbe/ngbe_ethdev.c
+++ b/drivers/net/ngbe/ngbe_ethdev.c
@@ -918,7 +918,7 @@ ngbe_dev_configure(struct rte_eth_dev *dev)
 
 	PMD_INIT_FUNC_TRACE();
 
-	if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
+	if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
 		dev->data->dev_conf.rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
 
 	/* set flag to update link status after init */
diff --git a/drivers/net/qede/qede_ethdev.c b/drivers/net/qede/qede_ethdev.c
index a4923670d6ba..11ddd8abf16a 100644
--- a/drivers/net/qede/qede_ethdev.c
+++ b/drivers/net/qede/qede_ethdev.c
@@ -1272,7 +1272,7 @@ static int qede_dev_configure(struct rte_eth_dev *eth_dev)
 
 	PMD_INIT_FUNC_TRACE(edev);
 
-	if (rxmode->mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
+	if (rxmode->mq_mode == RTE_ETH_MQ_RX_RSS)
 		rxmode->offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
 
 	/* We need to have min 1 RX queue.There is no min check in
diff --git a/drivers/net/thunderx/nicvf_ethdev.c b/drivers/net/thunderx/nicvf_ethdev.c
index ab1e714d9767..b9cd09332510 100644
--- a/drivers/net/thunderx/nicvf_ethdev.c
+++ b/drivers/net/thunderx/nicvf_ethdev.c
@@ -1984,7 +1984,7 @@ nicvf_dev_configure(struct rte_eth_dev *dev)
 
 	PMD_INIT_FUNC_TRACE();
 
-	if (rxmode->mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
+	if (rxmode->mq_mode == RTE_ETH_MQ_RX_RSS)
 		rxmode->offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
 
 	if (!rte_eal_has_hugepages()) {
diff --git a/drivers/net/txgbe/txgbe_ethdev.c b/drivers/net/txgbe/txgbe_ethdev.c
index a502618bc5a2..08ad5a087e23 100644
--- a/drivers/net/txgbe/txgbe_ethdev.c
+++ b/drivers/net/txgbe/txgbe_ethdev.c
@@ -1508,7 +1508,7 @@ txgbe_dev_configure(struct rte_eth_dev *dev)
 
 	PMD_INIT_FUNC_TRACE();
 
-	if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
+	if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
 		dev->data->dev_conf.rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
 
 	/* multiple queue mode checking */
diff --git a/drivers/net/txgbe/txgbe_ethdev_vf.c b/drivers/net/txgbe/txgbe_ethdev_vf.c
index 3b1f7c913b7b..02a59fc696e5 100644
--- a/drivers/net/txgbe/txgbe_ethdev_vf.c
+++ b/drivers/net/txgbe/txgbe_ethdev_vf.c
@@ -577,7 +577,7 @@ txgbevf_dev_configure(struct rte_eth_dev *dev)
 	PMD_INIT_LOG(DEBUG, "Configured Virtual Function port id: %d",
 		     dev->data->port_id);
 
-	if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
+	if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
 		dev->data->dev_conf.rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
 
 	/*
diff --git a/drivers/net/vmxnet3/vmxnet3_ethdev.c b/drivers/net/vmxnet3/vmxnet3_ethdev.c
index fd946dec5c80..8efde46ae0ad 100644
--- a/drivers/net/vmxnet3/vmxnet3_ethdev.c
+++ b/drivers/net/vmxnet3/vmxnet3_ethdev.c
@@ -531,7 +531,7 @@ vmxnet3_dev_configure(struct rte_eth_dev *dev)
 
 	PMD_INIT_FUNC_TRACE();
 
-	if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
+	if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
 		dev->data->dev_conf.rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
 
 	if (!VMXNET3_VERSION_GE_6(hw)) {
-- 
2.34.1


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [RFC PATCH] drivers/net: fix RSS multi-queue mode check
  2023-02-23 16:04 [RFC PATCH] drivers/net: fix RSS multi-queue mode check Ferruh Yigit
@ 2023-02-27  1:34 ` lihuisong (C)
  2023-02-27  9:57   ` Ferruh Yigit
  0 siblings, 1 reply; 5+ messages in thread
From: lihuisong (C) @ 2023-02-27  1:34 UTC (permalink / raw)
  To: Ferruh Yigit, Ajit Khaparde, Somnath Kotur, Rahul Lakkireddy,
	Simei Su, Wenjun Wu, Marcin Wojtas, Michal Krawczyk,
	Shai Brandes, Evgeny Schemeilin, Igor Chauskin, John Daley,
	Hyong Youb Kim, Qi Zhang, Xiao Wang, Junfeng Guo, Ziyang Xuan,
	Xiaoyun Wang, Guoyang Zhou, Dongdong Liu, Yisen Zhuang,
	Yuying Zhang, Beilei Xing, Jingjing Wu, Qiming Yang,
	Shijith Thotton, Srisivasubramanian Srinivasan, Long Li,
	Chaoyong He, Niklas Söderlund, Jiawen Wu, Rasesh Mody,
	Devendra Singh Rawat, Jerin Jacob, Maciej Czekaj, Jian Wang,
	Jochen Behrens, Andrew Rybchenko, Ferruh Yigit
  Cc: Thomas Monjalon, dev, stable


在 2023/2/24 0:04, Ferruh Yigit 写道:
> 'rxmode.mq_mode' is an enum which should be an abstraction over values,
> instead of mask it with 'RTE_ETH_MQ_RX_RSS_FLAG' to detect if RSS is
> supported, directly compare with 'RTE_ETH_MQ_RX_RSS' enum element.
>
> Most of the time only 'RTE_ETH_MQ_RX_RSS' is requested by user, that is
> why output is almost same, but there may be cases driver doesn't support
> RSS combinations, like 'RTE_ETH_MQ_RX_VMDQ_DCB_RSS' but that is hidden
> by masking with 'RTE_ETH_MQ_RX_RSS_FLAG'.
Hi Ferruh,

It seems that this fully changes the usage of the mq_mode.
It will cause RSS, DCB and VMDQ function cannot work well.

For example,
Both user and driver enable RSS and DCB functions based on xxx_DCB_FLAG 
and xxx_RSS_FLAG in rxmode.mq_mode.
If we directly compare with 'RTE_ETH_MQ_RX_RSS' enum element now, how do 
we enable RSS+DCB mode?

/Huisong
>
> Fixes: 73fb89dd6a00 ("drivers/net: fix RSS hash offload flag if no RSS")
> Cc: stable@dpdk.org
>
> Signed-off-by: Ferruh Yigit <ferruh.yigit@amd.com>
>
> ---
>
> There are more usage like "rxmode->mq_mode & RTE_ETH_MQ_RX_RSS_FLAG" in
> drivers, not sure to fix all in this commit or not, feedback welcomed.
> ---
>   drivers/net/bnxt/bnxt_ethdev.c       | 2 +-
>   drivers/net/cxgbe/cxgbe_ethdev.c     | 2 +-
>   drivers/net/e1000/igb_ethdev.c       | 4 ++--
>   drivers/net/ena/ena_ethdev.c         | 2 +-
>   drivers/net/enic/enic_ethdev.c       | 2 +-
>   drivers/net/fm10k/fm10k_ethdev.c     | 2 +-
>   drivers/net/gve/gve_ethdev.c         | 2 +-
>   drivers/net/hinic/hinic_pmd_ethdev.c | 2 +-
>   drivers/net/hns3/hns3_ethdev.c       | 2 +-
>   drivers/net/hns3/hns3_ethdev_vf.c    | 2 +-
>   drivers/net/i40e/i40e_ethdev.c       | 2 +-
>   drivers/net/iavf/iavf_ethdev.c       | 2 +-
>   drivers/net/ice/ice_dcf_ethdev.c     | 2 +-
>   drivers/net/ice/ice_ethdev.c         | 2 +-
>   drivers/net/igc/igc_ethdev.c         | 2 +-
>   drivers/net/ixgbe/ixgbe_ethdev.c     | 4 ++--
>   drivers/net/liquidio/lio_ethdev.c    | 2 +-
>   drivers/net/mana/mana.c              | 2 +-
>   drivers/net/netvsc/hn_ethdev.c       | 2 +-
>   drivers/net/nfp/nfp_common.c         | 2 +-
>   drivers/net/ngbe/ngbe_ethdev.c       | 2 +-
>   drivers/net/qede/qede_ethdev.c       | 2 +-
>   drivers/net/thunderx/nicvf_ethdev.c  | 2 +-
>   drivers/net/txgbe/txgbe_ethdev.c     | 2 +-
>   drivers/net/txgbe/txgbe_ethdev_vf.c  | 2 +-
>   drivers/net/vmxnet3/vmxnet3_ethdev.c | 2 +-
>   26 files changed, 28 insertions(+), 28 deletions(-)
>
> diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c
> index 753e86b4b2af..14c0d5f8c72b 100644
> --- a/drivers/net/bnxt/bnxt_ethdev.c
> +++ b/drivers/net/bnxt/bnxt_ethdev.c
> @@ -1143,7 +1143,7 @@ static int bnxt_dev_configure_op(struct rte_eth_dev *eth_dev)
>   	bp->rx_cp_nr_rings = bp->rx_nr_rings;
>   	bp->tx_cp_nr_rings = bp->tx_nr_rings;
>   
> -	if (eth_dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
> +	if (eth_dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>   		rx_offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
>   	eth_dev->data->dev_conf.rxmode.offloads = rx_offloads;
>   
> diff --git a/drivers/net/cxgbe/cxgbe_ethdev.c b/drivers/net/cxgbe/cxgbe_ethdev.c
> index 45bbeaef0ceb..0e9ccc0587ba 100644
> --- a/drivers/net/cxgbe/cxgbe_ethdev.c
> +++ b/drivers/net/cxgbe/cxgbe_ethdev.c
> @@ -440,7 +440,7 @@ int cxgbe_dev_configure(struct rte_eth_dev *eth_dev)
>   
>   	CXGBE_FUNC_TRACE();
>   
> -	if (eth_dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
> +	if (eth_dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>   		eth_dev->data->dev_conf.rxmode.offloads |=
>   			RTE_ETH_RX_OFFLOAD_RSS_HASH;
>   
> diff --git a/drivers/net/e1000/igb_ethdev.c b/drivers/net/e1000/igb_ethdev.c
> index 8858f975f8cc..8e6b43c2ff2d 100644
> --- a/drivers/net/e1000/igb_ethdev.c
> +++ b/drivers/net/e1000/igb_ethdev.c
> @@ -1146,7 +1146,7 @@ eth_igb_configure(struct rte_eth_dev *dev)
>   
>   	PMD_INIT_FUNC_TRACE();
>   
> -	if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
> +	if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>   		dev->data->dev_conf.rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
>   
>   	/* multiple queue mode checking */
> @@ -3255,7 +3255,7 @@ igbvf_dev_configure(struct rte_eth_dev *dev)
>   	PMD_INIT_LOG(DEBUG, "Configured Virtual Function port id: %d",
>   		     dev->data->port_id);
>   
> -	if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
> +	if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>   		dev->data->dev_conf.rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
>   
>   	/*
> diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c
> index efcb163027c8..6929d7066fbd 100644
> --- a/drivers/net/ena/ena_ethdev.c
> +++ b/drivers/net/ena/ena_ethdev.c
> @@ -2307,7 +2307,7 @@ static int ena_dev_configure(struct rte_eth_dev *dev)
>   
>   	adapter->state = ENA_ADAPTER_STATE_CONFIG;
>   
> -	if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
> +	if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>   		dev->data->dev_conf.rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
>   	dev->data->dev_conf.txmode.offloads |= RTE_ETH_TX_OFFLOAD_MULTI_SEGS;
>   
> diff --git a/drivers/net/enic/enic_ethdev.c b/drivers/net/enic/enic_ethdev.c
> index cdf091559196..f3a7bc161408 100644
> --- a/drivers/net/enic/enic_ethdev.c
> +++ b/drivers/net/enic/enic_ethdev.c
> @@ -323,7 +323,7 @@ static int enicpmd_dev_configure(struct rte_eth_dev *eth_dev)
>   		return ret;
>   	}
>   
> -	if (eth_dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
> +	if (eth_dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>   		eth_dev->data->dev_conf.rxmode.offloads |=
>   			RTE_ETH_RX_OFFLOAD_RSS_HASH;
>   
> diff --git a/drivers/net/fm10k/fm10k_ethdev.c b/drivers/net/fm10k/fm10k_ethdev.c
> index 8b83063f0a2d..49d7849ba5ea 100644
> --- a/drivers/net/fm10k/fm10k_ethdev.c
> +++ b/drivers/net/fm10k/fm10k_ethdev.c
> @@ -450,7 +450,7 @@ fm10k_dev_configure(struct rte_eth_dev *dev)
>   
>   	PMD_INIT_FUNC_TRACE();
>   
> -	if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
> +	if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>   		dev->data->dev_conf.rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
>   
>   	/* multiple queue mode checking */
> diff --git a/drivers/net/gve/gve_ethdev.c b/drivers/net/gve/gve_ethdev.c
> index cf28a4a3b710..f34755a369fb 100644
> --- a/drivers/net/gve/gve_ethdev.c
> +++ b/drivers/net/gve/gve_ethdev.c
> @@ -92,7 +92,7 @@ gve_dev_configure(struct rte_eth_dev *dev)
>   {
>   	struct gve_priv *priv = dev->data->dev_private;
>   
> -	if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
> +	if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>   		dev->data->dev_conf.rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
>   
>   	if (dev->data->dev_conf.rxmode.offloads & RTE_ETH_RX_OFFLOAD_TCP_LRO)
> diff --git a/drivers/net/hinic/hinic_pmd_ethdev.c b/drivers/net/hinic/hinic_pmd_ethdev.c
> index 7aa5e7d8e929..872ee97b1e97 100644
> --- a/drivers/net/hinic/hinic_pmd_ethdev.c
> +++ b/drivers/net/hinic/hinic_pmd_ethdev.c
> @@ -311,7 +311,7 @@ static int hinic_dev_configure(struct rte_eth_dev *dev)
>   		return -EINVAL;
>   	}
>   
> -	if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
> +	if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>   		dev->data->dev_conf.rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
>   
>   	/* mtu size is 256~9600 */
> diff --git a/drivers/net/hns3/hns3_ethdev.c b/drivers/net/hns3/hns3_ethdev.c
> index 6babf67fcec2..fd3e499a3d38 100644
> --- a/drivers/net/hns3/hns3_ethdev.c
> +++ b/drivers/net/hns3/hns3_ethdev.c
> @@ -2016,7 +2016,7 @@ hns3_dev_configure(struct rte_eth_dev *dev)
>   			goto cfg_err;
>   	}
>   
> -	if ((uint32_t)mq_mode & RTE_ETH_MQ_RX_RSS_FLAG) {
> +	if (mq_mode == RTE_ETH_MQ_RX_RSS) {
>   		conf->rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
>   		rss_conf = conf->rx_adv_conf.rss_conf;
>   		ret = hns3_dev_rss_hash_update(dev, &rss_conf);
> diff --git a/drivers/net/hns3/hns3_ethdev_vf.c b/drivers/net/hns3/hns3_ethdev_vf.c
> index d051a1357b9f..00eb22d05558 100644
> --- a/drivers/net/hns3/hns3_ethdev_vf.c
> +++ b/drivers/net/hns3/hns3_ethdev_vf.c
> @@ -494,7 +494,7 @@ hns3vf_dev_configure(struct rte_eth_dev *dev)
>   	}
>   
>   	/* When RSS is not configured, redirect the packet queue 0 */
> -	if ((uint32_t)mq_mode & RTE_ETH_MQ_RX_RSS_FLAG) {
> +	if (mq_mode == RTE_ETH_MQ_RX_RSS) {
>   		conf->rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
>   		rss_conf = conf->rx_adv_conf.rss_conf;
>   		ret = hns3_dev_rss_hash_update(dev, &rss_conf);
> diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
> index 7726a89d99fb..3c3dbc285c96 100644
> --- a/drivers/net/i40e/i40e_ethdev.c
> +++ b/drivers/net/i40e/i40e_ethdev.c
> @@ -1884,7 +1884,7 @@ i40e_dev_configure(struct rte_eth_dev *dev)
>   	ad->tx_simple_allowed = true;
>   	ad->tx_vec_allowed = true;
>   
> -	if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
> +	if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>   		dev->data->dev_conf.rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
>   
>   	ret = i40e_dev_init_vlan(dev);
> diff --git a/drivers/net/iavf/iavf_ethdev.c b/drivers/net/iavf/iavf_ethdev.c
> index 3196210f2c1d..39860c08b606 100644
> --- a/drivers/net/iavf/iavf_ethdev.c
> +++ b/drivers/net/iavf/iavf_ethdev.c
> @@ -638,7 +638,7 @@ iavf_dev_configure(struct rte_eth_dev *dev)
>   	ad->rx_vec_allowed = true;
>   	ad->tx_vec_allowed = true;
>   
> -	if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
> +	if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>   		dev->data->dev_conf.rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
>   
>   	/* Large VF setting */
> diff --git a/drivers/net/ice/ice_dcf_ethdev.c b/drivers/net/ice/ice_dcf_ethdev.c
> index dcbf2af5b039..f61a30716e5e 100644
> --- a/drivers/net/ice/ice_dcf_ethdev.c
> +++ b/drivers/net/ice/ice_dcf_ethdev.c
> @@ -711,7 +711,7 @@ ice_dcf_dev_configure(struct rte_eth_dev *dev)
>   	ad->rx_bulk_alloc_allowed = true;
>   	ad->tx_simple_allowed = true;
>   
> -	if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
> +	if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>   		dev->data->dev_conf.rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
>   
>   	return 0;
> diff --git a/drivers/net/ice/ice_ethdev.c b/drivers/net/ice/ice_ethdev.c
> index 0d011bbffa77..96595fd7afaf 100644
> --- a/drivers/net/ice/ice_ethdev.c
> +++ b/drivers/net/ice/ice_ethdev.c
> @@ -3403,7 +3403,7 @@ ice_dev_configure(struct rte_eth_dev *dev)
>   	ad->rx_bulk_alloc_allowed = true;
>   	ad->tx_simple_allowed = true;
>   
> -	if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
> +	if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>   		dev->data->dev_conf.rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
>   
>   	if (dev->data->nb_rx_queues) {
> diff --git a/drivers/net/igc/igc_ethdev.c b/drivers/net/igc/igc_ethdev.c
> index fab2ab6d1ce7..49f2b3738b84 100644
> --- a/drivers/net/igc/igc_ethdev.c
> +++ b/drivers/net/igc/igc_ethdev.c
> @@ -375,7 +375,7 @@ eth_igc_configure(struct rte_eth_dev *dev)
>   
>   	PMD_INIT_FUNC_TRACE();
>   
> -	if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
> +	if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>   		dev->data->dev_conf.rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
>   
>   	ret  = igc_check_mq_mode(dev);
> diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c
> index 88118bc30560..328ccf918e86 100644
> --- a/drivers/net/ixgbe/ixgbe_ethdev.c
> +++ b/drivers/net/ixgbe/ixgbe_ethdev.c
> @@ -2431,7 +2431,7 @@ ixgbe_dev_configure(struct rte_eth_dev *dev)
>   
>   	PMD_INIT_FUNC_TRACE();
>   
> -	if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
> +	if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>   		dev->data->dev_conf.rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
>   
>   	/* multiple queue mode checking */
> @@ -5321,7 +5321,7 @@ ixgbevf_dev_configure(struct rte_eth_dev *dev)
>   	PMD_INIT_LOG(DEBUG, "Configured Virtual Function port id: %d",
>   		     dev->data->port_id);
>   
> -	if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
> +	if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>   		dev->data->dev_conf.rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
>   
>   	/*
> diff --git a/drivers/net/liquidio/lio_ethdev.c b/drivers/net/liquidio/lio_ethdev.c
> index ebcfbb1a5c0f..07fbaeda1ee6 100644
> --- a/drivers/net/liquidio/lio_ethdev.c
> +++ b/drivers/net/liquidio/lio_ethdev.c
> @@ -1722,7 +1722,7 @@ lio_dev_configure(struct rte_eth_dev *eth_dev)
>   
>   	PMD_INIT_FUNC_TRACE();
>   
> -	if (eth_dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
> +	if (eth_dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>   		eth_dev->data->dev_conf.rxmode.offloads |=
>   			RTE_ETH_RX_OFFLOAD_RSS_HASH;
>   
> diff --git a/drivers/net/mana/mana.c b/drivers/net/mana/mana.c
> index 43221e743e87..76de691a8252 100644
> --- a/drivers/net/mana/mana.c
> +++ b/drivers/net/mana/mana.c
> @@ -78,7 +78,7 @@ mana_dev_configure(struct rte_eth_dev *dev)
>   	struct mana_priv *priv = dev->data->dev_private;
>   	struct rte_eth_conf *dev_conf = &dev->data->dev_conf;
>   
> -	if (dev_conf->rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
> +	if (dev_conf->rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>   		dev_conf->rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
>   
>   	if (dev->data->nb_rx_queues != dev->data->nb_tx_queues) {
> diff --git a/drivers/net/netvsc/hn_ethdev.c b/drivers/net/netvsc/hn_ethdev.c
> index d0bbc0a4c0c0..4950b061799c 100644
> --- a/drivers/net/netvsc/hn_ethdev.c
> +++ b/drivers/net/netvsc/hn_ethdev.c
> @@ -721,7 +721,7 @@ static int hn_dev_configure(struct rte_eth_dev *dev)
>   
>   	PMD_INIT_FUNC_TRACE();
>   
> -	if (dev_conf->rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
> +	if (dev_conf->rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>   		dev_conf->rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
>   
>   	unsupported = txmode->offloads & ~HN_TX_OFFLOAD_CAPS;
> diff --git a/drivers/net/nfp/nfp_common.c b/drivers/net/nfp/nfp_common.c
> index 907777a9e44d..a774fad3fba2 100644
> --- a/drivers/net/nfp/nfp_common.c
> +++ b/drivers/net/nfp/nfp_common.c
> @@ -161,7 +161,7 @@ nfp_net_configure(struct rte_eth_dev *dev)
>   	rxmode = &dev_conf->rxmode;
>   	txmode = &dev_conf->txmode;
>   
> -	if (rxmode->mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
> +	if (rxmode->mq_mode == RTE_ETH_MQ_RX_RSS)
>   		rxmode->offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
>   
>   	/* Checking TX mode */
> diff --git a/drivers/net/ngbe/ngbe_ethdev.c b/drivers/net/ngbe/ngbe_ethdev.c
> index c32d954769b0..5b53781c4aaf 100644
> --- a/drivers/net/ngbe/ngbe_ethdev.c
> +++ b/drivers/net/ngbe/ngbe_ethdev.c
> @@ -918,7 +918,7 @@ ngbe_dev_configure(struct rte_eth_dev *dev)
>   
>   	PMD_INIT_FUNC_TRACE();
>   
> -	if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
> +	if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>   		dev->data->dev_conf.rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
>   
>   	/* set flag to update link status after init */
> diff --git a/drivers/net/qede/qede_ethdev.c b/drivers/net/qede/qede_ethdev.c
> index a4923670d6ba..11ddd8abf16a 100644
> --- a/drivers/net/qede/qede_ethdev.c
> +++ b/drivers/net/qede/qede_ethdev.c
> @@ -1272,7 +1272,7 @@ static int qede_dev_configure(struct rte_eth_dev *eth_dev)
>   
>   	PMD_INIT_FUNC_TRACE(edev);
>   
> -	if (rxmode->mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
> +	if (rxmode->mq_mode == RTE_ETH_MQ_RX_RSS)
>   		rxmode->offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
>   
>   	/* We need to have min 1 RX queue.There is no min check in
> diff --git a/drivers/net/thunderx/nicvf_ethdev.c b/drivers/net/thunderx/nicvf_ethdev.c
> index ab1e714d9767..b9cd09332510 100644
> --- a/drivers/net/thunderx/nicvf_ethdev.c
> +++ b/drivers/net/thunderx/nicvf_ethdev.c
> @@ -1984,7 +1984,7 @@ nicvf_dev_configure(struct rte_eth_dev *dev)
>   
>   	PMD_INIT_FUNC_TRACE();
>   
> -	if (rxmode->mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
> +	if (rxmode->mq_mode == RTE_ETH_MQ_RX_RSS)
>   		rxmode->offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
>   
>   	if (!rte_eal_has_hugepages()) {
> diff --git a/drivers/net/txgbe/txgbe_ethdev.c b/drivers/net/txgbe/txgbe_ethdev.c
> index a502618bc5a2..08ad5a087e23 100644
> --- a/drivers/net/txgbe/txgbe_ethdev.c
> +++ b/drivers/net/txgbe/txgbe_ethdev.c
> @@ -1508,7 +1508,7 @@ txgbe_dev_configure(struct rte_eth_dev *dev)
>   
>   	PMD_INIT_FUNC_TRACE();
>   
> -	if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
> +	if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>   		dev->data->dev_conf.rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
>   
>   	/* multiple queue mode checking */
> diff --git a/drivers/net/txgbe/txgbe_ethdev_vf.c b/drivers/net/txgbe/txgbe_ethdev_vf.c
> index 3b1f7c913b7b..02a59fc696e5 100644
> --- a/drivers/net/txgbe/txgbe_ethdev_vf.c
> +++ b/drivers/net/txgbe/txgbe_ethdev_vf.c
> @@ -577,7 +577,7 @@ txgbevf_dev_configure(struct rte_eth_dev *dev)
>   	PMD_INIT_LOG(DEBUG, "Configured Virtual Function port id: %d",
>   		     dev->data->port_id);
>   
> -	if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
> +	if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>   		dev->data->dev_conf.rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
>   
>   	/*
> diff --git a/drivers/net/vmxnet3/vmxnet3_ethdev.c b/drivers/net/vmxnet3/vmxnet3_ethdev.c
> index fd946dec5c80..8efde46ae0ad 100644
> --- a/drivers/net/vmxnet3/vmxnet3_ethdev.c
> +++ b/drivers/net/vmxnet3/vmxnet3_ethdev.c
> @@ -531,7 +531,7 @@ vmxnet3_dev_configure(struct rte_eth_dev *dev)
>   
>   	PMD_INIT_FUNC_TRACE();
>   
> -	if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
> +	if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>   		dev->data->dev_conf.rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
>   
>   	if (!VMXNET3_VERSION_GE_6(hw)) {

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [RFC PATCH] drivers/net: fix RSS multi-queue mode check
  2023-02-27  1:34 ` lihuisong (C)
@ 2023-02-27  9:57   ` Ferruh Yigit
  2023-02-28  1:24     ` lihuisong (C)
  0 siblings, 1 reply; 5+ messages in thread
From: Ferruh Yigit @ 2023-02-27  9:57 UTC (permalink / raw)
  To: lihuisong (C),
	Ajit Khaparde, Somnath Kotur, Rahul Lakkireddy, Simei Su,
	Wenjun Wu, Marcin Wojtas, Michal Krawczyk, Shai Brandes,
	Evgeny Schemeilin, Igor Chauskin, John Daley, Hyong Youb Kim,
	Qi Zhang, Xiao Wang, Junfeng Guo, Ziyang Xuan, Xiaoyun Wang,
	Guoyang Zhou, Dongdong Liu, Yisen Zhuang, Yuying Zhang,
	Beilei Xing, Jingjing Wu, Qiming Yang, Shijith Thotton,
	Srisivasubramanian Srinivasan, Long Li, Chaoyong He,
	Niklas Söderlund, Jiawen Wu, Rasesh Mody,
	Devendra Singh Rawat, Jerin Jacob, Maciej Czekaj, Jian Wang,
	Jochen Behrens, Andrew Rybchenko, Ferruh Yigit
  Cc: Thomas Monjalon, dev, stable

On 2/27/2023 1:34 AM, lihuisong (C) wrote:
> 
> 在 2023/2/24 0:04, Ferruh Yigit 写道:
>> 'rxmode.mq_mode' is an enum which should be an abstraction over values,
>> instead of mask it with 'RTE_ETH_MQ_RX_RSS_FLAG' to detect if RSS is
>> supported, directly compare with 'RTE_ETH_MQ_RX_RSS' enum element.
>>
>> Most of the time only 'RTE_ETH_MQ_RX_RSS' is requested by user, that is
>> why output is almost same, but there may be cases driver doesn't support
>> RSS combinations, like 'RTE_ETH_MQ_RX_VMDQ_DCB_RSS' but that is hidden
>> by masking with 'RTE_ETH_MQ_RX_RSS_FLAG'.
> Hi Ferruh,
> 
> It seems that this fully changes the usage of the mq_mode.
> It will cause RSS, DCB and VMDQ function cannot work well.
> 
> For example,
> Both user and driver enable RSS and DCB functions based on xxx_DCB_FLAG
> and xxx_RSS_FLAG in rxmode.mq_mode.
> If we directly compare with 'RTE_ETH_MQ_RX_RSS' enum element now, how do
> we enable RSS+DCB mode?
> 

Hi Huisong,

Technically 'RSS+DCB' mode can be set by user setting 'rxmode.mq_mode'
to 'RTE_ETH_MQ_RX_DCB_RSS' and PMD checking the same.

Overall I think it is not good idea to use enum items as masked values,
but that seems done intentionally in the past:
Commit 4bdefaade6d1 ("ethdev: VMDQ enhancements")

Since this can be in use already, following patch only changes where
'RTE_ETH_RX_OFFLOAD_RSS_HASH' is set, rest of the usage remaining same.

And even for 'RTE_ETH_RX_OFFLOAD_RSS_HASH', I think intention was to
override this offload config in PMD when explicitly RSS mode is enabled,
but I made the set as RFC to get feedback on this. We may keep as it is
if some other modes with 'RTE_ETH_MQ_RX_RSS_FLAG' uses this offload.

>>
>> Fixes: 73fb89dd6a00 ("drivers/net: fix RSS hash offload flag if no RSS")
>> Cc: stable@dpdk.org
>>
>> Signed-off-by: Ferruh Yigit <ferruh.yigit@amd.com>
>>
>> ---
>>
>> There are more usage like "rxmode->mq_mode & RTE_ETH_MQ_RX_RSS_FLAG" in
>> drivers, not sure to fix all in this commit or not, feedback welcomed.
>> ---
>>   drivers/net/bnxt/bnxt_ethdev.c       | 2 +-
>>   drivers/net/cxgbe/cxgbe_ethdev.c     | 2 +-
>>   drivers/net/e1000/igb_ethdev.c       | 4 ++--
>>   drivers/net/ena/ena_ethdev.c         | 2 +-
>>   drivers/net/enic/enic_ethdev.c       | 2 +-
>>   drivers/net/fm10k/fm10k_ethdev.c     | 2 +-
>>   drivers/net/gve/gve_ethdev.c         | 2 +-
>>   drivers/net/hinic/hinic_pmd_ethdev.c | 2 +-
>>   drivers/net/hns3/hns3_ethdev.c       | 2 +-
>>   drivers/net/hns3/hns3_ethdev_vf.c    | 2 +-
>>   drivers/net/i40e/i40e_ethdev.c       | 2 +-
>>   drivers/net/iavf/iavf_ethdev.c       | 2 +-
>>   drivers/net/ice/ice_dcf_ethdev.c     | 2 +-
>>   drivers/net/ice/ice_ethdev.c         | 2 +-
>>   drivers/net/igc/igc_ethdev.c         | 2 +-
>>   drivers/net/ixgbe/ixgbe_ethdev.c     | 4 ++--
>>   drivers/net/liquidio/lio_ethdev.c    | 2 +-
>>   drivers/net/mana/mana.c              | 2 +-
>>   drivers/net/netvsc/hn_ethdev.c       | 2 +-
>>   drivers/net/nfp/nfp_common.c         | 2 +-
>>   drivers/net/ngbe/ngbe_ethdev.c       | 2 +-
>>   drivers/net/qede/qede_ethdev.c       | 2 +-
>>   drivers/net/thunderx/nicvf_ethdev.c  | 2 +-
>>   drivers/net/txgbe/txgbe_ethdev.c     | 2 +-
>>   drivers/net/txgbe/txgbe_ethdev_vf.c  | 2 +-
>>   drivers/net/vmxnet3/vmxnet3_ethdev.c | 2 +-
>>   26 files changed, 28 insertions(+), 28 deletions(-)
>>
>> diff --git a/drivers/net/bnxt/bnxt_ethdev.c
>> b/drivers/net/bnxt/bnxt_ethdev.c
>> index 753e86b4b2af..14c0d5f8c72b 100644
>> --- a/drivers/net/bnxt/bnxt_ethdev.c
>> +++ b/drivers/net/bnxt/bnxt_ethdev.c
>> @@ -1143,7 +1143,7 @@ static int bnxt_dev_configure_op(struct
>> rte_eth_dev *eth_dev)
>>       bp->rx_cp_nr_rings = bp->rx_nr_rings;
>>       bp->tx_cp_nr_rings = bp->tx_nr_rings;
>>   -    if (eth_dev->data->dev_conf.rxmode.mq_mode &
>> RTE_ETH_MQ_RX_RSS_FLAG)
>> +    if (eth_dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>           rx_offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>       eth_dev->data->dev_conf.rxmode.offloads = rx_offloads;
>>   diff --git a/drivers/net/cxgbe/cxgbe_ethdev.c
>> b/drivers/net/cxgbe/cxgbe_ethdev.c
>> index 45bbeaef0ceb..0e9ccc0587ba 100644
>> --- a/drivers/net/cxgbe/cxgbe_ethdev.c
>> +++ b/drivers/net/cxgbe/cxgbe_ethdev.c
>> @@ -440,7 +440,7 @@ int cxgbe_dev_configure(struct rte_eth_dev *eth_dev)
>>         CXGBE_FUNC_TRACE();
>>   -    if (eth_dev->data->dev_conf.rxmode.mq_mode &
>> RTE_ETH_MQ_RX_RSS_FLAG)
>> +    if (eth_dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>           eth_dev->data->dev_conf.rxmode.offloads |=
>>               RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>   diff --git a/drivers/net/e1000/igb_ethdev.c
>> b/drivers/net/e1000/igb_ethdev.c
>> index 8858f975f8cc..8e6b43c2ff2d 100644
>> --- a/drivers/net/e1000/igb_ethdev.c
>> +++ b/drivers/net/e1000/igb_ethdev.c
>> @@ -1146,7 +1146,7 @@ eth_igb_configure(struct rte_eth_dev *dev)
>>         PMD_INIT_FUNC_TRACE();
>>   -    if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>           dev->data->dev_conf.rxmode.offloads |=
>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>         /* multiple queue mode checking */
>> @@ -3255,7 +3255,7 @@ igbvf_dev_configure(struct rte_eth_dev *dev)
>>       PMD_INIT_LOG(DEBUG, "Configured Virtual Function port id: %d",
>>                dev->data->port_id);
>>   -    if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>           dev->data->dev_conf.rxmode.offloads |=
>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>         /*
>> diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c
>> index efcb163027c8..6929d7066fbd 100644
>> --- a/drivers/net/ena/ena_ethdev.c
>> +++ b/drivers/net/ena/ena_ethdev.c
>> @@ -2307,7 +2307,7 @@ static int ena_dev_configure(struct rte_eth_dev
>> *dev)
>>         adapter->state = ENA_ADAPTER_STATE_CONFIG;
>>   -    if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>           dev->data->dev_conf.rxmode.offloads |=
>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>       dev->data->dev_conf.txmode.offloads |=
>> RTE_ETH_TX_OFFLOAD_MULTI_SEGS;
>>   diff --git a/drivers/net/enic/enic_ethdev.c
>> b/drivers/net/enic/enic_ethdev.c
>> index cdf091559196..f3a7bc161408 100644
>> --- a/drivers/net/enic/enic_ethdev.c
>> +++ b/drivers/net/enic/enic_ethdev.c
>> @@ -323,7 +323,7 @@ static int enicpmd_dev_configure(struct
>> rte_eth_dev *eth_dev)
>>           return ret;
>>       }
>>   -    if (eth_dev->data->dev_conf.rxmode.mq_mode &
>> RTE_ETH_MQ_RX_RSS_FLAG)
>> +    if (eth_dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>           eth_dev->data->dev_conf.rxmode.offloads |=
>>               RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>   diff --git a/drivers/net/fm10k/fm10k_ethdev.c
>> b/drivers/net/fm10k/fm10k_ethdev.c
>> index 8b83063f0a2d..49d7849ba5ea 100644
>> --- a/drivers/net/fm10k/fm10k_ethdev.c
>> +++ b/drivers/net/fm10k/fm10k_ethdev.c
>> @@ -450,7 +450,7 @@ fm10k_dev_configure(struct rte_eth_dev *dev)
>>         PMD_INIT_FUNC_TRACE();
>>   -    if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>           dev->data->dev_conf.rxmode.offloads |=
>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>         /* multiple queue mode checking */
>> diff --git a/drivers/net/gve/gve_ethdev.c b/drivers/net/gve/gve_ethdev.c
>> index cf28a4a3b710..f34755a369fb 100644
>> --- a/drivers/net/gve/gve_ethdev.c
>> +++ b/drivers/net/gve/gve_ethdev.c
>> @@ -92,7 +92,7 @@ gve_dev_configure(struct rte_eth_dev *dev)
>>   {
>>       struct gve_priv *priv = dev->data->dev_private;
>>   -    if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>           dev->data->dev_conf.rxmode.offloads |=
>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>         if (dev->data->dev_conf.rxmode.offloads &
>> RTE_ETH_RX_OFFLOAD_TCP_LRO)
>> diff --git a/drivers/net/hinic/hinic_pmd_ethdev.c
>> b/drivers/net/hinic/hinic_pmd_ethdev.c
>> index 7aa5e7d8e929..872ee97b1e97 100644
>> --- a/drivers/net/hinic/hinic_pmd_ethdev.c
>> +++ b/drivers/net/hinic/hinic_pmd_ethdev.c
>> @@ -311,7 +311,7 @@ static int hinic_dev_configure(struct rte_eth_dev
>> *dev)
>>           return -EINVAL;
>>       }
>>   -    if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>           dev->data->dev_conf.rxmode.offloads |=
>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>         /* mtu size is 256~9600 */
>> diff --git a/drivers/net/hns3/hns3_ethdev.c
>> b/drivers/net/hns3/hns3_ethdev.c
>> index 6babf67fcec2..fd3e499a3d38 100644
>> --- a/drivers/net/hns3/hns3_ethdev.c
>> +++ b/drivers/net/hns3/hns3_ethdev.c
>> @@ -2016,7 +2016,7 @@ hns3_dev_configure(struct rte_eth_dev *dev)
>>               goto cfg_err;
>>       }
>>   -    if ((uint32_t)mq_mode & RTE_ETH_MQ_RX_RSS_FLAG) {
>> +    if (mq_mode == RTE_ETH_MQ_RX_RSS) {
>>           conf->rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>           rss_conf = conf->rx_adv_conf.rss_conf;
>>           ret = hns3_dev_rss_hash_update(dev, &rss_conf);
>> diff --git a/drivers/net/hns3/hns3_ethdev_vf.c
>> b/drivers/net/hns3/hns3_ethdev_vf.c
>> index d051a1357b9f..00eb22d05558 100644
>> --- a/drivers/net/hns3/hns3_ethdev_vf.c
>> +++ b/drivers/net/hns3/hns3_ethdev_vf.c
>> @@ -494,7 +494,7 @@ hns3vf_dev_configure(struct rte_eth_dev *dev)
>>       }
>>         /* When RSS is not configured, redirect the packet queue 0 */
>> -    if ((uint32_t)mq_mode & RTE_ETH_MQ_RX_RSS_FLAG) {
>> +    if (mq_mode == RTE_ETH_MQ_RX_RSS) {
>>           conf->rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>           rss_conf = conf->rx_adv_conf.rss_conf;
>>           ret = hns3_dev_rss_hash_update(dev, &rss_conf);
>> diff --git a/drivers/net/i40e/i40e_ethdev.c
>> b/drivers/net/i40e/i40e_ethdev.c
>> index 7726a89d99fb..3c3dbc285c96 100644
>> --- a/drivers/net/i40e/i40e_ethdev.c
>> +++ b/drivers/net/i40e/i40e_ethdev.c
>> @@ -1884,7 +1884,7 @@ i40e_dev_configure(struct rte_eth_dev *dev)
>>       ad->tx_simple_allowed = true;
>>       ad->tx_vec_allowed = true;
>>   -    if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>           dev->data->dev_conf.rxmode.offloads |=
>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>         ret = i40e_dev_init_vlan(dev);
>> diff --git a/drivers/net/iavf/iavf_ethdev.c
>> b/drivers/net/iavf/iavf_ethdev.c
>> index 3196210f2c1d..39860c08b606 100644
>> --- a/drivers/net/iavf/iavf_ethdev.c
>> +++ b/drivers/net/iavf/iavf_ethdev.c
>> @@ -638,7 +638,7 @@ iavf_dev_configure(struct rte_eth_dev *dev)
>>       ad->rx_vec_allowed = true;
>>       ad->tx_vec_allowed = true;
>>   -    if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>           dev->data->dev_conf.rxmode.offloads |=
>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>         /* Large VF setting */
>> diff --git a/drivers/net/ice/ice_dcf_ethdev.c
>> b/drivers/net/ice/ice_dcf_ethdev.c
>> index dcbf2af5b039..f61a30716e5e 100644
>> --- a/drivers/net/ice/ice_dcf_ethdev.c
>> +++ b/drivers/net/ice/ice_dcf_ethdev.c
>> @@ -711,7 +711,7 @@ ice_dcf_dev_configure(struct rte_eth_dev *dev)
>>       ad->rx_bulk_alloc_allowed = true;
>>       ad->tx_simple_allowed = true;
>>   -    if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>           dev->data->dev_conf.rxmode.offloads |=
>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>         return 0;
>> diff --git a/drivers/net/ice/ice_ethdev.c b/drivers/net/ice/ice_ethdev.c
>> index 0d011bbffa77..96595fd7afaf 100644
>> --- a/drivers/net/ice/ice_ethdev.c
>> +++ b/drivers/net/ice/ice_ethdev.c
>> @@ -3403,7 +3403,7 @@ ice_dev_configure(struct rte_eth_dev *dev)
>>       ad->rx_bulk_alloc_allowed = true;
>>       ad->tx_simple_allowed = true;
>>   -    if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>           dev->data->dev_conf.rxmode.offloads |=
>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>         if (dev->data->nb_rx_queues) {
>> diff --git a/drivers/net/igc/igc_ethdev.c b/drivers/net/igc/igc_ethdev.c
>> index fab2ab6d1ce7..49f2b3738b84 100644
>> --- a/drivers/net/igc/igc_ethdev.c
>> +++ b/drivers/net/igc/igc_ethdev.c
>> @@ -375,7 +375,7 @@ eth_igc_configure(struct rte_eth_dev *dev)
>>         PMD_INIT_FUNC_TRACE();
>>   -    if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>           dev->data->dev_conf.rxmode.offloads |=
>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>         ret  = igc_check_mq_mode(dev);
>> diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c
>> b/drivers/net/ixgbe/ixgbe_ethdev.c
>> index 88118bc30560..328ccf918e86 100644
>> --- a/drivers/net/ixgbe/ixgbe_ethdev.c
>> +++ b/drivers/net/ixgbe/ixgbe_ethdev.c
>> @@ -2431,7 +2431,7 @@ ixgbe_dev_configure(struct rte_eth_dev *dev)
>>         PMD_INIT_FUNC_TRACE();
>>   -    if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>           dev->data->dev_conf.rxmode.offloads |=
>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>         /* multiple queue mode checking */
>> @@ -5321,7 +5321,7 @@ ixgbevf_dev_configure(struct rte_eth_dev *dev)
>>       PMD_INIT_LOG(DEBUG, "Configured Virtual Function port id: %d",
>>                dev->data->port_id);
>>   -    if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>           dev->data->dev_conf.rxmode.offloads |=
>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>         /*
>> diff --git a/drivers/net/liquidio/lio_ethdev.c
>> b/drivers/net/liquidio/lio_ethdev.c
>> index ebcfbb1a5c0f..07fbaeda1ee6 100644
>> --- a/drivers/net/liquidio/lio_ethdev.c
>> +++ b/drivers/net/liquidio/lio_ethdev.c
>> @@ -1722,7 +1722,7 @@ lio_dev_configure(struct rte_eth_dev *eth_dev)
>>         PMD_INIT_FUNC_TRACE();
>>   -    if (eth_dev->data->dev_conf.rxmode.mq_mode &
>> RTE_ETH_MQ_RX_RSS_FLAG)
>> +    if (eth_dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>           eth_dev->data->dev_conf.rxmode.offloads |=
>>               RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>   diff --git a/drivers/net/mana/mana.c b/drivers/net/mana/mana.c
>> index 43221e743e87..76de691a8252 100644
>> --- a/drivers/net/mana/mana.c
>> +++ b/drivers/net/mana/mana.c
>> @@ -78,7 +78,7 @@ mana_dev_configure(struct rte_eth_dev *dev)
>>       struct mana_priv *priv = dev->data->dev_private;
>>       struct rte_eth_conf *dev_conf = &dev->data->dev_conf;
>>   -    if (dev_conf->rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
>> +    if (dev_conf->rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>           dev_conf->rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>         if (dev->data->nb_rx_queues != dev->data->nb_tx_queues) {
>> diff --git a/drivers/net/netvsc/hn_ethdev.c
>> b/drivers/net/netvsc/hn_ethdev.c
>> index d0bbc0a4c0c0..4950b061799c 100644
>> --- a/drivers/net/netvsc/hn_ethdev.c
>> +++ b/drivers/net/netvsc/hn_ethdev.c
>> @@ -721,7 +721,7 @@ static int hn_dev_configure(struct rte_eth_dev *dev)
>>         PMD_INIT_FUNC_TRACE();
>>   -    if (dev_conf->rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
>> +    if (dev_conf->rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>           dev_conf->rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>         unsupported = txmode->offloads & ~HN_TX_OFFLOAD_CAPS;
>> diff --git a/drivers/net/nfp/nfp_common.c b/drivers/net/nfp/nfp_common.c
>> index 907777a9e44d..a774fad3fba2 100644
>> --- a/drivers/net/nfp/nfp_common.c
>> +++ b/drivers/net/nfp/nfp_common.c
>> @@ -161,7 +161,7 @@ nfp_net_configure(struct rte_eth_dev *dev)
>>       rxmode = &dev_conf->rxmode;
>>       txmode = &dev_conf->txmode;
>>   -    if (rxmode->mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
>> +    if (rxmode->mq_mode == RTE_ETH_MQ_RX_RSS)
>>           rxmode->offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>         /* Checking TX mode */
>> diff --git a/drivers/net/ngbe/ngbe_ethdev.c
>> b/drivers/net/ngbe/ngbe_ethdev.c
>> index c32d954769b0..5b53781c4aaf 100644
>> --- a/drivers/net/ngbe/ngbe_ethdev.c
>> +++ b/drivers/net/ngbe/ngbe_ethdev.c
>> @@ -918,7 +918,7 @@ ngbe_dev_configure(struct rte_eth_dev *dev)
>>         PMD_INIT_FUNC_TRACE();
>>   -    if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>           dev->data->dev_conf.rxmode.offloads |=
>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>         /* set flag to update link status after init */
>> diff --git a/drivers/net/qede/qede_ethdev.c
>> b/drivers/net/qede/qede_ethdev.c
>> index a4923670d6ba..11ddd8abf16a 100644
>> --- a/drivers/net/qede/qede_ethdev.c
>> +++ b/drivers/net/qede/qede_ethdev.c
>> @@ -1272,7 +1272,7 @@ static int qede_dev_configure(struct rte_eth_dev
>> *eth_dev)
>>         PMD_INIT_FUNC_TRACE(edev);
>>   -    if (rxmode->mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
>> +    if (rxmode->mq_mode == RTE_ETH_MQ_RX_RSS)
>>           rxmode->offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>         /* We need to have min 1 RX queue.There is no min check in
>> diff --git a/drivers/net/thunderx/nicvf_ethdev.c
>> b/drivers/net/thunderx/nicvf_ethdev.c
>> index ab1e714d9767..b9cd09332510 100644
>> --- a/drivers/net/thunderx/nicvf_ethdev.c
>> +++ b/drivers/net/thunderx/nicvf_ethdev.c
>> @@ -1984,7 +1984,7 @@ nicvf_dev_configure(struct rte_eth_dev *dev)
>>         PMD_INIT_FUNC_TRACE();
>>   -    if (rxmode->mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
>> +    if (rxmode->mq_mode == RTE_ETH_MQ_RX_RSS)
>>           rxmode->offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>         if (!rte_eal_has_hugepages()) {
>> diff --git a/drivers/net/txgbe/txgbe_ethdev.c
>> b/drivers/net/txgbe/txgbe_ethdev.c
>> index a502618bc5a2..08ad5a087e23 100644
>> --- a/drivers/net/txgbe/txgbe_ethdev.c
>> +++ b/drivers/net/txgbe/txgbe_ethdev.c
>> @@ -1508,7 +1508,7 @@ txgbe_dev_configure(struct rte_eth_dev *dev)
>>         PMD_INIT_FUNC_TRACE();
>>   -    if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>           dev->data->dev_conf.rxmode.offloads |=
>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>         /* multiple queue mode checking */
>> diff --git a/drivers/net/txgbe/txgbe_ethdev_vf.c
>> b/drivers/net/txgbe/txgbe_ethdev_vf.c
>> index 3b1f7c913b7b..02a59fc696e5 100644
>> --- a/drivers/net/txgbe/txgbe_ethdev_vf.c
>> +++ b/drivers/net/txgbe/txgbe_ethdev_vf.c
>> @@ -577,7 +577,7 @@ txgbevf_dev_configure(struct rte_eth_dev *dev)
>>       PMD_INIT_LOG(DEBUG, "Configured Virtual Function port id: %d",
>>                dev->data->port_id);
>>   -    if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>           dev->data->dev_conf.rxmode.offloads |=
>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>         /*
>> diff --git a/drivers/net/vmxnet3/vmxnet3_ethdev.c
>> b/drivers/net/vmxnet3/vmxnet3_ethdev.c
>> index fd946dec5c80..8efde46ae0ad 100644
>> --- a/drivers/net/vmxnet3/vmxnet3_ethdev.c
>> +++ b/drivers/net/vmxnet3/vmxnet3_ethdev.c
>> @@ -531,7 +531,7 @@ vmxnet3_dev_configure(struct rte_eth_dev *dev)
>>         PMD_INIT_FUNC_TRACE();
>>   -    if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>           dev->data->dev_conf.rxmode.offloads |=
>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>         if (!VMXNET3_VERSION_GE_6(hw)) {


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [RFC PATCH] drivers/net: fix RSS multi-queue mode check
  2023-02-27  9:57   ` Ferruh Yigit
@ 2023-02-28  1:24     ` lihuisong (C)
  2023-02-28  8:23       ` Ferruh Yigit
  0 siblings, 1 reply; 5+ messages in thread
From: lihuisong (C) @ 2023-02-28  1:24 UTC (permalink / raw)
  To: Ferruh Yigit, Ajit Khaparde, Somnath Kotur, Rahul Lakkireddy,
	Simei Su, Wenjun Wu, Marcin Wojtas, Michal Krawczyk,
	Shai Brandes, Evgeny Schemeilin, Igor Chauskin, John Daley,
	Hyong Youb Kim, Qi Zhang, Xiao Wang, Junfeng Guo, Ziyang Xuan,
	Xiaoyun Wang, Guoyang Zhou, Dongdong Liu, Yisen Zhuang,
	Yuying Zhang, Beilei Xing, Jingjing Wu, Qiming Yang,
	Shijith Thotton, Srisivasubramanian Srinivasan, Long Li,
	Chaoyong He, Niklas Söderlund, Jiawen Wu, Rasesh Mody,
	Devendra Singh Rawat, Jerin Jacob, Maciej Czekaj, Jian Wang,
	Jochen Behrens, Andrew Rybchenko, Ferruh Yigit
  Cc: Thomas Monjalon, dev, stable


在 2023/2/27 17:57, Ferruh Yigit 写道:
> On 2/27/2023 1:34 AM, lihuisong (C) wrote:
>> 在 2023/2/24 0:04, Ferruh Yigit 写道:
>>> 'rxmode.mq_mode' is an enum which should be an abstraction over values,
>>> instead of mask it with 'RTE_ETH_MQ_RX_RSS_FLAG' to detect if RSS is
>>> supported, directly compare with 'RTE_ETH_MQ_RX_RSS' enum element.
>>>
>>> Most of the time only 'RTE_ETH_MQ_RX_RSS' is requested by user, that is
>>> why output is almost same, but there may be cases driver doesn't support
>>> RSS combinations, like 'RTE_ETH_MQ_RX_VMDQ_DCB_RSS' but that is hidden
>>> by masking with 'RTE_ETH_MQ_RX_RSS_FLAG'.
>> Hi Ferruh,
>>
>> It seems that this fully changes the usage of the mq_mode.
>> It will cause RSS, DCB and VMDQ function cannot work well.
>>
>> For example,
>> Both user and driver enable RSS and DCB functions based on xxx_DCB_FLAG
>> and xxx_RSS_FLAG in rxmode.mq_mode.
>> If we directly compare with 'RTE_ETH_MQ_RX_RSS' enum element now, how do
>> we enable RSS+DCB mode?
>>
> Hi Huisong,
>
> Technically 'RSS+DCB' mode can be set by user setting 'rxmode.mq_mode'
> to 'RTE_ETH_MQ_RX_DCB_RSS' and PMD checking the same.
This is not a good way to use.
Because this has a greate impact for user and PMDs and will add 
cyclomatic complexity of PMD.
>
> Overall I think it is not good idea to use enum items as masked values,
I agree what you do.
It is better to change rxmode.mq_mode and txmode.mq_mode type from 
'enum' to 'u32'.
In this way, PMD code logic don't need to be modified and the impact on 
PMDs and user is minimal.
What do you think?
> but that seems done intentionally in the past:
> Commit 4bdefaade6d1 ("ethdev: VMDQ enhancements")
Seems it was.
>
> Since this can be in use already, following patch only changes where
> 'RTE_ETH_RX_OFFLOAD_RSS_HASH' is set, rest of the usage remaining same.
>
> And even for 'RTE_ETH_RX_OFFLOAD_RSS_HASH', I think intention was to
> override this offload config in PMD when explicitly RSS mode is enabled,
> but I made the set as RFC to get feedback on this. We may keep as it is
> if some other modes with 'RTE_ETH_MQ_RX_RSS_FLAG' uses this offload.
>
>>> Fixes: 73fb89dd6a00 ("drivers/net: fix RSS hash offload flag if no RSS")
>>> Cc: stable@dpdk.org
>>>
>>> Signed-off-by: Ferruh Yigit <ferruh.yigit@amd.com>
>>>
>>> ---
>>>
>>> There are more usage like "rxmode->mq_mode & RTE_ETH_MQ_RX_RSS_FLAG" in
>>> drivers, not sure to fix all in this commit or not, feedback welcomed.
>>> ---
>>>    drivers/net/bnxt/bnxt_ethdev.c       | 2 +-
>>>    drivers/net/cxgbe/cxgbe_ethdev.c     | 2 +-
>>>    drivers/net/e1000/igb_ethdev.c       | 4 ++--
>>>    drivers/net/ena/ena_ethdev.c         | 2 +-
>>>    drivers/net/enic/enic_ethdev.c       | 2 +-
>>>    drivers/net/fm10k/fm10k_ethdev.c     | 2 +-
>>>    drivers/net/gve/gve_ethdev.c         | 2 +-
>>>    drivers/net/hinic/hinic_pmd_ethdev.c | 2 +-
>>>    drivers/net/hns3/hns3_ethdev.c       | 2 +-
>>>    drivers/net/hns3/hns3_ethdev_vf.c    | 2 +-
>>>    drivers/net/i40e/i40e_ethdev.c       | 2 +-
>>>    drivers/net/iavf/iavf_ethdev.c       | 2 +-
>>>    drivers/net/ice/ice_dcf_ethdev.c     | 2 +-
>>>    drivers/net/ice/ice_ethdev.c         | 2 +-
>>>    drivers/net/igc/igc_ethdev.c         | 2 +-
>>>    drivers/net/ixgbe/ixgbe_ethdev.c     | 4 ++--
>>>    drivers/net/liquidio/lio_ethdev.c    | 2 +-
>>>    drivers/net/mana/mana.c              | 2 +-
>>>    drivers/net/netvsc/hn_ethdev.c       | 2 +-
>>>    drivers/net/nfp/nfp_common.c         | 2 +-
>>>    drivers/net/ngbe/ngbe_ethdev.c       | 2 +-
>>>    drivers/net/qede/qede_ethdev.c       | 2 +-
>>>    drivers/net/thunderx/nicvf_ethdev.c  | 2 +-
>>>    drivers/net/txgbe/txgbe_ethdev.c     | 2 +-
>>>    drivers/net/txgbe/txgbe_ethdev_vf.c  | 2 +-
>>>    drivers/net/vmxnet3/vmxnet3_ethdev.c | 2 +-
>>>    26 files changed, 28 insertions(+), 28 deletions(-)
>>>
>>> diff --git a/drivers/net/bnxt/bnxt_ethdev.c
>>> b/drivers/net/bnxt/bnxt_ethdev.c
>>> index 753e86b4b2af..14c0d5f8c72b 100644
>>> --- a/drivers/net/bnxt/bnxt_ethdev.c
>>> +++ b/drivers/net/bnxt/bnxt_ethdev.c
>>> @@ -1143,7 +1143,7 @@ static int bnxt_dev_configure_op(struct
>>> rte_eth_dev *eth_dev)
>>>        bp->rx_cp_nr_rings = bp->rx_nr_rings;
>>>        bp->tx_cp_nr_rings = bp->tx_nr_rings;
>>>    -    if (eth_dev->data->dev_conf.rxmode.mq_mode &
>>> RTE_ETH_MQ_RX_RSS_FLAG)
>>> +    if (eth_dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>>            rx_offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>        eth_dev->data->dev_conf.rxmode.offloads = rx_offloads;
>>>    diff --git a/drivers/net/cxgbe/cxgbe_ethdev.c
>>> b/drivers/net/cxgbe/cxgbe_ethdev.c
>>> index 45bbeaef0ceb..0e9ccc0587ba 100644
>>> --- a/drivers/net/cxgbe/cxgbe_ethdev.c
>>> +++ b/drivers/net/cxgbe/cxgbe_ethdev.c
>>> @@ -440,7 +440,7 @@ int cxgbe_dev_configure(struct rte_eth_dev *eth_dev)
>>>          CXGBE_FUNC_TRACE();
>>>    -    if (eth_dev->data->dev_conf.rxmode.mq_mode &
>>> RTE_ETH_MQ_RX_RSS_FLAG)
>>> +    if (eth_dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>>            eth_dev->data->dev_conf.rxmode.offloads |=
>>>                RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>    diff --git a/drivers/net/e1000/igb_ethdev.c
>>> b/drivers/net/e1000/igb_ethdev.c
>>> index 8858f975f8cc..8e6b43c2ff2d 100644
>>> --- a/drivers/net/e1000/igb_ethdev.c
>>> +++ b/drivers/net/e1000/igb_ethdev.c
>>> @@ -1146,7 +1146,7 @@ eth_igb_configure(struct rte_eth_dev *dev)
>>>          PMD_INIT_FUNC_TRACE();
>>>    -    if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
>>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>>            dev->data->dev_conf.rxmode.offloads |=
>>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>          /* multiple queue mode checking */
>>> @@ -3255,7 +3255,7 @@ igbvf_dev_configure(struct rte_eth_dev *dev)
>>>        PMD_INIT_LOG(DEBUG, "Configured Virtual Function port id: %d",
>>>                 dev->data->port_id);
>>>    -    if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
>>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>>            dev->data->dev_conf.rxmode.offloads |=
>>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>          /*
>>> diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c
>>> index efcb163027c8..6929d7066fbd 100644
>>> --- a/drivers/net/ena/ena_ethdev.c
>>> +++ b/drivers/net/ena/ena_ethdev.c
>>> @@ -2307,7 +2307,7 @@ static int ena_dev_configure(struct rte_eth_dev
>>> *dev)
>>>          adapter->state = ENA_ADAPTER_STATE_CONFIG;
>>>    -    if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
>>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>>            dev->data->dev_conf.rxmode.offloads |=
>>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>        dev->data->dev_conf.txmode.offloads |=
>>> RTE_ETH_TX_OFFLOAD_MULTI_SEGS;
>>>    diff --git a/drivers/net/enic/enic_ethdev.c
>>> b/drivers/net/enic/enic_ethdev.c
>>> index cdf091559196..f3a7bc161408 100644
>>> --- a/drivers/net/enic/enic_ethdev.c
>>> +++ b/drivers/net/enic/enic_ethdev.c
>>> @@ -323,7 +323,7 @@ static int enicpmd_dev_configure(struct
>>> rte_eth_dev *eth_dev)
>>>            return ret;
>>>        }
>>>    -    if (eth_dev->data->dev_conf.rxmode.mq_mode &
>>> RTE_ETH_MQ_RX_RSS_FLAG)
>>> +    if (eth_dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>>            eth_dev->data->dev_conf.rxmode.offloads |=
>>>                RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>    diff --git a/drivers/net/fm10k/fm10k_ethdev.c
>>> b/drivers/net/fm10k/fm10k_ethdev.c
>>> index 8b83063f0a2d..49d7849ba5ea 100644
>>> --- a/drivers/net/fm10k/fm10k_ethdev.c
>>> +++ b/drivers/net/fm10k/fm10k_ethdev.c
>>> @@ -450,7 +450,7 @@ fm10k_dev_configure(struct rte_eth_dev *dev)
>>>          PMD_INIT_FUNC_TRACE();
>>>    -    if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
>>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>>            dev->data->dev_conf.rxmode.offloads |=
>>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>          /* multiple queue mode checking */
>>> diff --git a/drivers/net/gve/gve_ethdev.c b/drivers/net/gve/gve_ethdev.c
>>> index cf28a4a3b710..f34755a369fb 100644
>>> --- a/drivers/net/gve/gve_ethdev.c
>>> +++ b/drivers/net/gve/gve_ethdev.c
>>> @@ -92,7 +92,7 @@ gve_dev_configure(struct rte_eth_dev *dev)
>>>    {
>>>        struct gve_priv *priv = dev->data->dev_private;
>>>    -    if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
>>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>>            dev->data->dev_conf.rxmode.offloads |=
>>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>          if (dev->data->dev_conf.rxmode.offloads &
>>> RTE_ETH_RX_OFFLOAD_TCP_LRO)
>>> diff --git a/drivers/net/hinic/hinic_pmd_ethdev.c
>>> b/drivers/net/hinic/hinic_pmd_ethdev.c
>>> index 7aa5e7d8e929..872ee97b1e97 100644
>>> --- a/drivers/net/hinic/hinic_pmd_ethdev.c
>>> +++ b/drivers/net/hinic/hinic_pmd_ethdev.c
>>> @@ -311,7 +311,7 @@ static int hinic_dev_configure(struct rte_eth_dev
>>> *dev)
>>>            return -EINVAL;
>>>        }
>>>    -    if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
>>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>>            dev->data->dev_conf.rxmode.offloads |=
>>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>          /* mtu size is 256~9600 */
>>> diff --git a/drivers/net/hns3/hns3_ethdev.c
>>> b/drivers/net/hns3/hns3_ethdev.c
>>> index 6babf67fcec2..fd3e499a3d38 100644
>>> --- a/drivers/net/hns3/hns3_ethdev.c
>>> +++ b/drivers/net/hns3/hns3_ethdev.c
>>> @@ -2016,7 +2016,7 @@ hns3_dev_configure(struct rte_eth_dev *dev)
>>>                goto cfg_err;
>>>        }
>>>    -    if ((uint32_t)mq_mode & RTE_ETH_MQ_RX_RSS_FLAG) {
>>> +    if (mq_mode == RTE_ETH_MQ_RX_RSS) {
>>>            conf->rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>            rss_conf = conf->rx_adv_conf.rss_conf;
>>>            ret = hns3_dev_rss_hash_update(dev, &rss_conf);
>>> diff --git a/drivers/net/hns3/hns3_ethdev_vf.c
>>> b/drivers/net/hns3/hns3_ethdev_vf.c
>>> index d051a1357b9f..00eb22d05558 100644
>>> --- a/drivers/net/hns3/hns3_ethdev_vf.c
>>> +++ b/drivers/net/hns3/hns3_ethdev_vf.c
>>> @@ -494,7 +494,7 @@ hns3vf_dev_configure(struct rte_eth_dev *dev)
>>>        }
>>>          /* When RSS is not configured, redirect the packet queue 0 */
>>> -    if ((uint32_t)mq_mode & RTE_ETH_MQ_RX_RSS_FLAG) {
>>> +    if (mq_mode == RTE_ETH_MQ_RX_RSS) {
>>>            conf->rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>            rss_conf = conf->rx_adv_conf.rss_conf;
>>>            ret = hns3_dev_rss_hash_update(dev, &rss_conf);
>>> diff --git a/drivers/net/i40e/i40e_ethdev.c
>>> b/drivers/net/i40e/i40e_ethdev.c
>>> index 7726a89d99fb..3c3dbc285c96 100644
>>> --- a/drivers/net/i40e/i40e_ethdev.c
>>> +++ b/drivers/net/i40e/i40e_ethdev.c
>>> @@ -1884,7 +1884,7 @@ i40e_dev_configure(struct rte_eth_dev *dev)
>>>        ad->tx_simple_allowed = true;
>>>        ad->tx_vec_allowed = true;
>>>    -    if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
>>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>>            dev->data->dev_conf.rxmode.offloads |=
>>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>          ret = i40e_dev_init_vlan(dev);
>>> diff --git a/drivers/net/iavf/iavf_ethdev.c
>>> b/drivers/net/iavf/iavf_ethdev.c
>>> index 3196210f2c1d..39860c08b606 100644
>>> --- a/drivers/net/iavf/iavf_ethdev.c
>>> +++ b/drivers/net/iavf/iavf_ethdev.c
>>> @@ -638,7 +638,7 @@ iavf_dev_configure(struct rte_eth_dev *dev)
>>>        ad->rx_vec_allowed = true;
>>>        ad->tx_vec_allowed = true;
>>>    -    if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
>>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>>            dev->data->dev_conf.rxmode.offloads |=
>>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>          /* Large VF setting */
>>> diff --git a/drivers/net/ice/ice_dcf_ethdev.c
>>> b/drivers/net/ice/ice_dcf_ethdev.c
>>> index dcbf2af5b039..f61a30716e5e 100644
>>> --- a/drivers/net/ice/ice_dcf_ethdev.c
>>> +++ b/drivers/net/ice/ice_dcf_ethdev.c
>>> @@ -711,7 +711,7 @@ ice_dcf_dev_configure(struct rte_eth_dev *dev)
>>>        ad->rx_bulk_alloc_allowed = true;
>>>        ad->tx_simple_allowed = true;
>>>    -    if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
>>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>>            dev->data->dev_conf.rxmode.offloads |=
>>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>          return 0;
>>> diff --git a/drivers/net/ice/ice_ethdev.c b/drivers/net/ice/ice_ethdev.c
>>> index 0d011bbffa77..96595fd7afaf 100644
>>> --- a/drivers/net/ice/ice_ethdev.c
>>> +++ b/drivers/net/ice/ice_ethdev.c
>>> @@ -3403,7 +3403,7 @@ ice_dev_configure(struct rte_eth_dev *dev)
>>>        ad->rx_bulk_alloc_allowed = true;
>>>        ad->tx_simple_allowed = true;
>>>    -    if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
>>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>>            dev->data->dev_conf.rxmode.offloads |=
>>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>          if (dev->data->nb_rx_queues) {
>>> diff --git a/drivers/net/igc/igc_ethdev.c b/drivers/net/igc/igc_ethdev.c
>>> index fab2ab6d1ce7..49f2b3738b84 100644
>>> --- a/drivers/net/igc/igc_ethdev.c
>>> +++ b/drivers/net/igc/igc_ethdev.c
>>> @@ -375,7 +375,7 @@ eth_igc_configure(struct rte_eth_dev *dev)
>>>          PMD_INIT_FUNC_TRACE();
>>>    -    if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
>>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>>            dev->data->dev_conf.rxmode.offloads |=
>>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>          ret  = igc_check_mq_mode(dev);
>>> diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c
>>> b/drivers/net/ixgbe/ixgbe_ethdev.c
>>> index 88118bc30560..328ccf918e86 100644
>>> --- a/drivers/net/ixgbe/ixgbe_ethdev.c
>>> +++ b/drivers/net/ixgbe/ixgbe_ethdev.c
>>> @@ -2431,7 +2431,7 @@ ixgbe_dev_configure(struct rte_eth_dev *dev)
>>>          PMD_INIT_FUNC_TRACE();
>>>    -    if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
>>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>>            dev->data->dev_conf.rxmode.offloads |=
>>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>          /* multiple queue mode checking */
>>> @@ -5321,7 +5321,7 @@ ixgbevf_dev_configure(struct rte_eth_dev *dev)
>>>        PMD_INIT_LOG(DEBUG, "Configured Virtual Function port id: %d",
>>>                 dev->data->port_id);
>>>    -    if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
>>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>>            dev->data->dev_conf.rxmode.offloads |=
>>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>          /*
>>> diff --git a/drivers/net/liquidio/lio_ethdev.c
>>> b/drivers/net/liquidio/lio_ethdev.c
>>> index ebcfbb1a5c0f..07fbaeda1ee6 100644
>>> --- a/drivers/net/liquidio/lio_ethdev.c
>>> +++ b/drivers/net/liquidio/lio_ethdev.c
>>> @@ -1722,7 +1722,7 @@ lio_dev_configure(struct rte_eth_dev *eth_dev)
>>>          PMD_INIT_FUNC_TRACE();
>>>    -    if (eth_dev->data->dev_conf.rxmode.mq_mode &
>>> RTE_ETH_MQ_RX_RSS_FLAG)
>>> +    if (eth_dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>>            eth_dev->data->dev_conf.rxmode.offloads |=
>>>                RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>    diff --git a/drivers/net/mana/mana.c b/drivers/net/mana/mana.c
>>> index 43221e743e87..76de691a8252 100644
>>> --- a/drivers/net/mana/mana.c
>>> +++ b/drivers/net/mana/mana.c
>>> @@ -78,7 +78,7 @@ mana_dev_configure(struct rte_eth_dev *dev)
>>>        struct mana_priv *priv = dev->data->dev_private;
>>>        struct rte_eth_conf *dev_conf = &dev->data->dev_conf;
>>>    -    if (dev_conf->rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
>>> +    if (dev_conf->rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>>            dev_conf->rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>          if (dev->data->nb_rx_queues != dev->data->nb_tx_queues) {
>>> diff --git a/drivers/net/netvsc/hn_ethdev.c
>>> b/drivers/net/netvsc/hn_ethdev.c
>>> index d0bbc0a4c0c0..4950b061799c 100644
>>> --- a/drivers/net/netvsc/hn_ethdev.c
>>> +++ b/drivers/net/netvsc/hn_ethdev.c
>>> @@ -721,7 +721,7 @@ static int hn_dev_configure(struct rte_eth_dev *dev)
>>>          PMD_INIT_FUNC_TRACE();
>>>    -    if (dev_conf->rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
>>> +    if (dev_conf->rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>>            dev_conf->rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>          unsupported = txmode->offloads & ~HN_TX_OFFLOAD_CAPS;
>>> diff --git a/drivers/net/nfp/nfp_common.c b/drivers/net/nfp/nfp_common.c
>>> index 907777a9e44d..a774fad3fba2 100644
>>> --- a/drivers/net/nfp/nfp_common.c
>>> +++ b/drivers/net/nfp/nfp_common.c
>>> @@ -161,7 +161,7 @@ nfp_net_configure(struct rte_eth_dev *dev)
>>>        rxmode = &dev_conf->rxmode;
>>>        txmode = &dev_conf->txmode;
>>>    -    if (rxmode->mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
>>> +    if (rxmode->mq_mode == RTE_ETH_MQ_RX_RSS)
>>>            rxmode->offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>          /* Checking TX mode */
>>> diff --git a/drivers/net/ngbe/ngbe_ethdev.c
>>> b/drivers/net/ngbe/ngbe_ethdev.c
>>> index c32d954769b0..5b53781c4aaf 100644
>>> --- a/drivers/net/ngbe/ngbe_ethdev.c
>>> +++ b/drivers/net/ngbe/ngbe_ethdev.c
>>> @@ -918,7 +918,7 @@ ngbe_dev_configure(struct rte_eth_dev *dev)
>>>          PMD_INIT_FUNC_TRACE();
>>>    -    if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
>>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>>            dev->data->dev_conf.rxmode.offloads |=
>>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>          /* set flag to update link status after init */
>>> diff --git a/drivers/net/qede/qede_ethdev.c
>>> b/drivers/net/qede/qede_ethdev.c
>>> index a4923670d6ba..11ddd8abf16a 100644
>>> --- a/drivers/net/qede/qede_ethdev.c
>>> +++ b/drivers/net/qede/qede_ethdev.c
>>> @@ -1272,7 +1272,7 @@ static int qede_dev_configure(struct rte_eth_dev
>>> *eth_dev)
>>>          PMD_INIT_FUNC_TRACE(edev);
>>>    -    if (rxmode->mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
>>> +    if (rxmode->mq_mode == RTE_ETH_MQ_RX_RSS)
>>>            rxmode->offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>          /* We need to have min 1 RX queue.There is no min check in
>>> diff --git a/drivers/net/thunderx/nicvf_ethdev.c
>>> b/drivers/net/thunderx/nicvf_ethdev.c
>>> index ab1e714d9767..b9cd09332510 100644
>>> --- a/drivers/net/thunderx/nicvf_ethdev.c
>>> +++ b/drivers/net/thunderx/nicvf_ethdev.c
>>> @@ -1984,7 +1984,7 @@ nicvf_dev_configure(struct rte_eth_dev *dev)
>>>          PMD_INIT_FUNC_TRACE();
>>>    -    if (rxmode->mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
>>> +    if (rxmode->mq_mode == RTE_ETH_MQ_RX_RSS)
>>>            rxmode->offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>          if (!rte_eal_has_hugepages()) {
>>> diff --git a/drivers/net/txgbe/txgbe_ethdev.c
>>> b/drivers/net/txgbe/txgbe_ethdev.c
>>> index a502618bc5a2..08ad5a087e23 100644
>>> --- a/drivers/net/txgbe/txgbe_ethdev.c
>>> +++ b/drivers/net/txgbe/txgbe_ethdev.c
>>> @@ -1508,7 +1508,7 @@ txgbe_dev_configure(struct rte_eth_dev *dev)
>>>          PMD_INIT_FUNC_TRACE();
>>>    -    if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
>>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>>            dev->data->dev_conf.rxmode.offloads |=
>>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>          /* multiple queue mode checking */
>>> diff --git a/drivers/net/txgbe/txgbe_ethdev_vf.c
>>> b/drivers/net/txgbe/txgbe_ethdev_vf.c
>>> index 3b1f7c913b7b..02a59fc696e5 100644
>>> --- a/drivers/net/txgbe/txgbe_ethdev_vf.c
>>> +++ b/drivers/net/txgbe/txgbe_ethdev_vf.c
>>> @@ -577,7 +577,7 @@ txgbevf_dev_configure(struct rte_eth_dev *dev)
>>>        PMD_INIT_LOG(DEBUG, "Configured Virtual Function port id: %d",
>>>                 dev->data->port_id);
>>>    -    if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
>>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>>            dev->data->dev_conf.rxmode.offloads |=
>>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>          /*
>>> diff --git a/drivers/net/vmxnet3/vmxnet3_ethdev.c
>>> b/drivers/net/vmxnet3/vmxnet3_ethdev.c
>>> index fd946dec5c80..8efde46ae0ad 100644
>>> --- a/drivers/net/vmxnet3/vmxnet3_ethdev.c
>>> +++ b/drivers/net/vmxnet3/vmxnet3_ethdev.c
>>> @@ -531,7 +531,7 @@ vmxnet3_dev_configure(struct rte_eth_dev *dev)
>>>          PMD_INIT_FUNC_TRACE();
>>>    -    if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
>>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>>            dev->data->dev_conf.rxmode.offloads |=
>>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>          if (!VMXNET3_VERSION_GE_6(hw)) {
> .

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [RFC PATCH] drivers/net: fix RSS multi-queue mode check
  2023-02-28  1:24     ` lihuisong (C)
@ 2023-02-28  8:23       ` Ferruh Yigit
  0 siblings, 0 replies; 5+ messages in thread
From: Ferruh Yigit @ 2023-02-28  8:23 UTC (permalink / raw)
  To: lihuisong (C),
	Ajit Khaparde, Somnath Kotur, Rahul Lakkireddy, Simei Su,
	Wenjun Wu, Marcin Wojtas, Michal Krawczyk, Shai Brandes,
	Evgeny Schemeilin, Igor Chauskin, John Daley, Hyong Youb Kim,
	Qi Zhang, Xiao Wang, Junfeng Guo, Ziyang Xuan, Xiaoyun Wang,
	Guoyang Zhou, Dongdong Liu, Yisen Zhuang, Yuying Zhang,
	Beilei Xing, Jingjing Wu, Qiming Yang, Shijith Thotton,
	Srisivasubramanian Srinivasan, Long Li, Chaoyong He,
	Niklas Söderlund, Jiawen Wu, Rasesh Mody,
	Devendra Singh Rawat, Jerin Jacob, Maciej Czekaj, Jian Wang,
	Jochen Behrens, Andrew Rybchenko
  Cc: Thomas Monjalon, dev, stable

On 2/28/2023 1:24 AM, lihuisong (C) wrote:
> 
> 在 2023/2/27 17:57, Ferruh Yigit 写道:
>> On 2/27/2023 1:34 AM, lihuisong (C) wrote:
>>> 在 2023/2/24 0:04, Ferruh Yigit 写道:
>>>> 'rxmode.mq_mode' is an enum which should be an abstraction over values,
>>>> instead of mask it with 'RTE_ETH_MQ_RX_RSS_FLAG' to detect if RSS is
>>>> supported, directly compare with 'RTE_ETH_MQ_RX_RSS' enum element.
>>>>
>>>> Most of the time only 'RTE_ETH_MQ_RX_RSS' is requested by user, that is
>>>> why output is almost same, but there may be cases driver doesn't
>>>> support
>>>> RSS combinations, like 'RTE_ETH_MQ_RX_VMDQ_DCB_RSS' but that is hidden
>>>> by masking with 'RTE_ETH_MQ_RX_RSS_FLAG'.
>>> Hi Ferruh,
>>>
>>> It seems that this fully changes the usage of the mq_mode.
>>> It will cause RSS, DCB and VMDQ function cannot work well.
>>>
>>> For example,
>>> Both user and driver enable RSS and DCB functions based on xxx_DCB_FLAG
>>> and xxx_RSS_FLAG in rxmode.mq_mode.
>>> If we directly compare with 'RTE_ETH_MQ_RX_RSS' enum element now, how do
>>> we enable RSS+DCB mode?
>>>
>> Hi Huisong,
>>
>> Technically 'RSS+DCB' mode can be set by user setting 'rxmode.mq_mode'
>> to 'RTE_ETH_MQ_RX_DCB_RSS' and PMD checking the same.
> This is not a good way to use.
> Because this has a greate impact for user and PMDs and will add
> cyclomatic complexity of PMD.
>>
>> Overall I think it is not good idea to use enum items as masked values,
> I agree what you do.
> It is better to change rxmode.mq_mode and txmode.mq_mode type from
> 'enum' to 'u32'.
> In this way, PMD code logic don't need to be modified and the impact on
> PMDs and user is minimal.
> What do you think?

If bitmask feature of mq_mode is used and needed, I agree changing
underlying data type cause less disturbance in logic.

But chaning underlying data type has ABI impications, for now I will
drop this patch, thanks for the feedback.

>> but that seems done intentionally in the past:
>> Commit 4bdefaade6d1 ("ethdev: VMDQ enhancements")
> Seems it was.
>>
>> Since this can be in use already, following patch only changes where
>> 'RTE_ETH_RX_OFFLOAD_RSS_HASH' is set, rest of the usage remaining same.
>>
>> And even for 'RTE_ETH_RX_OFFLOAD_RSS_HASH', I think intention was to
>> override this offload config in PMD when explicitly RSS mode is enabled,
>> but I made the set as RFC to get feedback on this. We may keep as it is
>> if some other modes with 'RTE_ETH_MQ_RX_RSS_FLAG' uses this offload.
>>
>>>> Fixes: 73fb89dd6a00 ("drivers/net: fix RSS hash offload flag if no
>>>> RSS")
>>>> Cc: stable@dpdk.org
>>>>
>>>> Signed-off-by: Ferruh Yigit <ferruh.yigit@amd.com>
>>>>
>>>> ---
>>>>
>>>> There are more usage like "rxmode->mq_mode & RTE_ETH_MQ_RX_RSS_FLAG" in
>>>> drivers, not sure to fix all in this commit or not, feedback welcomed.
>>>> ---
>>>>    drivers/net/bnxt/bnxt_ethdev.c       | 2 +-
>>>>    drivers/net/cxgbe/cxgbe_ethdev.c     | 2 +-
>>>>    drivers/net/e1000/igb_ethdev.c       | 4 ++--
>>>>    drivers/net/ena/ena_ethdev.c         | 2 +-
>>>>    drivers/net/enic/enic_ethdev.c       | 2 +-
>>>>    drivers/net/fm10k/fm10k_ethdev.c     | 2 +-
>>>>    drivers/net/gve/gve_ethdev.c         | 2 +-
>>>>    drivers/net/hinic/hinic_pmd_ethdev.c | 2 +-
>>>>    drivers/net/hns3/hns3_ethdev.c       | 2 +-
>>>>    drivers/net/hns3/hns3_ethdev_vf.c    | 2 +-
>>>>    drivers/net/i40e/i40e_ethdev.c       | 2 +-
>>>>    drivers/net/iavf/iavf_ethdev.c       | 2 +-
>>>>    drivers/net/ice/ice_dcf_ethdev.c     | 2 +-
>>>>    drivers/net/ice/ice_ethdev.c         | 2 +-
>>>>    drivers/net/igc/igc_ethdev.c         | 2 +-
>>>>    drivers/net/ixgbe/ixgbe_ethdev.c     | 4 ++--
>>>>    drivers/net/liquidio/lio_ethdev.c    | 2 +-
>>>>    drivers/net/mana/mana.c              | 2 +-
>>>>    drivers/net/netvsc/hn_ethdev.c       | 2 +-
>>>>    drivers/net/nfp/nfp_common.c         | 2 +-
>>>>    drivers/net/ngbe/ngbe_ethdev.c       | 2 +-
>>>>    drivers/net/qede/qede_ethdev.c       | 2 +-
>>>>    drivers/net/thunderx/nicvf_ethdev.c  | 2 +-
>>>>    drivers/net/txgbe/txgbe_ethdev.c     | 2 +-
>>>>    drivers/net/txgbe/txgbe_ethdev_vf.c  | 2 +-
>>>>    drivers/net/vmxnet3/vmxnet3_ethdev.c | 2 +-
>>>>    26 files changed, 28 insertions(+), 28 deletions(-)
>>>>
>>>> diff --git a/drivers/net/bnxt/bnxt_ethdev.c
>>>> b/drivers/net/bnxt/bnxt_ethdev.c
>>>> index 753e86b4b2af..14c0d5f8c72b 100644
>>>> --- a/drivers/net/bnxt/bnxt_ethdev.c
>>>> +++ b/drivers/net/bnxt/bnxt_ethdev.c
>>>> @@ -1143,7 +1143,7 @@ static int bnxt_dev_configure_op(struct
>>>> rte_eth_dev *eth_dev)
>>>>        bp->rx_cp_nr_rings = bp->rx_nr_rings;
>>>>        bp->tx_cp_nr_rings = bp->tx_nr_rings;
>>>>    -    if (eth_dev->data->dev_conf.rxmode.mq_mode &
>>>> RTE_ETH_MQ_RX_RSS_FLAG)
>>>> +    if (eth_dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>>>            rx_offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>>        eth_dev->data->dev_conf.rxmode.offloads = rx_offloads;
>>>>    diff --git a/drivers/net/cxgbe/cxgbe_ethdev.c
>>>> b/drivers/net/cxgbe/cxgbe_ethdev.c
>>>> index 45bbeaef0ceb..0e9ccc0587ba 100644
>>>> --- a/drivers/net/cxgbe/cxgbe_ethdev.c
>>>> +++ b/drivers/net/cxgbe/cxgbe_ethdev.c
>>>> @@ -440,7 +440,7 @@ int cxgbe_dev_configure(struct rte_eth_dev
>>>> *eth_dev)
>>>>          CXGBE_FUNC_TRACE();
>>>>    -    if (eth_dev->data->dev_conf.rxmode.mq_mode &
>>>> RTE_ETH_MQ_RX_RSS_FLAG)
>>>> +    if (eth_dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>>>            eth_dev->data->dev_conf.rxmode.offloads |=
>>>>                RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>>    diff --git a/drivers/net/e1000/igb_ethdev.c
>>>> b/drivers/net/e1000/igb_ethdev.c
>>>> index 8858f975f8cc..8e6b43c2ff2d 100644
>>>> --- a/drivers/net/e1000/igb_ethdev.c
>>>> +++ b/drivers/net/e1000/igb_ethdev.c
>>>> @@ -1146,7 +1146,7 @@ eth_igb_configure(struct rte_eth_dev *dev)
>>>>          PMD_INIT_FUNC_TRACE();
>>>>    -    if (dev->data->dev_conf.rxmode.mq_mode &
>>>> RTE_ETH_MQ_RX_RSS_FLAG)
>>>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>>>            dev->data->dev_conf.rxmode.offloads |=
>>>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>>          /* multiple queue mode checking */
>>>> @@ -3255,7 +3255,7 @@ igbvf_dev_configure(struct rte_eth_dev *dev)
>>>>        PMD_INIT_LOG(DEBUG, "Configured Virtual Function port id: %d",
>>>>                 dev->data->port_id);
>>>>    -    if (dev->data->dev_conf.rxmode.mq_mode &
>>>> RTE_ETH_MQ_RX_RSS_FLAG)
>>>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>>>            dev->data->dev_conf.rxmode.offloads |=
>>>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>>          /*
>>>> diff --git a/drivers/net/ena/ena_ethdev.c
>>>> b/drivers/net/ena/ena_ethdev.c
>>>> index efcb163027c8..6929d7066fbd 100644
>>>> --- a/drivers/net/ena/ena_ethdev.c
>>>> +++ b/drivers/net/ena/ena_ethdev.c
>>>> @@ -2307,7 +2307,7 @@ static int ena_dev_configure(struct rte_eth_dev
>>>> *dev)
>>>>          adapter->state = ENA_ADAPTER_STATE_CONFIG;
>>>>    -    if (dev->data->dev_conf.rxmode.mq_mode &
>>>> RTE_ETH_MQ_RX_RSS_FLAG)
>>>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>>>            dev->data->dev_conf.rxmode.offloads |=
>>>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>>        dev->data->dev_conf.txmode.offloads |=
>>>> RTE_ETH_TX_OFFLOAD_MULTI_SEGS;
>>>>    diff --git a/drivers/net/enic/enic_ethdev.c
>>>> b/drivers/net/enic/enic_ethdev.c
>>>> index cdf091559196..f3a7bc161408 100644
>>>> --- a/drivers/net/enic/enic_ethdev.c
>>>> +++ b/drivers/net/enic/enic_ethdev.c
>>>> @@ -323,7 +323,7 @@ static int enicpmd_dev_configure(struct
>>>> rte_eth_dev *eth_dev)
>>>>            return ret;
>>>>        }
>>>>    -    if (eth_dev->data->dev_conf.rxmode.mq_mode &
>>>> RTE_ETH_MQ_RX_RSS_FLAG)
>>>> +    if (eth_dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>>>            eth_dev->data->dev_conf.rxmode.offloads |=
>>>>                RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>>    diff --git a/drivers/net/fm10k/fm10k_ethdev.c
>>>> b/drivers/net/fm10k/fm10k_ethdev.c
>>>> index 8b83063f0a2d..49d7849ba5ea 100644
>>>> --- a/drivers/net/fm10k/fm10k_ethdev.c
>>>> +++ b/drivers/net/fm10k/fm10k_ethdev.c
>>>> @@ -450,7 +450,7 @@ fm10k_dev_configure(struct rte_eth_dev *dev)
>>>>          PMD_INIT_FUNC_TRACE();
>>>>    -    if (dev->data->dev_conf.rxmode.mq_mode &
>>>> RTE_ETH_MQ_RX_RSS_FLAG)
>>>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>>>            dev->data->dev_conf.rxmode.offloads |=
>>>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>>          /* multiple queue mode checking */
>>>> diff --git a/drivers/net/gve/gve_ethdev.c
>>>> b/drivers/net/gve/gve_ethdev.c
>>>> index cf28a4a3b710..f34755a369fb 100644
>>>> --- a/drivers/net/gve/gve_ethdev.c
>>>> +++ b/drivers/net/gve/gve_ethdev.c
>>>> @@ -92,7 +92,7 @@ gve_dev_configure(struct rte_eth_dev *dev)
>>>>    {
>>>>        struct gve_priv *priv = dev->data->dev_private;
>>>>    -    if (dev->data->dev_conf.rxmode.mq_mode &
>>>> RTE_ETH_MQ_RX_RSS_FLAG)
>>>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>>>            dev->data->dev_conf.rxmode.offloads |=
>>>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>>          if (dev->data->dev_conf.rxmode.offloads &
>>>> RTE_ETH_RX_OFFLOAD_TCP_LRO)
>>>> diff --git a/drivers/net/hinic/hinic_pmd_ethdev.c
>>>> b/drivers/net/hinic/hinic_pmd_ethdev.c
>>>> index 7aa5e7d8e929..872ee97b1e97 100644
>>>> --- a/drivers/net/hinic/hinic_pmd_ethdev.c
>>>> +++ b/drivers/net/hinic/hinic_pmd_ethdev.c
>>>> @@ -311,7 +311,7 @@ static int hinic_dev_configure(struct rte_eth_dev
>>>> *dev)
>>>>            return -EINVAL;
>>>>        }
>>>>    -    if (dev->data->dev_conf.rxmode.mq_mode &
>>>> RTE_ETH_MQ_RX_RSS_FLAG)
>>>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>>>            dev->data->dev_conf.rxmode.offloads |=
>>>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>>          /* mtu size is 256~9600 */
>>>> diff --git a/drivers/net/hns3/hns3_ethdev.c
>>>> b/drivers/net/hns3/hns3_ethdev.c
>>>> index 6babf67fcec2..fd3e499a3d38 100644
>>>> --- a/drivers/net/hns3/hns3_ethdev.c
>>>> +++ b/drivers/net/hns3/hns3_ethdev.c
>>>> @@ -2016,7 +2016,7 @@ hns3_dev_configure(struct rte_eth_dev *dev)
>>>>                goto cfg_err;
>>>>        }
>>>>    -    if ((uint32_t)mq_mode & RTE_ETH_MQ_RX_RSS_FLAG) {
>>>> +    if (mq_mode == RTE_ETH_MQ_RX_RSS) {
>>>>            conf->rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>>            rss_conf = conf->rx_adv_conf.rss_conf;
>>>>            ret = hns3_dev_rss_hash_update(dev, &rss_conf);
>>>> diff --git a/drivers/net/hns3/hns3_ethdev_vf.c
>>>> b/drivers/net/hns3/hns3_ethdev_vf.c
>>>> index d051a1357b9f..00eb22d05558 100644
>>>> --- a/drivers/net/hns3/hns3_ethdev_vf.c
>>>> +++ b/drivers/net/hns3/hns3_ethdev_vf.c
>>>> @@ -494,7 +494,7 @@ hns3vf_dev_configure(struct rte_eth_dev *dev)
>>>>        }
>>>>          /* When RSS is not configured, redirect the packet queue 0 */
>>>> -    if ((uint32_t)mq_mode & RTE_ETH_MQ_RX_RSS_FLAG) {
>>>> +    if (mq_mode == RTE_ETH_MQ_RX_RSS) {
>>>>            conf->rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>>            rss_conf = conf->rx_adv_conf.rss_conf;
>>>>            ret = hns3_dev_rss_hash_update(dev, &rss_conf);
>>>> diff --git a/drivers/net/i40e/i40e_ethdev.c
>>>> b/drivers/net/i40e/i40e_ethdev.c
>>>> index 7726a89d99fb..3c3dbc285c96 100644
>>>> --- a/drivers/net/i40e/i40e_ethdev.c
>>>> +++ b/drivers/net/i40e/i40e_ethdev.c
>>>> @@ -1884,7 +1884,7 @@ i40e_dev_configure(struct rte_eth_dev *dev)
>>>>        ad->tx_simple_allowed = true;
>>>>        ad->tx_vec_allowed = true;
>>>>    -    if (dev->data->dev_conf.rxmode.mq_mode &
>>>> RTE_ETH_MQ_RX_RSS_FLAG)
>>>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>>>            dev->data->dev_conf.rxmode.offloads |=
>>>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>>          ret = i40e_dev_init_vlan(dev);
>>>> diff --git a/drivers/net/iavf/iavf_ethdev.c
>>>> b/drivers/net/iavf/iavf_ethdev.c
>>>> index 3196210f2c1d..39860c08b606 100644
>>>> --- a/drivers/net/iavf/iavf_ethdev.c
>>>> +++ b/drivers/net/iavf/iavf_ethdev.c
>>>> @@ -638,7 +638,7 @@ iavf_dev_configure(struct rte_eth_dev *dev)
>>>>        ad->rx_vec_allowed = true;
>>>>        ad->tx_vec_allowed = true;
>>>>    -    if (dev->data->dev_conf.rxmode.mq_mode &
>>>> RTE_ETH_MQ_RX_RSS_FLAG)
>>>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>>>            dev->data->dev_conf.rxmode.offloads |=
>>>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>>          /* Large VF setting */
>>>> diff --git a/drivers/net/ice/ice_dcf_ethdev.c
>>>> b/drivers/net/ice/ice_dcf_ethdev.c
>>>> index dcbf2af5b039..f61a30716e5e 100644
>>>> --- a/drivers/net/ice/ice_dcf_ethdev.c
>>>> +++ b/drivers/net/ice/ice_dcf_ethdev.c
>>>> @@ -711,7 +711,7 @@ ice_dcf_dev_configure(struct rte_eth_dev *dev)
>>>>        ad->rx_bulk_alloc_allowed = true;
>>>>        ad->tx_simple_allowed = true;
>>>>    -    if (dev->data->dev_conf.rxmode.mq_mode &
>>>> RTE_ETH_MQ_RX_RSS_FLAG)
>>>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>>>            dev->data->dev_conf.rxmode.offloads |=
>>>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>>          return 0;
>>>> diff --git a/drivers/net/ice/ice_ethdev.c
>>>> b/drivers/net/ice/ice_ethdev.c
>>>> index 0d011bbffa77..96595fd7afaf 100644
>>>> --- a/drivers/net/ice/ice_ethdev.c
>>>> +++ b/drivers/net/ice/ice_ethdev.c
>>>> @@ -3403,7 +3403,7 @@ ice_dev_configure(struct rte_eth_dev *dev)
>>>>        ad->rx_bulk_alloc_allowed = true;
>>>>        ad->tx_simple_allowed = true;
>>>>    -    if (dev->data->dev_conf.rxmode.mq_mode &
>>>> RTE_ETH_MQ_RX_RSS_FLAG)
>>>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>>>            dev->data->dev_conf.rxmode.offloads |=
>>>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>>          if (dev->data->nb_rx_queues) {
>>>> diff --git a/drivers/net/igc/igc_ethdev.c
>>>> b/drivers/net/igc/igc_ethdev.c
>>>> index fab2ab6d1ce7..49f2b3738b84 100644
>>>> --- a/drivers/net/igc/igc_ethdev.c
>>>> +++ b/drivers/net/igc/igc_ethdev.c
>>>> @@ -375,7 +375,7 @@ eth_igc_configure(struct rte_eth_dev *dev)
>>>>          PMD_INIT_FUNC_TRACE();
>>>>    -    if (dev->data->dev_conf.rxmode.mq_mode &
>>>> RTE_ETH_MQ_RX_RSS_FLAG)
>>>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>>>            dev->data->dev_conf.rxmode.offloads |=
>>>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>>          ret  = igc_check_mq_mode(dev);
>>>> diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c
>>>> b/drivers/net/ixgbe/ixgbe_ethdev.c
>>>> index 88118bc30560..328ccf918e86 100644
>>>> --- a/drivers/net/ixgbe/ixgbe_ethdev.c
>>>> +++ b/drivers/net/ixgbe/ixgbe_ethdev.c
>>>> @@ -2431,7 +2431,7 @@ ixgbe_dev_configure(struct rte_eth_dev *dev)
>>>>          PMD_INIT_FUNC_TRACE();
>>>>    -    if (dev->data->dev_conf.rxmode.mq_mode &
>>>> RTE_ETH_MQ_RX_RSS_FLAG)
>>>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>>>            dev->data->dev_conf.rxmode.offloads |=
>>>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>>          /* multiple queue mode checking */
>>>> @@ -5321,7 +5321,7 @@ ixgbevf_dev_configure(struct rte_eth_dev *dev)
>>>>        PMD_INIT_LOG(DEBUG, "Configured Virtual Function port id: %d",
>>>>                 dev->data->port_id);
>>>>    -    if (dev->data->dev_conf.rxmode.mq_mode &
>>>> RTE_ETH_MQ_RX_RSS_FLAG)
>>>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>>>            dev->data->dev_conf.rxmode.offloads |=
>>>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>>          /*
>>>> diff --git a/drivers/net/liquidio/lio_ethdev.c
>>>> b/drivers/net/liquidio/lio_ethdev.c
>>>> index ebcfbb1a5c0f..07fbaeda1ee6 100644
>>>> --- a/drivers/net/liquidio/lio_ethdev.c
>>>> +++ b/drivers/net/liquidio/lio_ethdev.c
>>>> @@ -1722,7 +1722,7 @@ lio_dev_configure(struct rte_eth_dev *eth_dev)
>>>>          PMD_INIT_FUNC_TRACE();
>>>>    -    if (eth_dev->data->dev_conf.rxmode.mq_mode &
>>>> RTE_ETH_MQ_RX_RSS_FLAG)
>>>> +    if (eth_dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>>>            eth_dev->data->dev_conf.rxmode.offloads |=
>>>>                RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>>    diff --git a/drivers/net/mana/mana.c b/drivers/net/mana/mana.c
>>>> index 43221e743e87..76de691a8252 100644
>>>> --- a/drivers/net/mana/mana.c
>>>> +++ b/drivers/net/mana/mana.c
>>>> @@ -78,7 +78,7 @@ mana_dev_configure(struct rte_eth_dev *dev)
>>>>        struct mana_priv *priv = dev->data->dev_private;
>>>>        struct rte_eth_conf *dev_conf = &dev->data->dev_conf;
>>>>    -    if (dev_conf->rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
>>>> +    if (dev_conf->rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>>>            dev_conf->rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>>          if (dev->data->nb_rx_queues != dev->data->nb_tx_queues) {
>>>> diff --git a/drivers/net/netvsc/hn_ethdev.c
>>>> b/drivers/net/netvsc/hn_ethdev.c
>>>> index d0bbc0a4c0c0..4950b061799c 100644
>>>> --- a/drivers/net/netvsc/hn_ethdev.c
>>>> +++ b/drivers/net/netvsc/hn_ethdev.c
>>>> @@ -721,7 +721,7 @@ static int hn_dev_configure(struct rte_eth_dev
>>>> *dev)
>>>>          PMD_INIT_FUNC_TRACE();
>>>>    -    if (dev_conf->rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
>>>> +    if (dev_conf->rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>>>            dev_conf->rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>>          unsupported = txmode->offloads & ~HN_TX_OFFLOAD_CAPS;
>>>> diff --git a/drivers/net/nfp/nfp_common.c
>>>> b/drivers/net/nfp/nfp_common.c
>>>> index 907777a9e44d..a774fad3fba2 100644
>>>> --- a/drivers/net/nfp/nfp_common.c
>>>> +++ b/drivers/net/nfp/nfp_common.c
>>>> @@ -161,7 +161,7 @@ nfp_net_configure(struct rte_eth_dev *dev)
>>>>        rxmode = &dev_conf->rxmode;
>>>>        txmode = &dev_conf->txmode;
>>>>    -    if (rxmode->mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
>>>> +    if (rxmode->mq_mode == RTE_ETH_MQ_RX_RSS)
>>>>            rxmode->offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>>          /* Checking TX mode */
>>>> diff --git a/drivers/net/ngbe/ngbe_ethdev.c
>>>> b/drivers/net/ngbe/ngbe_ethdev.c
>>>> index c32d954769b0..5b53781c4aaf 100644
>>>> --- a/drivers/net/ngbe/ngbe_ethdev.c
>>>> +++ b/drivers/net/ngbe/ngbe_ethdev.c
>>>> @@ -918,7 +918,7 @@ ngbe_dev_configure(struct rte_eth_dev *dev)
>>>>          PMD_INIT_FUNC_TRACE();
>>>>    -    if (dev->data->dev_conf.rxmode.mq_mode &
>>>> RTE_ETH_MQ_RX_RSS_FLAG)
>>>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>>>            dev->data->dev_conf.rxmode.offloads |=
>>>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>>          /* set flag to update link status after init */
>>>> diff --git a/drivers/net/qede/qede_ethdev.c
>>>> b/drivers/net/qede/qede_ethdev.c
>>>> index a4923670d6ba..11ddd8abf16a 100644
>>>> --- a/drivers/net/qede/qede_ethdev.c
>>>> +++ b/drivers/net/qede/qede_ethdev.c
>>>> @@ -1272,7 +1272,7 @@ static int qede_dev_configure(struct rte_eth_dev
>>>> *eth_dev)
>>>>          PMD_INIT_FUNC_TRACE(edev);
>>>>    -    if (rxmode->mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
>>>> +    if (rxmode->mq_mode == RTE_ETH_MQ_RX_RSS)
>>>>            rxmode->offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>>          /* We need to have min 1 RX queue.There is no min check in
>>>> diff --git a/drivers/net/thunderx/nicvf_ethdev.c
>>>> b/drivers/net/thunderx/nicvf_ethdev.c
>>>> index ab1e714d9767..b9cd09332510 100644
>>>> --- a/drivers/net/thunderx/nicvf_ethdev.c
>>>> +++ b/drivers/net/thunderx/nicvf_ethdev.c
>>>> @@ -1984,7 +1984,7 @@ nicvf_dev_configure(struct rte_eth_dev *dev)
>>>>          PMD_INIT_FUNC_TRACE();
>>>>    -    if (rxmode->mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
>>>> +    if (rxmode->mq_mode == RTE_ETH_MQ_RX_RSS)
>>>>            rxmode->offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>>          if (!rte_eal_has_hugepages()) {
>>>> diff --git a/drivers/net/txgbe/txgbe_ethdev.c
>>>> b/drivers/net/txgbe/txgbe_ethdev.c
>>>> index a502618bc5a2..08ad5a087e23 100644
>>>> --- a/drivers/net/txgbe/txgbe_ethdev.c
>>>> +++ b/drivers/net/txgbe/txgbe_ethdev.c
>>>> @@ -1508,7 +1508,7 @@ txgbe_dev_configure(struct rte_eth_dev *dev)
>>>>          PMD_INIT_FUNC_TRACE();
>>>>    -    if (dev->data->dev_conf.rxmode.mq_mode &
>>>> RTE_ETH_MQ_RX_RSS_FLAG)
>>>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>>>            dev->data->dev_conf.rxmode.offloads |=
>>>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>>          /* multiple queue mode checking */
>>>> diff --git a/drivers/net/txgbe/txgbe_ethdev_vf.c
>>>> b/drivers/net/txgbe/txgbe_ethdev_vf.c
>>>> index 3b1f7c913b7b..02a59fc696e5 100644
>>>> --- a/drivers/net/txgbe/txgbe_ethdev_vf.c
>>>> +++ b/drivers/net/txgbe/txgbe_ethdev_vf.c
>>>> @@ -577,7 +577,7 @@ txgbevf_dev_configure(struct rte_eth_dev *dev)
>>>>        PMD_INIT_LOG(DEBUG, "Configured Virtual Function port id: %d",
>>>>                 dev->data->port_id);
>>>>    -    if (dev->data->dev_conf.rxmode.mq_mode &
>>>> RTE_ETH_MQ_RX_RSS_FLAG)
>>>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>>>            dev->data->dev_conf.rxmode.offloads |=
>>>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>>          /*
>>>> diff --git a/drivers/net/vmxnet3/vmxnet3_ethdev.c
>>>> b/drivers/net/vmxnet3/vmxnet3_ethdev.c
>>>> index fd946dec5c80..8efde46ae0ad 100644
>>>> --- a/drivers/net/vmxnet3/vmxnet3_ethdev.c
>>>> +++ b/drivers/net/vmxnet3/vmxnet3_ethdev.c
>>>> @@ -531,7 +531,7 @@ vmxnet3_dev_configure(struct rte_eth_dev *dev)
>>>>          PMD_INIT_FUNC_TRACE();
>>>>    -    if (dev->data->dev_conf.rxmode.mq_mode &
>>>> RTE_ETH_MQ_RX_RSS_FLAG)
>>>> +    if (dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS)
>>>>            dev->data->dev_conf.rxmode.offloads |=
>>>> RTE_ETH_RX_OFFLOAD_RSS_HASH;
>>>>          if (!VMXNET3_VERSION_GE_6(hw)) {
>> .


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2023-02-28  8:23 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-02-23 16:04 [RFC PATCH] drivers/net: fix RSS multi-queue mode check Ferruh Yigit
2023-02-27  1:34 ` lihuisong (C)
2023-02-27  9:57   ` Ferruh Yigit
2023-02-28  1:24     ` lihuisong (C)
2023-02-28  8:23       ` Ferruh Yigit

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).