On Mon, Jun 17, 2024 at 5:09 PM Dragos Tatulea <dtatulea@xxxxxxxxxx> wrote: > > There are a few more places modifying the VQ to Ready directly. Let's > consolidate them into resume_vq(). > > The redundant warnings for resume_vq() errors can also be dropped. > > There is one special case that needs to be handled for virtio-vdpa: > the initialized flag must be set to true earlier in setup_vq() so that > resume_vq() doesn't return early. > > Signed-off-by: Dragos Tatulea <dtatulea@xxxxxxxxxx> > Reviewed-by: Cosmin Ratiu <cratiu@xxxxxxxxxx> Acked-by: Eugenio Pérez <eperezma@xxxxxxxxxx> > --- > drivers/vdpa/mlx5/net/mlx5_vnet.c | 18 ++++++------------ > 1 file changed, 6 insertions(+), 12 deletions(-) > > diff --git a/drivers/vdpa/mlx5/net/mlx5_vnet.c b/drivers/vdpa/mlx5/net/mlx5_vnet.c > index e3a82c43b44e..f5d5b25cdb01 100644 > --- a/drivers/vdpa/mlx5/net/mlx5_vnet.c > +++ b/drivers/vdpa/mlx5/net/mlx5_vnet.c > @@ -160,6 +160,7 @@ static void free_fixed_resources(struct mlx5_vdpa_net *ndev); > static void init_mvqs(struct mlx5_vdpa_net *ndev); > static int setup_vq_resources(struct mlx5_vdpa_net *ndev, bool filled); > static void teardown_vq_resources(struct mlx5_vdpa_net *ndev); > +static int resume_vq(struct mlx5_vdpa_net *ndev, struct mlx5_vdpa_virtqueue *mvq); > > static bool mlx5_vdpa_debug; > > @@ -1500,16 +1501,14 @@ static int setup_vq(struct mlx5_vdpa_net *ndev, > if (err) > goto err_vq; > > + mvq->initialized = true; > + > if (mvq->ready) { > - err = modify_virtqueue_state(ndev, mvq, MLX5_VIRTIO_NET_Q_OBJECT_STATE_RDY); > - if (err) { > - mlx5_vdpa_warn(&ndev->mvdev, "failed to modify to ready vq idx %d(%d)\n", > - idx, err); > + err = resume_vq(ndev, mvq); > + if (err) > goto err_modify; > - } > } > > - mvq->initialized = true; > return 0; > > err_modify: > @@ -2422,7 +2421,6 @@ static void mlx5_vdpa_set_vq_ready(struct vdpa_device *vdev, u16 idx, bool ready > struct mlx5_vdpa_dev *mvdev = to_mvdev(vdev); > struct mlx5_vdpa_net *ndev = to_mlx5_vdpa_ndev(mvdev); > struct mlx5_vdpa_virtqueue *mvq; > - int err; > > if (!mvdev->actual_features) > return; > @@ -2439,14 +2437,10 @@ static void mlx5_vdpa_set_vq_ready(struct vdpa_device *vdev, u16 idx, bool ready > if (!ready) { > suspend_vq(ndev, mvq); > } else { > - err = modify_virtqueue_state(ndev, mvq, MLX5_VIRTIO_NET_Q_OBJECT_STATE_RDY); > - if (err) { > - mlx5_vdpa_warn(mvdev, "modify VQ %d to ready failed (%d)\n", idx, err); > + if (resume_vq(ndev, mvq)) > ready = false; > - } > } > > - > mvq->ready = ready; > } > > > -- > 2.45.1 >