vdpa/mlx5: fix virtq cleaning

Message ID 1614595291-112120-1-git-send-email-matan@nvidia.com (mailing list archive)
State Accepted, archived
Delegated to: Maxime Coquelin
Headers
Series vdpa/mlx5: fix virtq cleaning |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK
ci/travis-robot fail travis build: failed
ci/iol-mellanox-Performance success Performance Testing PASS
ci/iol-mellanox-Functional success Functional Testing PASS
ci/iol-intel-Performance success Performance Testing PASS
ci/iol-testing success Testing PASS
ci/github-robot success github build: passed

Commit Message

Matan Azrad March 1, 2021, 10:41 a.m. UTC
The HW virtq object can be destroyed ether when the device is closed or
when the state of the virtq becomes disabled.

Some parameters of the virtq should continue to be managed when the
virtq state is changed but all of them must be initialized when the
device is closed.

Wrongly, the enable parameter stayed on when the device is closed what
might cause creation of invalid virtq in the next time a device is
assigned to the driver.

Clean all the virtqs memory when the device is closed.

Fixes: c47d6e83334e ("vdpa/mlx5: support queue update")
Cc: stable@dpdk.org

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

Comments

Maxime Coquelin March 24, 2021, 10:38 a.m. UTC | #1
On 3/1/21 11:41 AM, Matan Azrad wrote:
> The HW virtq object can be destroyed ether when the device is closed or

s/ether/either/

> when the state of the virtq becomes disabled.
> 
> Some parameters of the virtq should continue to be managed when the
> virtq state is changed but all of them must be initialized when the
> device is closed.
> 
> Wrongly, the enable parameter stayed on when the device is closed what
> might cause creation of invalid virtq in the next time a device is
> assigned to the driver.
> 
> Clean all the virtqs memory when the device is closed.
> 
> Fixes: c47d6e83334e ("vdpa/mlx5: support queue update")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Matan Azrad <matan@nvidia.com>
> Acked-by: Xueming Li <xuemingl@nvidia.com>
> ---
>  drivers/vdpa/mlx5/mlx5_vdpa_virtq.c | 8 ++------
>  1 file changed, 2 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/vdpa/mlx5/mlx5_vdpa_virtq.c b/drivers/vdpa/mlx5/mlx5_vdpa_virtq.c
> index ef2642a..024c5c4 100644
> --- a/drivers/vdpa/mlx5/mlx5_vdpa_virtq.c
> +++ b/drivers/vdpa/mlx5/mlx5_vdpa_virtq.c
> @@ -103,13 +103,8 @@
>  	for (i = 0; i < priv->nr_virtqs; i++) {
>  		virtq = &priv->virtqs[i];
>  		mlx5_vdpa_virtq_unset(virtq);
> -		if (virtq->counters) {
> +		if (virtq->counters)
>  			claim_zero(mlx5_devx_cmd_destroy(virtq->counters));
> -			virtq->counters = NULL;
> -			memset(&virtq->reset, 0, sizeof(virtq->reset));
> -		}
> -		memset(virtq->err_time, 0, sizeof(virtq->err_time));
> -		virtq->n_retry = 0;
>  	}
>  	for (i = 0; i < priv->num_lag_ports; i++) {
>  		if (priv->tiss[i]) {
> @@ -126,6 +121,7 @@
>  		priv->virtq_db_addr = NULL;
>  	}
>  	priv->features = 0;
> +	memset(priv->virtqs, 0, sizeof(*virtq) * priv->nr_virtqs);
>  	priv->nr_virtqs = 0;
>  }
>  
> 

With typo fixed in commit message:

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

No need to resubmit, we can fix the typo while applying.

Thanks,
Maxime
  
Chenbo Xia March 31, 2021, 8:46 a.m. UTC | #2
> -----Original Message-----
> From: stable <stable-bounces@dpdk.org> On Behalf Of Matan Azrad
> Sent: Monday, March 1, 2021 6:42 PM
> To: dev@dpdk.org
> Cc: Maxime Coquelin <maxime.coquelin@redhat.com>; stable@dpdk.org
> Subject: [dpdk-stable] [PATCH] vdpa/mlx5: fix virtq cleaning
> 
> The HW virtq object can be destroyed ether when the device is closed or
> when the state of the virtq becomes disabled.
> 
> Some parameters of the virtq should continue to be managed when the
> virtq state is changed but all of them must be initialized when the
> device is closed.
> 
> Wrongly, the enable parameter stayed on when the device is closed what
> might cause creation of invalid virtq in the next time a device is
> assigned to the driver.
> 
> Clean all the virtqs memory when the device is closed.
> 
> Fixes: c47d6e83334e ("vdpa/mlx5: support queue update")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Matan Azrad <matan@nvidia.com>
> Acked-by: Xueming Li <xuemingl@nvidia.com>
> ---
> 1.8.3.1

With commit log fixed, patch applied to next-virtio/main. Thanks!
  

Patch

diff --git a/drivers/vdpa/mlx5/mlx5_vdpa_virtq.c b/drivers/vdpa/mlx5/mlx5_vdpa_virtq.c
index ef2642a..024c5c4 100644
--- a/drivers/vdpa/mlx5/mlx5_vdpa_virtq.c
+++ b/drivers/vdpa/mlx5/mlx5_vdpa_virtq.c
@@ -103,13 +103,8 @@ 
 	for (i = 0; i < priv->nr_virtqs; i++) {
 		virtq = &priv->virtqs[i];
 		mlx5_vdpa_virtq_unset(virtq);
-		if (virtq->counters) {
+		if (virtq->counters)
 			claim_zero(mlx5_devx_cmd_destroy(virtq->counters));
-			virtq->counters = NULL;
-			memset(&virtq->reset, 0, sizeof(virtq->reset));
-		}
-		memset(virtq->err_time, 0, sizeof(virtq->err_time));
-		virtq->n_retry = 0;
 	}
 	for (i = 0; i < priv->num_lag_ports; i++) {
 		if (priv->tiss[i]) {
@@ -126,6 +121,7 @@ 
 		priv->virtq_db_addr = NULL;
 	}
 	priv->features = 0;
+	memset(priv->virtqs, 0, sizeof(*virtq) * priv->nr_virtqs);
 	priv->nr_virtqs = 0;
 }