vdpa/mlx5: workaround queue stop with traffic
authorMatan Azrad <matan@nvidia.com>
Mon, 22 Nov 2021 13:12:35 +0000 (15:12 +0200)
committerChenbo Xia <chenbo.xia@intel.com>
Thu, 27 Jan 2022 04:44:49 +0000 (05:44 +0100)
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>
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
drivers/vdpa/mlx5/mlx5_vdpa.c

index b9e84dd..8dfaba7 100644 (file)
@@ -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);