net/mlx5: fix Tx recovery

Message ID 20220518094232.24197-1-rzidane@nvidia.com (mailing list archive)
State Accepted, archived
Delegated to: Raslan Darawsheh
Headers
Series net/mlx5: fix Tx recovery |

Checks

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

Commit Message

Raja Zidane May 18, 2022, 9:42 a.m. UTC
  When an error occurs in Tx, and it is moved to ERROR state, it
is not recoverable, during recovery it's state cannot be modified
to INIT. to modify state from RESET to INIT, the port must be
passed in modify attributes, and in case of ERROR to READY
modification path, it was not provided.

Provide port number when changing state from RESET to INIT.

Fixes: 3a87b964edd3 ("net/mlx5: create Tx queues with DevX")
Cc: stable@dpdk.org

Signed-off-by: Raja Zidane <rzidane@nvidia.com>
Acked-by: Matan Azrad <matan@nvidia.com>
Acked-by: Dmitry Kozlyuk <dkozlyuk@nvidia.com>
---
 drivers/net/mlx5/linux/mlx5_verbs.c | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)
  

Comments

Raslan Darawsheh May 23, 2022, 11:32 a.m. UTC | #1
Hi,

> -----Original Message-----
> From: Raja Zidane <rzidane@nvidia.com>
> Sent: Wednesday, May 18, 2022 12:43 PM
> To: dev@dpdk.org
> Cc: Matan Azrad <matan@nvidia.com>; stable@dpdk.org; Dmitry Kozlyuk
> <dkozlyuk@nvidia.com>
> Subject: [PATCH] net/mlx5: fix Tx recovery
> 
> When an error occurs in Tx, and it is moved to ERROR state, it is not
> recoverable, during recovery it's state cannot be modified to INIT. to modify
> state from RESET to INIT, the port must be passed in modify attributes, and in
> case of ERROR to READY modification path, it was not provided.
> 
> Provide port number when changing state from RESET to INIT.
> 
> Fixes: 3a87b964edd3 ("net/mlx5: create Tx queues with DevX")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Raja Zidane <rzidane@nvidia.com>
> Acked-by: Matan Azrad <matan@nvidia.com>
> Acked-by: Dmitry Kozlyuk <dkozlyuk@nvidia.com>

Patch applied to next-net-mlx,

Kindest regards,
Raslan Darawsheh
  

Patch

diff --git a/drivers/net/mlx5/linux/mlx5_verbs.c b/drivers/net/mlx5/linux/mlx5_verbs.c
index b6ba21c216..67a7bec22b 100644
--- a/drivers/net/mlx5/linux/mlx5_verbs.c
+++ b/drivers/net/mlx5/linux/mlx5_verbs.c
@@ -94,7 +94,6 @@  mlx5_ibv_modify_qp(struct mlx5_txq_obj *obj, enum mlx5_txq_modify_type type,
 		.qp_state = IBV_QPS_RESET,
 		.port_num = dev_port,
 	};
-	int attr_mask = (IBV_QP_STATE | IBV_QP_PORT);
 	int ret;
 
 	if (type != MLX5_TXQ_MOD_RST2RDY) {
@@ -108,10 +107,8 @@  mlx5_ibv_modify_qp(struct mlx5_txq_obj *obj, enum mlx5_txq_modify_type type,
 		if (type == MLX5_TXQ_MOD_RDY2RST)
 			return 0;
 	}
-	if (type == MLX5_TXQ_MOD_ERR2RDY)
-		attr_mask = IBV_QP_STATE;
 	mod.qp_state = IBV_QPS_INIT;
-	ret = mlx5_glue->modify_qp(obj->qp, &mod, attr_mask);
+	ret = mlx5_glue->modify_qp(obj->qp, &mod, IBV_QP_STATE | IBV_QP_PORT);
 	if (ret) {
 		DRV_LOG(ERR, "Cannot change Tx QP state to INIT %s",
 			strerror(errno));