Reviewed-by: Raphael Norwitz <raphael.s.norwitz@gmail.com>
On Wed, Aug 13, 2025 at 12:52 PM Vladimir Sementsov-Ogievskiy
<vsementsov@yandex-team.ru> wrote:
>
> This simplifies further refactoring and final introduction
> of vhost backend live migration.
>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
> ---
> hw/virtio/vhost.c | 47 +++++++++++++++++++++++------------------------
> 1 file changed, 23 insertions(+), 24 deletions(-)
>
> diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c
> index bc1821eadd..97113174b9 100644
> --- a/hw/virtio/vhost.c
> +++ b/hw/virtio/vhost.c
> @@ -1288,30 +1288,6 @@ int vhost_virtqueue_start(struct vhost_dev *dev,
> /* Queue might not be ready for start */
> return 0;
> }
> -
> - vq->num = state.num = virtio_queue_get_num(vdev, idx);
> - r = dev->vhost_ops->vhost_set_vring_num(dev, &state);
> - if (r) {
> - VHOST_OPS_DEBUG(r, "vhost_set_vring_num failed");
> - return r;
> - }
> -
> - state.num = virtio_queue_get_last_avail_idx(vdev, idx);
> - r = dev->vhost_ops->vhost_set_vring_base(dev, &state);
> - if (r) {
> - VHOST_OPS_DEBUG(r, "vhost_set_vring_base failed");
> - return r;
> - }
> -
> - if (vhost_needs_vring_endian(vdev)) {
> - r = vhost_virtqueue_set_vring_endian_legacy(dev,
> - virtio_is_big_endian(vdev),
> - vhost_vq_index);
> - if (r) {
> - return r;
> - }
> - }
> -
> vq->desc_size = l = virtio_queue_get_desc_size(vdev, idx);
> vq->desc_phys = a;
> vq->desc = vhost_memory_map(dev, a, l, false);
> @@ -1334,6 +1310,29 @@ int vhost_virtqueue_start(struct vhost_dev *dev,
> goto fail;
> }
>
> + vq->num = state.num = virtio_queue_get_num(vdev, idx);
> + r = dev->vhost_ops->vhost_set_vring_num(dev, &state);
> + if (r) {
> + VHOST_OPS_DEBUG(r, "vhost_set_vring_num failed");
> + goto fail;
> + }
> +
> + state.num = virtio_queue_get_last_avail_idx(vdev, idx);
> + r = dev->vhost_ops->vhost_set_vring_base(dev, &state);
> + if (r) {
> + VHOST_OPS_DEBUG(r, "vhost_set_vring_base failed");
> + goto fail;
> + }
> +
> + if (vhost_needs_vring_endian(vdev)) {
> + r = vhost_virtqueue_set_vring_endian_legacy(dev,
> + virtio_is_big_endian(vdev),
> + vhost_vq_index);
> + if (r) {
> + goto fail;
> + }
> + }
> +
> r = vhost_virtqueue_set_addr(dev, vq, vhost_vq_index, dev->log_enabled);
> if (r < 0) {
> goto fail;
> --
> 2.48.1
>
>