Acked-by: Raphael Norwitz <raphael.s.norwitz@gmail.com>
On Thu, Oct 16, 2025 at 7:49 AM Vladimir Sementsov-Ogievskiy
<vsementsov@yandex-team.ru> wrote:
>
> Prepare for future backend-transfer migration of vhost-user-blk.
> Among other things we'll need to transfer the inflight region, let's
> prepare for this.
>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
> ---
> hw/virtio/vhost.c | 26 ++++++++++++++++++++++++++
> include/hw/virtio/vhost.h | 5 +++++
> 2 files changed, 31 insertions(+)
>
> diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c
> index 3e5192ec23..63036f8214 100644
> --- a/hw/virtio/vhost.c
> +++ b/hw/virtio/vhost.c
> @@ -1975,6 +1975,32 @@ void vhost_get_features_ex(struct vhost_dev *hdev,
> }
> }
>
> +static int vhost_inflight_backend_transfer_post_load(void *opaque,
> + int version_id)
> +{
> + struct vhost_inflight *inflight = opaque;
> +
> + inflight->addr = mmap(0, inflight->size, PROT_READ | PROT_WRITE,
> + MAP_SHARED, inflight->fd, inflight->offset);
> + if (inflight->addr == MAP_FAILED) {
> + return -EINVAL;
> + }
> +
> + return 0;
> +}
> +
> +const VMStateDescription vmstate_backend_transfer_vhost_inflight = {
> + .name = "vhost-inflight",
> + .post_load = vhost_inflight_backend_transfer_post_load,
> + .fields = (const VMStateField[]) {
> + VMSTATE_FD(fd, struct vhost_inflight),
> + VMSTATE_UINT64(size, struct vhost_inflight),
> + VMSTATE_UINT64(offset, struct vhost_inflight),
> + VMSTATE_UINT16(queue_size, struct vhost_inflight),
> + VMSTATE_END_OF_LIST()
> + }
> +};
> +
> void vhost_ack_features_ex(struct vhost_dev *hdev, const int *feature_bits,
> const uint64_t *features)
> {
> diff --git a/include/hw/virtio/vhost.h b/include/hw/virtio/vhost.h
> index af46d4b5f2..94a0c75fc8 100644
> --- a/include/hw/virtio/vhost.h
> +++ b/include/hw/virtio/vhost.h
> @@ -587,4 +587,9 @@ static inline int vhost_load_backend_state(struct vhost_dev *dev, QEMUFile *f,
> }
> #endif
>
> +extern const VMStateDescription vmstate_backend_transfer_vhost_inflight;
> +#define VMSTATE_BACKEND_TRANSFER_VHOST_INFLIGHT(_field, _state) \
> + VMSTATE_STRUCT_POINTER(_field, _state, vmstate_inflight, \
> + struct vhost_inflight)
> +
> #endif
> --
> 2.48.1
>
>