From: Andrey Drobyshev <[email protected]> The upcoming CPR support for vhost-vsock defers the full vhost_dev_init() to .post_load(). On an incoming CPR .realize() only sets up the backend, so we need a way to tell a fully initialized vhost device from a partially initialized one.
Add an explicit 'bool initialized' field, set once vhost_dev_init() succeeds, and cleared only in vhost_dev_cleanup() (by memset(0)). Also add a public vhost_dev_is_initialized() helper. Suggested-by: Stefano Garzarella <[email protected]> Signed-off-by: Andrey Drobyshev <[email protected]> Reviewed-by: Michael S. Tsirkin <[email protected]> Signed-off-by: Michael S. Tsirkin <[email protected]> Message-ID: <[email protected]> --- include/hw/virtio/vhost.h | 14 ++++++++++++++ hw/virtio/vhost.c | 2 ++ 2 files changed, 16 insertions(+) diff --git a/include/hw/virtio/vhost.h b/include/hw/virtio/vhost.h index 44e65968d9..7c4f032996 100644 --- a/include/hw/virtio/vhost.h +++ b/include/hw/virtio/vhost.h @@ -109,6 +109,8 @@ struct vhost_dev { uint64_t backend_cap; /* @started: is the vhost device started? */ bool started; + /* @initialized: has the full vhost_dev_init() completed? */ + bool initialized; bool log_enabled; uint64_t log_size; Error *migration_blocker; @@ -236,6 +238,18 @@ static inline bool vhost_dev_is_started(struct vhost_dev *hdev) return hdev->started; } +/** + * vhost_dev_is_initialized() - report init status of vhost device + * @hdev: common vhost_dev structure + * + * Return true if the full vhost_dev_init() has completed successfully + * (and vhost_dev_cleanup() has not run since). + */ +static inline bool vhost_dev_is_initialized(struct vhost_dev *hdev) +{ + return hdev->initialized; +} + static inline int vhost_dev_set_vring_enable(struct vhost_dev *hdev, int enable) { if (!hdev->vhost_ops->vhost_set_vring_enable) { diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c index ea17bf0108..a81cd94f90 100644 --- a/hw/virtio/vhost.c +++ b/hw/virtio/vhost.c @@ -1821,6 +1821,8 @@ int vhost_dev_init(struct vhost_dev *hdev, void *opaque, goto fail; } + hdev->initialized = true; + trace_vhost_dev_init_out(hdev); return 0; -- MST
