]> git.droids-corp.org - dpdk.git/commitdiff
net/bnxt: fix queue stop operation
authorKalesh AP <kalesh-anakkur.purayil@broadcom.com>
Tue, 4 Jan 2022 08:38:09 +0000 (14:08 +0530)
committerAjit Khaparde <ajit.khaparde@broadcom.com>
Wed, 12 Jan 2022 01:47:49 +0000 (02:47 +0100)
When there are no active Rx queues(i.e when all queues have been
stopped), clear the RSS redirection table of the VNIC on Thor.

Fixes: 9b63c6fd70e3 ("net/bnxt: support Rx/Tx queue start/stop")
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>
Reviewed-by: Lance Richardson <lance.richardson@broadcom.com>
drivers/net/bnxt/bnxt_hwrm.c
drivers/net/bnxt/bnxt_hwrm.h
drivers/net/bnxt/bnxt_rxq.c

index 568f77a87e0af7bed1ee923b199c060abe14fc44..6093407986e5a021fcf8f4934b333d390091b52d 100644 (file)
@@ -6262,3 +6262,26 @@ int bnxt_hwrm_config_host_mtu(struct bnxt *bp)
 
        return rc;
 }
+
+int
+bnxt_vnic_rss_clear_p5(struct bnxt *bp, struct bnxt_vnic_info *vnic)
+{
+       struct hwrm_vnic_rss_cfg_output *resp = bp->hwrm_cmd_resp_addr;
+       struct hwrm_vnic_rss_cfg_input req = {0};
+       int nr_ctxs = vnic->num_lb_ctxts;
+       int i, rc = 0;
+
+       for (i = 0; i < nr_ctxs; i++) {
+               HWRM_PREP(&req, HWRM_VNIC_RSS_CFG, BNXT_USE_CHIMP_MB);
+
+               req.rss_ctx_idx = rte_cpu_to_le_16(vnic->fw_grp_ids[i]);
+               req.vnic_id = rte_cpu_to_le_16(vnic->fw_vnic_id);
+
+               rc = bnxt_hwrm_send_message(bp, &req, sizeof(req), BNXT_USE_CHIMP_MB);
+
+               HWRM_CHECK_RESULT();
+               HWRM_UNLOCK();
+       }
+
+       return rc;
+}
index f8f05562015666de9a3a67460a5958043d287c11..8202455bf010fc7ab3ffea286947af1304f2e905 100644 (file)
@@ -310,4 +310,5 @@ int bnxt_hwrm_stat_ctx_alloc(struct bnxt *bp, struct bnxt_cp_ring_info *cpr);
 void bnxt_free_hwrm_tx_ring(struct bnxt *bp, int queue_index);
 int bnxt_alloc_hwrm_tx_ring(struct bnxt *bp, int queue_index);
 int bnxt_hwrm_config_host_mtu(struct bnxt *bp);
+int bnxt_vnic_rss_clear_p5(struct bnxt *bp, struct bnxt_vnic_info *vnic);
 #endif
index 1456f8b54ffadd20025adc86eddb98c18bcd384f..c9d99039adb1164c42554a5cb646557437d36cd2 100644 (file)
@@ -574,6 +574,9 @@ int bnxt_rx_queue_stop(struct rte_eth_dev *dev, uint16_t rx_queue_id)
                if (active_queue_cnt == 0) {
                        uint16_t saved_mru = vnic->mru;
 
+                       /* clear RSS setting on vnic. */
+                       bnxt_vnic_rss_clear_p5(bp, vnic);
+
                        vnic->mru = 0;
                        /* Reconfigure default receive ring and MRU. */
                        bnxt_hwrm_vnic_cfg(bp, vnic);