Reviewed-by: Raphael Norwitz <[email protected]>

On Thu, Oct 16, 2025 at 7:47 AM Vladimir Sementsov-Ogievskiy
<[email protected]> wrote:
>
> We are going to split vhost_dev_init() so that the first part will do
> early initialization of QEMU structures, but don't communicate with
> backend, and the second part will do backend communication. We need
> this for future support for backend-transfer migration support for
> vhost-user-blk (backend will not be available in the early
> initialization point).
>
> With this commit, we simply reorder the logic in vhost_dev_init()
> in accordance with idea of further split.
>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <[email protected]>
> ---
>  hw/virtio/vhost.c | 60 +++++++++++++++++++++++------------------------
>  1 file changed, 30 insertions(+), 30 deletions(-)
>
> diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c
> index 9fc6e7ba65..551d1687fc 100644
> --- a/hw/virtio/vhost.c
> +++ b/hw/virtio/vhost.c
> @@ -1637,26 +1637,6 @@ int vhost_dev_init(struct vhost_dev *hdev, void 
> *opaque,
>          goto fail;
>      }
>
> -    r = hdev->vhost_ops->vhost_set_owner(hdev);
> -    if (r < 0) {
> -        error_setg_errno(errp, -r, "vhost_set_owner failed");
> -        goto fail;
> -    }
> -
> -    r = vhost_dev_init_features(hdev);
> -    if (r < 0) {
> -        error_setg_errno(errp, -r, "vhost_init_features failed");
> -        goto fail;
> -    }
> -
> -    for (i = 0; i < hdev->nvqs; ++i, ++n_initialized_vqs) {
> -        r = vhost_virtqueue_init(hdev, hdev->vqs + i, hdev->vq_index + i);
> -        if (r < 0) {
> -            error_setg_errno(errp, -r, "Failed to initialize virtqueue %d", 
> i);
> -            goto fail;
> -        }
> -    }
> -
>      hdev->memory_listener = (MemoryListener) {
>          .name = "vhost",
>          .begin = vhost_begin,
> @@ -1677,6 +1657,36 @@ int vhost_dev_init(struct vhost_dev *hdev, void 
> *opaque,
>          .region_del = vhost_iommu_region_del,
>      };
>
> +    hdev->mem = g_malloc0(offsetof(struct vhost_memory, regions));
> +    hdev->n_mem_sections = 0;
> +    hdev->mem_sections = NULL;
> +    hdev->log = NULL;
> +    hdev->log_size = 0;
> +    hdev->log_enabled = false;
> +    hdev->started = false;
> +    memory_listener_register(&hdev->memory_listener, &address_space_memory);
> +    QLIST_INSERT_HEAD(&vhost_devices, hdev, entry);
> +
> +    r = hdev->vhost_ops->vhost_set_owner(hdev);
> +    if (r < 0) {
> +        error_setg_errno(errp, -r, "vhost_set_owner failed");
> +        goto fail;
> +    }
> +
> +    r = vhost_dev_init_features(hdev);
> +    if (r < 0) {
> +        error_setg_errno(errp, -r, "vhost_init_features failed");
> +        goto fail;
> +    }
> +
> +    for (i = 0; i < hdev->nvqs; ++i, ++n_initialized_vqs) {
> +        r = vhost_virtqueue_init(hdev, hdev->vqs + i, hdev->vq_index + i);
> +        if (r < 0) {
> +            error_setg_errno(errp, -r, "Failed to initialize virtqueue %d", 
> i);
> +            goto fail;
> +        }
> +    }
> +
>      if (hdev->migration_blocker == NULL) {
>          if (!vhost_dev_has_feature_ex(hdev, VHOST_F_LOG_ALL)) {
>              error_setg(&hdev->migration_blocker,
> @@ -1694,16 +1704,6 @@ int vhost_dev_init(struct vhost_dev *hdev, void 
> *opaque,
>          }
>      }
>
> -    hdev->mem = g_malloc0(offsetof(struct vhost_memory, regions));
> -    hdev->n_mem_sections = 0;
> -    hdev->mem_sections = NULL;
> -    hdev->log = NULL;
> -    hdev->log_size = 0;
> -    hdev->log_enabled = false;
> -    hdev->started = false;
> -    memory_listener_register(&hdev->memory_listener, &address_space_memory);
> -    QLIST_INSERT_HEAD(&vhost_devices, hdev, entry);
> -
>      if (!check_memslots(hdev, errp)) {
>          r = -EINVAL;
>          goto fail;
> --
> 2.48.1
>
>

Reply via email to