net/bnxt: fix VNIC config error in port start

Message ID 20210825012901.80499-1-ajit.khaparde@broadcom.com (mailing list archive)
State Accepted, archived
Delegated to: Ajit Khaparde
Headers
Series net/bnxt: fix VNIC config error in port start |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/github-robot: build success github build: passed
ci/iol-broadcom-Performance success Performance Testing PASS
ci/iol-broadcom-Functional success Functional Testing PASS
ci/iol-intel-Performance success Performance Testing PASS
ci/iol-intel-Functional success Functional Testing PASS
ci/Intel-compilation success Compilation OK
ci/iol-mellanox-Performance success Performance Testing PASS
ci/iol-aarch64-compile-testing success Testing PASS
ci/intel-Testing success Testing PASS
ci/iol-x86_64-compile-testing success Testing PASS
ci/iol-x86_64-unit-testing success Testing PASS
ci/iol-aarch64-unit-testing success Testing PASS

Commit Message

Ajit Khaparde Aug. 25, 2021, 1:29 a.m. UTC
  During port stop/start sequence the Thor FW is returning an error.
This is because we are deriving incorrect active Rx ring and using
that wrong information in the bnxt_vnic_rss_cfg HWRM command.

Fix it by using the rx_queue_state from eth_dev.

Fixes: 0105ea1296c91 ("net/bnxt: support runtime queue setup")
Cc: stable@dpdk.org

Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
---
 drivers/net/bnxt/bnxt_hwrm.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
  

Comments

Ajit Khaparde Aug. 25, 2021, 3:50 a.m. UTC | #1
On Tue, Aug 24, 2021 at 6:29 PM Ajit Khaparde
<ajit.khaparde@broadcom.com> wrote:
>
> During port stop/start sequence the Thor FW is returning an error.
> This is because we are deriving incorrect active Rx ring and using
> that wrong information in the bnxt_vnic_rss_cfg HWRM command.
>
> Fix it by using the rx_queue_state from eth_dev.
>
> Fixes: 0105ea1296c91 ("net/bnxt: support runtime queue setup")
> Cc: stable@dpdk.org
>
> Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
> Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
Patch applied to dpdk-next-net-brcm.

> ---
>  drivers/net/bnxt/bnxt_hwrm.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c
> index eb9de45cb9..f29d574235 100644
> --- a/drivers/net/bnxt/bnxt_hwrm.c
> +++ b/drivers/net/bnxt/bnxt_hwrm.c
> @@ -5078,6 +5078,7 @@ static int
>  bnxt_vnic_rss_configure_p5(struct bnxt *bp, struct bnxt_vnic_info *vnic)
>  {
>         struct hwrm_vnic_rss_cfg_output *resp = bp->hwrm_cmd_resp_addr;
> +       uint8_t *rxq_state = bp->eth_dev->data->rx_queue_state;
>         struct hwrm_vnic_rss_cfg_input req = {.req_type = 0 };
>         struct bnxt_rx_queue **rxqs = bp->rx_queues;
>         uint16_t *ring_tbl = vnic->rss_table;
> @@ -5111,7 +5112,7 @@ bnxt_vnic_rss_configure_p5(struct bnxt *bp, struct bnxt_vnic_info *vnic)
>
>                         /* Find next active ring. */
>                         for (cnt = 0; cnt < max_rings; cnt++) {
> -                               if (rxqs[k]->rx_started)
> +                               if (rxq_state[k] != RTE_ETH_QUEUE_STATE_STOPPED)
>                                         break;
>                                 if (++k == max_rings)
>                                         k = 0;
> --
> 2.21.1 (Apple Git-122.3)
>
  

Patch

diff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c
index eb9de45cb9..f29d574235 100644
--- a/drivers/net/bnxt/bnxt_hwrm.c
+++ b/drivers/net/bnxt/bnxt_hwrm.c
@@ -5078,6 +5078,7 @@  static int
 bnxt_vnic_rss_configure_p5(struct bnxt *bp, struct bnxt_vnic_info *vnic)
 {
 	struct hwrm_vnic_rss_cfg_output *resp = bp->hwrm_cmd_resp_addr;
+	uint8_t *rxq_state = bp->eth_dev->data->rx_queue_state;
 	struct hwrm_vnic_rss_cfg_input req = {.req_type = 0 };
 	struct bnxt_rx_queue **rxqs = bp->rx_queues;
 	uint16_t *ring_tbl = vnic->rss_table;
@@ -5111,7 +5112,7 @@  bnxt_vnic_rss_configure_p5(struct bnxt *bp, struct bnxt_vnic_info *vnic)
 
 			/* Find next active ring. */
 			for (cnt = 0; cnt < max_rings; cnt++) {
-				if (rxqs[k]->rx_started)
+				if (rxq_state[k] != RTE_ETH_QUEUE_STATE_STOPPED)
 					break;
 				if (++k == max_rings)
 					k = 0;