Jason Wang
2021-Jun-03 07:00 UTC
[PATCH] vdpa/mlx5: Clear vq ready indication upon device reset
? 2021/6/2 ??4:59, Eli Cohen ??:> 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 at nvidia.com>Acked-by: Jason Wang <jasowang at redhat.com>> --- > drivers/vdpa/mlx5/net/mlx5_vnet.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/drivers/vdpa/mlx5/net/mlx5_vnet.c b/drivers/vdpa/mlx5/net/mlx5_vnet.c > index 02a05492204c..e8bc0842b44c 100644 > --- a/drivers/vdpa/mlx5/net/mlx5_vnet.c > +++ b/drivers/vdpa/mlx5/net/mlx5_vnet.c > @@ -862,6 +862,7 @@ static void destroy_virtqueue(struct mlx5_vdpa_net *ndev, struct mlx5_vdpa_virtq > return; > } > umems_destroy(ndev, mvq); > + mvq->ready = false; > } > > static u32 get_rqpn(struct mlx5_vdpa_virtqueue *mvq, bool fw)
Jason Wang
2021-Jun-03 07:06 UTC
[PATCH] vdpa/mlx5: Clear vq ready indication upon device reset
? 2021/6/3 ??3:00, Jason Wang ??:> > ? 2021/6/2 ??4:59, Eli Cohen ??: >> 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 at nvidia.com> > > > Acked-by: Jason Wang <jasowang at redhat.com>A second thought. destroy_virtqueue() could be called many places. One of them is the mlx5_vdpa_change_map(), if this is case, this looks wrong. It looks to me it's simpler to do this in clear_virtqueues() which can only be called during reset. Thanks> > >> --- >> ? drivers/vdpa/mlx5/net/mlx5_vnet.c | 1 + >> ? 1 file changed, 1 insertion(+) >> >> diff --git a/drivers/vdpa/mlx5/net/mlx5_vnet.c >> b/drivers/vdpa/mlx5/net/mlx5_vnet.c >> index 02a05492204c..e8bc0842b44c 100644 >> --- a/drivers/vdpa/mlx5/net/mlx5_vnet.c >> +++ b/drivers/vdpa/mlx5/net/mlx5_vnet.c >> @@ -862,6 +862,7 @@ static void destroy_virtqueue(struct >> mlx5_vdpa_net *ndev, struct mlx5_vdpa_virtq >> ????????? return; >> ????? } >> ????? umems_destroy(ndev, mvq); >> +??? mvq->ready = false; >> ? } >> ? ? static u32 get_rqpn(struct mlx5_vdpa_virtqueue *mvq, bool fw)