| From ec1edcd9e59f877ed2e4c5e8d6615c91ff76b287 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Sun, 6 Jun 2021 08:31:28 +0300 |
| Subject: vdpa/mlx5: Clear vq ready indication upon device reset |
| |
| From: Eli Cohen <elic@nvidia.com> |
| |
| [ Upstream commit e3aadf2e1614174dc81d52cbb9dabb77913b11c6 ] |
| |
| After device reset, the virtqueues are not ready so clear the ready |
| field. |
| |
| Failing to do so can result in virtio_vdpa failing to load if the device |
| was previously used by vhost_vdpa and the old values are ready. |
| virtio_vdpa expects to find VQs in "not ready" state. |
| |
| Fixes: 1a86b377aa21 ("vdpa/mlx5: Add VDPA driver for supported mlx5 devices") |
| Signed-off-by: Eli Cohen <elic@nvidia.com> |
| Link: https://lore.kernel.org/r/20210606053128.170399-1-elic@nvidia.com |
| Signed-off-by: Michael S. Tsirkin <mst@redhat.com> |
| Acked-by: Jason Wang <jasowang@redhat.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/vdpa/mlx5/net/mlx5_vnet.c | 9 +++++++++ |
| 1 file changed, 9 insertions(+) |
| |
| diff --git a/drivers/vdpa/mlx5/net/mlx5_vnet.c b/drivers/vdpa/mlx5/net/mlx5_vnet.c |
| index 85bcbbce1ef9..68fd117fd7a5 100644 |
| --- a/drivers/vdpa/mlx5/net/mlx5_vnet.c |
| +++ b/drivers/vdpa/mlx5/net/mlx5_vnet.c |
| @@ -1767,6 +1767,14 @@ out: |
| mutex_unlock(&ndev->reslock); |
| } |
| |
| +static void clear_vqs_ready(struct mlx5_vdpa_net *ndev) |
| +{ |
| + int i; |
| + |
| + for (i = 0; i < ndev->mvdev.max_vqs; i++) |
| + ndev->vqs[i].ready = false; |
| +} |
| + |
| static void mlx5_vdpa_set_status(struct vdpa_device *vdev, u8 status) |
| { |
| struct mlx5_vdpa_dev *mvdev = to_mvdev(vdev); |
| @@ -1777,6 +1785,7 @@ static void mlx5_vdpa_set_status(struct vdpa_device *vdev, u8 status) |
| if (!status) { |
| mlx5_vdpa_info(mvdev, "performing device reset\n"); |
| teardown_driver(ndev); |
| + clear_vqs_ready(ndev); |
| mlx5_vdpa_destroy_mr(&ndev->mvdev); |
| ndev->mvdev.status = 0; |
| ndev->mvdev.mlx_features = 0; |
| -- |
| 2.30.2 |
| |