vdpa/mlx5: workaround queue stop with traffic

Message ID 20211122131235.3270961-1-matan@nvidia.com (mailing list archive)
State Accepted, archived
Delegated to: Maxime Coquelin
Headers
Series vdpa/mlx5: workaround queue stop with traffic |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/github-robot: build success github build: passed
ci/iol-mellanox-Performance success Performance Testing PASS
ci/iol-broadcom-Functional success Functional Testing PASS
ci/iol-broadcom-Performance success Performance Testing PASS
ci/iol-intel-Functional fail Functional Testing issues
ci/iol-intel-Performance success Performance Testing PASS
ci/iol-x86_64-unit-testing success Testing PASS
ci/iol-aarch64-unit-testing success Testing PASS
ci/iol-aarch64-compile-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

Matan Azrad Nov. 22, 2021, 1:12 p.m. UTC
  When the event thread polls traffic and a virtq is stopping, the FW loses
synchronization in the virtq indexes.

It causes LM failure on synchronization between the HOST indexes to
the GUEST indexes.

Unset the event thread before the queue stop in the LM process.

Fixes: 31b9c29c86af ("vdpa/mlx5: support close and config operations")
Cc: stable@dpdk.org

Signed-off-by: Matan Azrad <matan@nvidia.com>
Acked-by: Xueming Li <xuemingl@nvidia.com>
---
 drivers/vdpa/mlx5/mlx5_vdpa.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
  

Comments

Maxime Coquelin Jan. 26, 2022, 1:20 p.m. UTC | #1
On 11/22/21 14:12, Matan Azrad wrote:
> When the event thread polls traffic and a virtq is stopping, the FW loses
> synchronization in the virtq indexes.
> 
> It causes LM failure on synchronization between the HOST indexes to
> the GUEST indexes.
> 
> Unset the event thread before the queue stop in the LM process.
> 
> Fixes: 31b9c29c86af ("vdpa/mlx5: support close and config operations")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Matan Azrad <matan@nvidia.com>
> Acked-by: Xueming Li <xuemingl@nvidia.com>
> ---
>   drivers/vdpa/mlx5/mlx5_vdpa.c | 4 ++--
>   1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/vdpa/mlx5/mlx5_vdpa.c b/drivers/vdpa/mlx5/mlx5_vdpa.c
> index b9e84dd9bf..8dfaba791d 100644
> --- a/drivers/vdpa/mlx5/mlx5_vdpa.c
> +++ b/drivers/vdpa/mlx5/mlx5_vdpa.c
> @@ -250,10 +250,10 @@ mlx5_vdpa_dev_close(int vid)
>   		DRV_LOG(ERR, "Invalid vDPA device: %s.", vdev->device->name);
>   		return -1;
>   	}
> -	if (priv->configured)
> -		ret |= mlx5_vdpa_lm_log(priv);
>   	mlx5_vdpa_err_event_unset(priv);
>   	mlx5_vdpa_cqe_event_unset(priv);
> +	if (priv->configured)
> +		ret |= mlx5_vdpa_lm_log(priv);
>   	mlx5_vdpa_steer_unset(priv);
>   	mlx5_vdpa_virtqs_release(priv);
>   	mlx5_vdpa_event_qp_global_release(priv);

Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>

Thanks,
Maxime
  
Chenbo Xia Jan. 27, 2022, 5:10 a.m. UTC | #2
> -----Original Message-----
> From: Matan Azrad <matan@nvidia.com>
> Sent: Monday, November 22, 2021 9:13 PM
> To: Maxime Coquelin <maxime.coquelin@redhat.com>
> Cc: dev@dpdk.org; stable@dpdk.org; Xueming Li <xuemingl@nvidia.com>
> Subject: [PATCH] vdpa/mlx5: workaround queue stop with traffic
> 
> When the event thread polls traffic and a virtq is stopping, the FW loses
> synchronization in the virtq indexes.
> 
> It causes LM failure on synchronization between the HOST indexes to
> the GUEST indexes.
> 
> Unset the event thread before the queue stop in the LM process.
> 
> Fixes: 31b9c29c86af ("vdpa/mlx5: support close and config operations")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Matan Azrad <matan@nvidia.com>
> Acked-by: Xueming Li <xuemingl@nvidia.com>
> ---
> --
> 2.25.1

Applied to next-virtio/main, thanks
  

Patch

diff --git a/drivers/vdpa/mlx5/mlx5_vdpa.c b/drivers/vdpa/mlx5/mlx5_vdpa.c
index b9e84dd9bf..8dfaba791d 100644
--- a/drivers/vdpa/mlx5/mlx5_vdpa.c
+++ b/drivers/vdpa/mlx5/mlx5_vdpa.c
@@ -250,10 +250,10 @@  mlx5_vdpa_dev_close(int vid)
 		DRV_LOG(ERR, "Invalid vDPA device: %s.", vdev->device->name);
 		return -1;
 	}
-	if (priv->configured)
-		ret |= mlx5_vdpa_lm_log(priv);
 	mlx5_vdpa_err_event_unset(priv);
 	mlx5_vdpa_cqe_event_unset(priv);
+	if (priv->configured)
+		ret |= mlx5_vdpa_lm_log(priv);
 	mlx5_vdpa_steer_unset(priv);
 	mlx5_vdpa_virtqs_release(priv);
 	mlx5_vdpa_event_qp_global_release(priv);