[PATCH v2 02/25] vhost: reorder logic in vhost_dev_init()

Vladimir Sementsov-Ogievskiy posted 25 patches 4 weeks, 1 day ago
[PATCH v2 02/25] vhost: reorder logic in vhost_dev_init()
Posted by Vladimir Sementsov-Ogievskiy 4 weeks, 1 day ago
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 <vsementsov@yandex-team.ru>
---
 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
Re: [PATCH v2 02/25] vhost: reorder logic in vhost_dev_init()
Posted by Raphael Norwitz 3 weeks, 3 days ago
Reviewed-by: Raphael Norwitz <raphael.s.norwitz@gmail.com>


On Thu, Oct 16, 2025 at 7:47 AM Vladimir Sementsov-Ogievskiy
<vsementsov@yandex-team.ru> 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 <vsementsov@yandex-team.ru>
> ---
>  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
>
>