[04/17] net/bnxt: fix Rxq configure
Checks
Commit Message
From: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
We are currently not handling RX/RSS modes correctly.
After launching testpmd with multiple RXQs, if the user tries to set
the number of RXQs to 1, driver is not updating the "hash_type"
and "hash_mode" values of the VNICs. As a result, driver issues
bnxt_vnic_rss_configure() unnecessarily and the FW command fails.
Fixed bnxt_mq_rx_configure() to update VNIC RSS fields unconditionally.
Fixes: 4191bc8f79a8 ("net/bnxt: handle multi queue mode properly")
Cc: stable@dpdk.org
Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Reviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
---
drivers/net/bnxt/bnxt_rxq.c | 37 ++++++++++++++-----------------------
1 file changed, 14 insertions(+), 23 deletions(-)
@@ -65,6 +65,7 @@ void bnxt_free_rxq_stats(struct bnxt_rx_queue *rxq)
int bnxt_mq_rx_configure(struct bnxt *bp)
{
struct rte_eth_conf *dev_conf = &bp->eth_dev->data->dev_conf;
+ struct rte_eth_rss_conf *rss = &bp->rss_conf;
const struct rte_eth_vmdq_rx_conf *conf =
&dev_conf->rx_adv_conf.vmdq_rx_conf;
unsigned int i, j, nb_q_per_grp = 1, ring_idx = 0;
@@ -172,29 +173,19 @@ int bnxt_mq_rx_configure(struct bnxt *bp)
bp->rx_num_qs_per_vnic = nb_q_per_grp;
- if (dev_conf->rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG) {
- struct rte_eth_rss_conf *rss = &bp->rss_conf;
-
- for (i = 0; i < bp->nr_vnics; i++) {
- uint32_t lvl = RTE_ETH_RSS_LEVEL(rss->rss_hf);
-
- vnic = &bp->vnic_info[i];
- vnic->hash_type =
- bnxt_rte_to_hwrm_hash_types(rss->rss_hf);
- vnic->hash_mode =
- bnxt_rte_to_hwrm_hash_level(bp,
- rss->rss_hf,
- lvl);
-
- /*
- * Use the supplied key if the key length is
- * acceptable and the rss_key is not NULL
- */
- if (rss->rss_key &&
- rss->rss_key_len <= HW_HASH_KEY_SIZE)
- memcpy(vnic->rss_hash_key,
- rss->rss_key, rss->rss_key_len);
- }
+ for (i = 0; i < bp->nr_vnics; i++) {
+ uint32_t lvl = RTE_ETH_RSS_LEVEL(rss->rss_hf);
+
+ vnic = &bp->vnic_info[i];
+ vnic->hash_type = bnxt_rte_to_hwrm_hash_types(rss->rss_hf);
+ vnic->hash_mode = bnxt_rte_to_hwrm_hash_level(bp, rss->rss_hf, lvl);
+
+ /*
+ * Use the supplied key if the key length is
+ * acceptable and the rss_key is not NULL
+ */
+ if (rss->rss_key && rss->rss_key_len <= HW_HASH_KEY_SIZE)
+ memcpy(vnic->rss_hash_key, rss->rss_key, rss->rss_key_len);
}
return rc;