mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 12:11:40 +00:00
vdpa/mlx5: Use suspend/resume during VQP change
Resume a VQ if it is already created when the number of VQ pairs increases. This is done in preparation for VQ pre-creation which is coming in a later patch. It is necessary because calling setup_vq() on an already created VQ will return early and will not enable the queue. For symmetry, suspend a VQ instead of tearing it down when the number of VQ pairs decreases. But only if the resume operation is supported. Reviewed-by: Cosmin Ratiu <cratiu@nvidia.com> Acked-by: Eugenio Pérez <eperezma@redhat.com> Signed-off-by: Dragos Tatulea <dtatulea@nvidia.com> Message-Id: <20240626-stage-vdpa-vq-precreate-v2-20-560c491078df@nvidia.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
ac85cd904d
commit
3b3adb3bbf
@ -2130,14 +2130,22 @@ static int change_num_qps(struct mlx5_vdpa_dev *mvdev, int newqps)
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
for (i = ndev->cur_num_vqs - 1; i >= 2 * newqps; i--)
|
||||
teardown_vq(ndev, &ndev->vqs[i]);
|
||||
for (i = ndev->cur_num_vqs - 1; i >= 2 * newqps; i--) {
|
||||
struct mlx5_vdpa_virtqueue *mvq = &ndev->vqs[i];
|
||||
|
||||
if (is_resumable(ndev))
|
||||
suspend_vq(ndev, mvq);
|
||||
else
|
||||
teardown_vq(ndev, mvq);
|
||||
}
|
||||
|
||||
ndev->cur_num_vqs = 2 * newqps;
|
||||
} else {
|
||||
ndev->cur_num_vqs = 2 * newqps;
|
||||
for (i = cur_qps * 2; i < 2 * newqps; i++) {
|
||||
err = setup_vq(ndev, &ndev->vqs[i], true);
|
||||
struct mlx5_vdpa_virtqueue *mvq = &ndev->vqs[i];
|
||||
|
||||
err = mvq->initialized ? resume_vq(ndev, mvq) : setup_vq(ndev, mvq, true);
|
||||
if (err)
|
||||
goto clean_added;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user