Re: [PATCH v5 0/6] vhost-user-blk: add compatibility with older qemu versions
"Michael S. Tsirkin" <[email protected]> Wed, 29 Jul 2026 05:14:04 -0400
| Newsgroups | dev.linux.lists.virtio-fs,org.nongnu.qemu-devel |
|---|---|
| Message-ID | <[email protected]> |
On Tue, Jul 28, 2026 at 03:08:35PM +0500, Alexandr Moshkov wrote: > v4 -> v5: > - introduce protocol feature VHOST_USER_PROTOCOL_F_GET_VRING_BASE_SKIP_DRAIN > to guard the new message, instead of reusing the existing > VHOST_USER_PROTOCOL_F_GET_VRING_BASE_INLIFGHT. Update docs. > - improved commit messages. > > v3 -> v4: > - add new protocol message GET_VRING_BASE_SKIP_DRAIN instead of parameter to GET_VRING_BASE message. This new message can be send instead of GET_VRING_BASE, allowing back-end to suspend inflight I/O immediately instead of waiting and completing them. > - rebase to newer master > > v2 -> v3: > - fix complile problems > - add assert check in do_vhost_virtio_stop > - make inflight-migration property mutable > > v1 -> v2: > - reorganize commits: make refactor commits first, then core semantic change > - add additional pre_save check for inflight migration possibility > > --- > > This is v5 of the series previously sent as > "[PATCH v4 0/6] vhost-user-blk: fix inflight migration compatibility". > > This series extends the vhost-user-blk inflight migration feature > introduced in QEMU 11.0 to address a runtime compatibility problem. > > Currently, the inflight migration behaviour in vhost-user-blk is > controlled by VHOST_USER_PROTOCOL_F_GET_VRING_BASE_INFLIGHT, which is > negotiated once at connection time. Once the feature is negotiated, the > back-end always uses suspend semantics on GET_VRING_BASE — there is no > way for the front-end to request normal drain behaviour on a per-call > basis without reconnecting. This makes it impossible to disable > inflight-migration at runtime, which is needed when, for example, > migrating a VM to an older QEMU version that does not support the > feature. This part, I do not understand. What exactly does "migrating" mean here? Live migration? An older QEMU will presumably either negotiate or fail to negotiate the bit. > To solve this, the series introduces a new protocol message > VHOST_USER_GET_VRING_BASE_SKIP_DRAIN (id=45) guarded by a new protocol > feature VHOST_USER_PROTOCOL_F_GET_VRING_BASE_SKIP_DRAIN. The message is > semantically identical to GET_VRING_BASE but explicitly instructs the > back-end to suspend in-flight I/O immediately rather than draining it. > This gives the front-end explicit per-call control: GET_VRING_BASE for > normal operation, GET_VRING_BASE_SKIP_DRAIN during live migration. > > In vhost-user-blk, GET_VRING_BASE_SKIP_DRAIN is sent only when > inflight-migration is enabled and the device is stopping due to live > migration (RUN_STATE_FINISH_MIGRATE). The inflight-migration property > is also made mutable so it can be toggled via qom-set at runtime without > reconnecting to the back-end. > > Alexandr Moshkov (6): > vhost-user: add skip_drain param to do_vhost_virtqueue_stop > vhost-user: add GET_VRING_BASE_SKIP_DRAIN message > vhost-user: use skip_drain with GET_VRING_BASE_SKIP_DRAIN message > vhost-user-blk: make inflight-migration prop mutable > vhost-user-blk: move inflight_needed higher > vhost-user-blk: use GET_VRING_BASE_SKIP_DRAIN during inflight > migration > > backends/cryptodev-vhost.c | 2 +- > backends/vhost-user.c | 2 +- > docs/interop/vhost-user.rst | 88 +++++++++++++++++++------------ > hw/block/vhost-user-blk.c | 43 ++++++++++++--- > hw/net/vhost_net.c | 9 ++-- > hw/scsi/vhost-scsi-common.c | 2 +- > hw/virtio/vdpa-dev.c | 2 +- > hw/virtio/vhost-user-base.c | 2 +- > hw/virtio/vhost-user-fs.c | 2 +- > hw/virtio/vhost-user-scmi.c | 2 +- > hw/virtio/vhost-user.c | 47 ++++++++++++++--- > hw/virtio/vhost-vsock-common.c | 2 +- > hw/virtio/vhost.c | 34 ++++++++---- > include/hw/virtio/vhost-backend.h | 1 + > include/hw/virtio/vhost-user.h | 2 +- > include/hw/virtio/vhost.h | 7 ++- > 16 files changed, 172 insertions(+), 75 deletions(-) > > -- > 2.34.1