From nobody Sun Jul 26 11:10:12 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=yandex-team.ru ARC-Seal: i=1; a=rsa-sha256; t=1782983569; cv=none; d=zohomail.com; s=zohoarc; b=PiocSUQfcm3SgTPvpNKeBraLqShQx8xswanr+05MoWIBU3FOdoELf3s51XG5rfGm/r5SYNzyxkVBt+Mus4OqRO0/k/+07uEScJ5jNqLYZfxCD7M1LYIdOP149cSBt44gG0nApoNhScIGiScQ1SZil+Qc6kCWb/iSQ4WAYMp3w3Q= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782983569; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=sGPkSM7/sBQ28Y0z9E0rw0TzxOCYF3XhngIDZ+Qv0qc=; b=NYkyj49mW//60Sqq6cwdHicjFB43T+8c/QgxlSwdrrt96wat9eSTEeOd+lF3VCaYZ1OLDRlnv1fdQD6+ArD9Iq41+SeKNaDWZV9FJj3trzHvbJzcV1zzYMCHAItwzmhqtE34tOXirdyKqmM8jKdEJfQoFqhDGL95wZcnO0gQ1AQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 178298356964765.47512888412746; Thu, 2 Jul 2026 02:12:49 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wfDRl-0000s7-4F; Thu, 02 Jul 2026 05:11:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wfDRi-0000r9-R8; Thu, 02 Jul 2026 05:10:58 -0400 Received: from forwardcorp1b.mail.yandex.net ([2a02:6b8:c02:900:1:45:d181:df01]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wfDRa-0000hK-M8; Thu, 02 Jul 2026 05:10:57 -0400 Received: from mail-nwsmtp-smtp-corp-main-34.sas.yp-c.yandex.net (mail-nwsmtp-smtp-corp-main-34.sas.yp-c.yandex.net [IPv6:2a02:6b8:c24:fa2:0:640:41ee:0]) by forwardcorp1b.mail.yandex.net (postfix) with ESMTPS id 7BA3880604; Thu, 02 Jul 2026 12:10:45 +0300 (MSK) Received: from dtalexundeer-nx.yandex-team.ru (unknown [2a02:6bf:8080:43d::1:15]) by mail-nwsmtp-smtp-corp-main-34.sas.yp-c.yandex.net (smtpcorp) with ESMTPSA id NAc7BT0aDa60-XZ7fFrmb; Thu, 02 Jul 2026 12:10:44 +0300 Precedence: bulk X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1782983444; bh=sGPkSM7/sBQ28Y0z9E0rw0TzxOCYF3XhngIDZ+Qv0qc=; h=Message-Id:Date:In-Reply-To:Cc:Subject:References:To:From; b=yLKa9G+SC/jgW9ZBNeqbSgnIeaFUpfEUpupoRvfioPPUmAjkbinaPxYCZbv+9zR94 Cp4hzDmKpqjN9ofo1MFrDR9993YiiH0655A8rruN+sSNlxSgDy61LnGXBrC6Poho5q kmbqXC5IvOtJzoW4CgJk4F/BaUDnGTp45SNc04HQ= Authentication-Results: mail-nwsmtp-smtp-corp-main-34.sas.yp-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Alexandr Moshkov To: qemu-devel@nongnu.org Cc: Jason Wang , Milan Zamazal , Hanna Reitz , Paolo Bonzini , Fam Zheng , zhenwei pi , Stefan Hajnoczi , "Gonglei (Arei)" , Stefano Garzarella , Kevin Wolf , virtio-fs@lists.linux.dev, Jason Wang , "yc-core@yandex-team.ru" , qemu-block@nongnu.org, Raphael Norwitz , Pierrick Bouvier , Pierrick Bouvier , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Michael S. Tsirkin" , Vladimir Sementsov-Ogievskiy , Alexandr Moshkov Subject: [PATCH v4 1/6] vhost-user: add skip_drain param to do_vhost_virtqueue_stop Date: Thu, 2 Jul 2026 14:10:18 +0500 Message-Id: <20260702091023.3306378-2-dtalexundeer@yandex-team.ru> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260702091023.3306378-1-dtalexundeer@yandex-team.ru> References: <20260702091023.3306378-1-dtalexundeer@yandex-team.ru> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2a02:6b8:c02:900:1:45:d181:df01; envelope-from=dtalexundeer@yandex-team.ru; helo=forwardcorp1b.mail.yandex.net X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @yandex-team.ru) X-ZM-MESSAGEID: 1782983572574158500 Content-Type: text/plain; charset="utf-8" Will be used in future commit for using new protocol message. Signed-off-by: Alexandr Moshkov --- backends/cryptodev-vhost.c | 2 +- backends/vhost-user.c | 2 +- hw/block/vhost-user-blk.c | 2 +- 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-vsock-common.c | 2 +- hw/virtio/vhost.c | 28 +++++++++++++++++++--------- include/hw/virtio/vhost.h | 7 +++++-- 12 files changed, 38 insertions(+), 24 deletions(-) diff --git a/backends/cryptodev-vhost.c b/backends/cryptodev-vhost.c index c6069f4e5b..f1ca6bcd4e 100644 --- a/backends/cryptodev-vhost.c +++ b/backends/cryptodev-vhost.c @@ -109,7 +109,7 @@ static void cryptodev_vhost_stop_one(CryptoDevBackendVhost *crypto, VirtIODevice *dev) { - vhost_dev_stop(&crypto->dev, dev, false); + vhost_dev_stop(&crypto->dev, dev, false, false); vhost_dev_disable_notifiers(&crypto->dev, dev); } =20 diff --git a/backends/vhost-user.c b/backends/vhost-user.c index 380d825023..0423c2d4ec 100644 --- a/backends/vhost-user.c +++ b/backends/vhost-user.c @@ -108,7 +108,7 @@ vhost_user_backend_stop(VhostUserBackend *b) return 0; } =20 - ret =3D vhost_dev_stop(&b->dev, b->vdev, true); + ret =3D vhost_dev_stop(&b->dev, b->vdev, true, false); =20 if (k->set_guest_notifiers && (err =3D k->set_guest_notifiers(qbus->parent, b->dev.nvqs, false))= < 0) { diff --git a/hw/block/vhost-user-blk.c b/hw/block/vhost-user-blk.c index b2e46eb3f9..e3b873af7c 100644 --- a/hw/block/vhost-user-blk.c +++ b/hw/block/vhost-user-blk.c @@ -232,7 +232,7 @@ static int vhost_user_blk_stop(VirtIODevice *vdev) qemu_force_shutdown_requested(); =20 ret =3D force_stop ? vhost_dev_force_stop(&s->dev, vdev, true) : - vhost_dev_stop(&s->dev, vdev, true); + vhost_dev_stop(&s->dev, vdev, true, false); =20 err =3D k->set_guest_notifiers(qbus->parent, s->dev.nvqs, false); if (err < 0) { diff --git a/hw/net/vhost_net.c b/hw/net/vhost_net.c index 323d117735..6e05c995f1 100644 --- a/hw/net/vhost_net.c +++ b/hw/net/vhost_net.c @@ -384,7 +384,7 @@ fail: if (net->nc->info->poll) { net->nc->info->poll(net->nc, true); } - vhost_dev_stop(&net->dev, dev, false); + vhost_dev_stop(&net->dev, dev, false, false); fail_start: return r; } @@ -403,7 +403,7 @@ static void vhost_net_stop_one(struct vhost_net *net, if (net->nc->info->poll) { net->nc->info->poll(net->nc, true); } - vhost_dev_stop(&net->dev, dev, false); + vhost_dev_stop(&net->dev, dev, false, false); if (net->nc->info->stop) { net->nc->info->stop(net->nc); } @@ -636,7 +636,8 @@ void vhost_net_virtqueue_reset(VirtIODevice *vdev, NetC= lientState *nc, vhost_virtqueue_stop(&net->dev, vdev, net->dev.vqs + idx, - net->dev.vq_index + idx); + net->dev.vq_index + idx, + false); } =20 int vhost_net_virtqueue_restart(VirtIODevice *vdev, NetClientState *nc, @@ -686,7 +687,7 @@ err_start: assert(ret >=3D 0); } =20 - vhost_dev_stop(&net->dev, vdev, false); + vhost_dev_stop(&net->dev, vdev, false, false); =20 return r; } diff --git a/hw/scsi/vhost-scsi-common.c b/hw/scsi/vhost-scsi-common.c index e19800a0bc..e546a6dc75 100644 --- a/hw/scsi/vhost-scsi-common.c +++ b/hw/scsi/vhost-scsi-common.c @@ -108,7 +108,7 @@ int vhost_scsi_common_stop(VHostSCSICommon *vsc) VirtioBusClass *k =3D VIRTIO_BUS_GET_CLASS(qbus); int ret =3D 0; =20 - ret =3D vhost_dev_stop(&vsc->dev, vdev, true); + ret =3D vhost_dev_stop(&vsc->dev, vdev, true, false); =20 if (k->set_guest_notifiers) { int r =3D k->set_guest_notifiers(qbus->parent, vsc->dev.nvqs, fals= e); diff --git a/hw/virtio/vdpa-dev.c b/hw/virtio/vdpa-dev.c index 94188d37bb..b86d0b664a 100644 --- a/hw/virtio/vdpa-dev.c +++ b/hw/virtio/vdpa-dev.c @@ -300,7 +300,7 @@ static void vhost_vdpa_device_stop(VirtIODevice *vdev) return; } =20 - vhost_dev_stop(&s->dev, vdev, false); + vhost_dev_stop(&s->dev, vdev, false, false); =20 ret =3D k->set_guest_notifiers(qbus->parent, s->dev.nvqs, false); if (ret < 0) { diff --git a/hw/virtio/vhost-user-base.c b/hw/virtio/vhost-user-base.c index 39b5e637fc..abeae1a064 100644 --- a/hw/virtio/vhost-user-base.c +++ b/hw/virtio/vhost-user-base.c @@ -78,7 +78,7 @@ static int vub_stop(VirtIODevice *vdev) return 0; } =20 - ret =3D vhost_dev_stop(&vub->vhost_dev, vdev, true); + ret =3D vhost_dev_stop(&vub->vhost_dev, vdev, true, false); =20 err =3D k->set_guest_notifiers(qbus->parent, vub->vhost_dev.nvqs, fals= e); if (err < 0) { diff --git a/hw/virtio/vhost-user-fs.c b/hw/virtio/vhost-user-fs.c index 209993918a..0d8842817a 100644 --- a/hw/virtio/vhost-user-fs.c +++ b/hw/virtio/vhost-user-fs.c @@ -111,7 +111,7 @@ static int vuf_stop(VirtIODevice *vdev) return 0; } =20 - ret =3D vhost_dev_stop(&fs->vhost_dev, vdev, true); + ret =3D vhost_dev_stop(&fs->vhost_dev, vdev, true, false); =20 err =3D k->set_guest_notifiers(qbus->parent, fs->vhost_dev.nvqs, false= ); if (err < 0) { diff --git a/hw/virtio/vhost-user-scmi.c b/hw/virtio/vhost-user-scmi.c index 9470f68c1f..9fa65d7d8b 100644 --- a/hw/virtio/vhost-user-scmi.c +++ b/hw/virtio/vhost-user-scmi.c @@ -101,7 +101,7 @@ static int vu_scmi_stop(VirtIODevice *vdev) return 0; } =20 - ret =3D vhost_dev_stop(vhost_dev, vdev, true); + ret =3D vhost_dev_stop(vhost_dev, vdev, true, false); =20 err =3D k->set_guest_notifiers(qbus->parent, vhost_dev->nvqs, false); if (err < 0) { diff --git a/hw/virtio/vhost-vsock-common.c b/hw/virtio/vhost-vsock-common.c index b79f4c9ce6..4ef037627b 100644 --- a/hw/virtio/vhost-vsock-common.c +++ b/hw/virtio/vhost-vsock-common.c @@ -106,7 +106,7 @@ int vhost_vsock_common_stop(VirtIODevice *vdev) return 0; } =20 - ret =3D vhost_dev_stop(&vvc->vhost_dev, vdev, true); + ret =3D vhost_dev_stop(&vvc->vhost_dev, vdev, true, false); =20 err =3D k->set_guest_notifiers(qbus->parent, vvc->vhost_dev.nvqs, fals= e); if (err < 0) { diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c index af41841b52..2a62550222 100644 --- a/hw/virtio/vhost.c +++ b/hw/virtio/vhost.c @@ -23,6 +23,7 @@ #include "qemu/log.h" #include "standard-headers/linux/vhost_types.h" #include "hw/virtio/virtio-bus.h" +#include "hw/virtio/vhost-user.h" #include "hw/mem/memory-device.h" #include "migration/blocker.h" #include "migration/qemu-file-types.h" @@ -1496,8 +1497,13 @@ fail: static int do_vhost_virtqueue_stop(struct vhost_dev *dev, struct VirtIODevice *vdev, struct vhost_virtqueue *vq, - unsigned idx, bool force) + unsigned idx, bool force, + bool skip_drain) { + if (skip_drain) { + assert(vhost_user_has_protocol_feature(dev, + VHOST_USER_PROTOCOL_F_GET_VRING_BASE_INFLIGHT)); + } int vhost_vq_index =3D dev->vhost_ops->vhost_get_vq_index(dev, idx); struct vhost_vring_state state =3D { .index =3D vhost_vq_index, @@ -1547,9 +1553,10 @@ static int do_vhost_virtqueue_stop(struct vhost_dev = *dev, int vhost_virtqueue_stop(struct vhost_dev *dev, struct VirtIODevice *vdev, struct vhost_virtqueue *vq, - unsigned idx) + unsigned idx, + bool skip_drain) { - return do_vhost_virtqueue_stop(dev, vdev, vq, idx, false); + return do_vhost_virtqueue_stop(dev, vdev, vq, idx, false, skip_drain); } =20 static int vhost_virtqueue_set_busyloop_timeout(struct vhost_dev *dev, @@ -2302,7 +2309,8 @@ fail_vq: vhost_virtqueue_stop(hdev, vdev, hdev->vqs + i, - hdev->vq_index + i); + hdev->vq_index + i, + false); } =20 fail_mem: @@ -2317,7 +2325,7 @@ fail_features: =20 /* Host notifiers must be enabled at this point. */ static int do_vhost_dev_stop(struct vhost_dev *hdev, VirtIODevice *vdev, - bool vrings, bool force) + bool vrings, bool force, bool skip_drain) { int i; int rc =3D 0; @@ -2344,7 +2352,8 @@ static int do_vhost_dev_stop(struct vhost_dev *hdev, = VirtIODevice *vdev, vdev, hdev->vqs + i, hdev->vq_index + i, - force); + force, + skip_drain); } if (hdev->vhost_ops->vhost_reset_status) { hdev->vhost_ops->vhost_reset_status(hdev); @@ -2366,15 +2375,16 @@ static int do_vhost_dev_stop(struct vhost_dev *hdev= , VirtIODevice *vdev, return rc; } =20 -int vhost_dev_stop(struct vhost_dev *hdev, VirtIODevice *vdev, bool vrings) +int vhost_dev_stop(struct vhost_dev *hdev, VirtIODevice *vdev, bool vrings, + bool skip_drain) { - return do_vhost_dev_stop(hdev, vdev, vrings, false); + return do_vhost_dev_stop(hdev, vdev, vrings, false, skip_drain); } =20 int vhost_dev_force_stop(struct vhost_dev *hdev, VirtIODevice *vdev, bool vrings) { - return do_vhost_dev_stop(hdev, vdev, vrings, true); + return do_vhost_dev_stop(hdev, vdev, vrings, true, false); } =20 int vhost_net_set_backend(struct vhost_dev *hdev, diff --git a/include/hw/virtio/vhost.h b/include/hw/virtio/vhost.h index 684bafcaad..33b88f95ea 100644 --- a/include/hw/virtio/vhost.h +++ b/include/hw/virtio/vhost.h @@ -228,6 +228,7 @@ int vhost_dev_start(struct vhost_dev *hdev, VirtIODevic= e *vdev, bool vrings); * @hdev: common vhost_dev structure * @vdev: the VirtIODevice structure * @vrings: true to have vrings disabled in this call + * @skip_drain: true to notice back-end to skip draining all in-flight req= uests * * Stop the vhost device. After the device is stopped the notifiers * can be disabled (@vhost_dev_disable_notifiers) and the device can @@ -235,7 +236,8 @@ int vhost_dev_start(struct vhost_dev *hdev, VirtIODevic= e *vdev, bool vrings); * * Return: 0 on success, !=3D 0 on error when stopping dev. */ -int vhost_dev_stop(struct vhost_dev *hdev, VirtIODevice *vdev, bool vrings= ); +int vhost_dev_stop(struct vhost_dev *hdev, VirtIODevice *vdev, bool vrings, + bool skip_drain); =20 /** * vhost_dev_force_stop() - force stop the vhost device @@ -393,7 +395,8 @@ int vhost_device_iotlb_miss(struct vhost_dev *dev, uint= 64_t iova, int write); int vhost_virtqueue_start(struct vhost_dev *dev, struct VirtIODevice *vdev, struct vhost_virtqueue *vq, unsigned idx); int vhost_virtqueue_stop(struct vhost_dev *dev, struct VirtIODevice *vdev, - struct vhost_virtqueue *vq, unsigned idx); + struct vhost_virtqueue *vq, unsigned idx, + bool skip_drain); =20 void vhost_dev_reset_inflight(struct vhost_inflight *inflight); void vhost_dev_free_inflight(struct vhost_inflight *inflight); --=20 2.34.1 From nobody Sun Jul 26 11:10:12 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=yandex-team.ru ARC-Seal: i=1; a=rsa-sha256; t=1782983531; cv=none; d=zohomail.com; s=zohoarc; b=NHmICQOT1fIAv4sDqxjr2Ij4peUZhTqumn79XlH23h0rcr4R+17MlC7fkBpaw0YgMgbEYL6wQOzWJQg+guH/C/QgMWbLlxJseC/GIlvcz2BBT9L0hs3EBN6Id8VQ4yPtEzTzkxAnvklq3TpZMZY4Fa9GqrvyPsqoEba5TYtl4Oc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782983531; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=lj0fFK5AhG9LHkzhPaiC8w4sWVpibJuTZ9SZRklkXqU=; b=LslOjZd3RQJP7QHZZn3JNF96TaGY3mpurGV1D2W48RF/FXVmb2Btn09Wc5duIJ+Lqg/4nvk3TqdSxOMiUUBWkjRN9ZHajoRghF0ozTMoi1NMLeQzIhHPIOn4P6IwL0s9i0VJmzZYHDbZWgsIsjc5FIa+Zjpo5i/HvTvi4hGsWhU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1782983529447932.7533543128415; Thu, 2 Jul 2026 02:12:09 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wfDRn-0000sc-7I; Thu, 02 Jul 2026 05:11:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wfDRi-0000r7-HX; Thu, 02 Jul 2026 05:10:58 -0400 Received: from forwardcorp1b.mail.yandex.net ([178.154.239.136]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wfDRe-0000iK-23; Thu, 02 Jul 2026 05:10:57 -0400 Received: from mail-nwsmtp-smtp-corp-main-34.sas.yp-c.yandex.net (mail-nwsmtp-smtp-corp-main-34.sas.yp-c.yandex.net [IPv6:2a02:6b8:c24:fa2:0:640:41ee:0]) by forwardcorp1b.mail.yandex.net (postfix) with ESMTPS id 874618087D; Thu, 02 Jul 2026 12:10:49 +0300 (MSK) Received: from dtalexundeer-nx.yandex-team.ru (unknown [2a02:6bf:8080:43d::1:15]) by mail-nwsmtp-smtp-corp-main-34.sas.yp-c.yandex.net (smtpcorp) with ESMTPSA id NAc7BT0aDa60-ezx5JdH6; Thu, 02 Jul 2026 12:10:48 +0300 Precedence: bulk X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1782983448; bh=lj0fFK5AhG9LHkzhPaiC8w4sWVpibJuTZ9SZRklkXqU=; h=Message-Id:Date:In-Reply-To:Cc:Subject:References:To:From; b=j/01m5OuZUxzsUsbXM3GgtVbhMWn/AK15r9HyHYPem6eR+CuZm8FZOzxQyUHgRHI0 pH5RPgygsSw9mSEUfA6hk8OVHjz6mwTJJugNfi8sHKzamraUYnwxsG4AGo0Z5EISy1 Sp5kjmy6JXRvRNakyZkgcMyuY8gETrxtTL39umNU= Authentication-Results: mail-nwsmtp-smtp-corp-main-34.sas.yp-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Alexandr Moshkov To: qemu-devel@nongnu.org Cc: Jason Wang , Milan Zamazal , Hanna Reitz , Paolo Bonzini , Fam Zheng , zhenwei pi , Stefan Hajnoczi , "Gonglei (Arei)" , Stefano Garzarella , Kevin Wolf , virtio-fs@lists.linux.dev, Jason Wang , "yc-core@yandex-team.ru" , qemu-block@nongnu.org, Raphael Norwitz , Pierrick Bouvier , Pierrick Bouvier , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Michael S. Tsirkin" , Vladimir Sementsov-Ogievskiy , Alexandr Moshkov Subject: [PATCH v4 2/6] vhost-user: add GET_VRING_BASE_SKIP_DRAIN message Date: Thu, 2 Jul 2026 14:10:19 +0500 Message-Id: <20260702091023.3306378-3-dtalexundeer@yandex-team.ru> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260702091023.3306378-1-dtalexundeer@yandex-team.ru> References: <20260702091023.3306378-1-dtalexundeer@yandex-team.ru> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=178.154.239.136; envelope-from=dtalexundeer@yandex-team.ru; helo=forwardcorp1b.mail.yandex.net X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @yandex-team.ru) X-ZM-MESSAGEID: 1782983536099158500 Content-Type: text/plain; charset="utf-8" Add VHOST_USER_GET_VRING_BASE_SKIP_DRAIN protocol message that's tell backe= nd to stops vring immediately without waiting for inflight I/O to complete. This new message can be used only with protocol feature VHOST_USER_PROTOCOL_F_GET_VRING_BASE_INFLIGHGT. Signed-off-by: Alexandr Moshkov --- docs/interop/vhost-user.rst | 38 +++++++++++++++++++++---------- hw/virtio/vhost-user.c | 37 ++++++++++++++++++++++++++---- include/hw/virtio/vhost-backend.h | 1 + 3 files changed, 59 insertions(+), 17 deletions(-) diff --git a/docs/interop/vhost-user.rst b/docs/interop/vhost-user.rst index c83ae2accb..27a80ae53b 100644 --- a/docs/interop/vhost-user.rst +++ b/docs/interop/vhost-user.rst @@ -445,6 +445,7 @@ replies, except for the following requests: * ``VHOST_USER_GET_FEATURES`` * ``VHOST_USER_GET_PROTOCOL_FEATURES`` * ``VHOST_USER_GET_VRING_BASE`` +* ``VHOST_USER_GET_VRING_BASE_SKIP_DRAIN`` * ``VHOST_USER_SET_LOG_BASE`` (if ``VHOST_USER_PROTOCOL_F_LOG_SHMFD``) * ``VHOST_USER_GET_INFLIGHT_FD`` (if ``VHOST_USER_PROTOCOL_F_INFLIGHT_SHMF= D``) =20 @@ -523,7 +524,7 @@ must start a ring upon receiving a kick (that is, detec= ting that file descriptor is readable) on the descriptor specified by ``VHOST_USER_SET_VRING_KICK`` or receiving the in-band message ``VHOST_USER_VRING_KICK`` if negotiated, and stop a ring upon receiving -``VHOST_USER_GET_VRING_BASE``. +``VHOST_USER_GET_VRING_BASE`` or ``VHOST_USER_GET_VRING_BASE_SKIP_DRAIN``. =20 Rings can be enabled or disabled by ``VHOST_USER_SET_VRING_ENABLE``. =20 @@ -1320,17 +1321,8 @@ Front-end message types set to 0. =20 By default, the back-end must complete all inflight I/O requests for the - specified vring before stopping it. - - If the ``VHOST_USER_PROTOCOL_F_GET_VRING_BASE_INFLIGHT`` protocol - feature has been negotiated, the back-end may suspend in-flight I/O - requests and record them as described in :ref:`Inflight I/O tracking - ` instead of completing them before stopping the v= ring. - How to suspend an in-flight request depends on the implementation of the= back-end - but it typically can be done by aborting or cancelling the underlying I/O - request. The ``VHOST_USER_PROTOCOL_F_GET_VRING_BASE_INFLIGHT`` - protocol feature must only be negotiated if - ``VHOST_USER_PROTOCOL_F_INFLIGHT_SHMFD`` is also negotiated. + specified vring before stopping it. In other case use, + ``VHOST_USER_GET_VRING_BASE_SKIP_DRAIN`` message. =20 ``VHOST_USER_SET_VRING_KICK`` :id: 12 @@ -1833,6 +1825,28 @@ Front-end message types =20 * The size may be 0 if the region is unused. =20 +``VHOST_USER_GET_VRING_BASE_SKIP_DRAIN`` + :id: 45 + :equivalent ioctl: ``VHOST_USER_GET_VRING_BASE_SKIP_DRAIN`` + :request payload: vring state description + :reply payload: vring descriptor index/indices + + This message requires the ``VHOST_USER_PROTOCOL_F_GET_VRING_BASE_INFLIGH= T`` + protocol feature to be negotiated. + + Identical to ``VHOST_USER_GET_VRING_BASE`` except that the back-end + must not wait for inflight I/O requests to complete before stopping + the vring. Instead, the back-end must immediately suspend all + in-flight I/O requests and record them as described in + :ref:`Inflight I/O tracking `. How to suspend + an in-flight request depends on the implementation of the back-end, + but it typically can be done by aborting or cancelling the underlying + I/O request. + + The ``VHOST_USER_PROTOCOL_F_GET_VRING_BASE_INFLIGHT`` protocol feature + must only be negotiated if ``VHOST_USER_PROTOCOL_F_INFLIGHT_SHMFD`` is + also negotiated. + Back-end message types ---------------------- =20 diff --git a/hw/virtio/vhost-user.c b/hw/virtio/vhost-user.c index d627351f45..2f71ede599 100644 --- a/hw/virtio/vhost-user.c +++ b/hw/virtio/vhost-user.c @@ -101,6 +101,7 @@ typedef enum VhostUserRequest { VHOST_USER_SET_DEVICE_STATE_FD =3D 42, VHOST_USER_CHECK_DEVICE_STATE =3D 43, VHOST_USER_GET_SHMEM_CONFIG =3D 44, + VHOST_USER_GET_VRING_BASE_SKIP_DRAIN =3D 45, VHOST_USER_MAX } VhostUserRequest; =20 @@ -167,6 +168,7 @@ static const char *vhost_req_name(VhostUserRequest req) VHOST_USER_CASE(GET_SHARED_OBJECT) VHOST_USER_CASE(SET_DEVICE_STATE_FD) VHOST_USER_CASE(CHECK_DEVICE_STATE) + VHOST_USER_CASE(GET_VRING_BASE_SKIP_DRAIN) default: return ""; } @@ -1399,12 +1401,18 @@ static VhostUserHostNotifier *fetch_notifier(VhostU= serState *u, return g_ptr_array_index(u->notifiers, idx); } =20 -static int vhost_user_get_vring_base(struct vhost_dev *dev, - struct vhost_vring_state *ring) +static int get_vring_base(struct vhost_dev *dev, + struct vhost_vring_state *ring, + bool skip_drain) { int ret; + int request =3D VHOST_USER_GET_VRING_BASE; + if (skip_drain) { + request =3D VHOST_USER_GET_VRING_BASE_SKIP_DRAIN; + } + VhostUserMsg msg =3D { - .hdr.request =3D VHOST_USER_GET_VRING_BASE, + .hdr.request =3D request, .hdr.flags =3D VHOST_USER_VERSION, .payload.state =3D *ring, .hdr.size =3D sizeof(msg.payload.state), @@ -1424,9 +1432,9 @@ static int vhost_user_get_vring_base(struct vhost_dev= *dev, return ret; } =20 - if (msg.hdr.request !=3D VHOST_USER_GET_VRING_BASE) { + if (msg.hdr.request !=3D request) { error_report("Received unexpected msg type. Expected %d received %= d", - VHOST_USER_GET_VRING_BASE, msg.hdr.request); + request, msg.hdr.request); return -EPROTO; } =20 @@ -1440,6 +1448,24 @@ static int vhost_user_get_vring_base(struct vhost_de= v *dev, return 0; } =20 +static int vhost_user_get_vring_base(struct vhost_dev *dev, + struct vhost_vring_state *ring) +{ + return get_vring_base(dev, ring, false); +} + +static int vhost_user_get_vring_base_skip_drain(struct vhost_dev *dev, + struct vhost_vring_state *ring) +{ + bool skip_drain_supported =3D vhost_user_has_protocol_feature(dev, + VHOST_USER_PROTOCOL_F_GET_VRING_BASE_INFLIG= HT); + if (!skip_drain_supported) { + return 0; + } + + return get_vring_base(dev, ring, true); +} + static int vhost_set_vring_file(struct vhost_dev *dev, VhostUserRequest request, struct vhost_vring_file *file) @@ -3409,6 +3435,7 @@ const VhostOps user_ops =3D { .vhost_set_vring_num =3D vhost_user_set_vring_num, .vhost_set_vring_base =3D vhost_user_set_vring_base, .vhost_get_vring_base =3D vhost_user_get_vring_base, + .vhost_get_vring_base_skip_drain =3D vhost_user_get_vring_base_ski= p_drain, .vhost_set_vring_kick =3D vhost_user_set_vring_kick, .vhost_set_vring_call =3D vhost_user_set_vring_call, .vhost_set_vring_err =3D vhost_user_set_vring_err, diff --git a/include/hw/virtio/vhost-backend.h b/include/hw/virtio/vhost-ba= ckend.h index d878d7b733..daa979a1aa 100644 --- a/include/hw/virtio/vhost-backend.h +++ b/include/hw/virtio/vhost-backend.h @@ -190,6 +190,7 @@ typedef struct VhostOps { vhost_set_vring_num_op vhost_set_vring_num; vhost_set_vring_base_op vhost_set_vring_base; vhost_get_vring_base_op vhost_get_vring_base; + vhost_get_vring_base_op vhost_get_vring_base_skip_drain; vhost_set_vring_kick_op vhost_set_vring_kick; vhost_set_vring_call_op vhost_set_vring_call; vhost_set_vring_err_op vhost_set_vring_err; --=20 2.34.1 From nobody Sun Jul 26 11:10:12 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=yandex-team.ru ARC-Seal: i=1; a=rsa-sha256; t=1782983543; cv=none; d=zohomail.com; s=zohoarc; b=DciZ1E9CLXqoyVqSxTQL2LQ0CDs7KmiQW8ZPakTiD5eHIt+h2AZlrsFpq6qxNnUI3GFjyhDt/Ry5CAPb6Eid9E3tw5vcJxw7T2A4kAm/cuCgMOaWmwNTZO1yd9wBHqsXavqfAbaClp1RYcbV+c5frlnOvbDqaLOGWcMCuCTsDUA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782983543; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=uTZ9LXbpWQ6ixQ7qul3NsO5E4bnqrWQ0h3AsjNHW+qA=; b=SS2rmEN/CtP/CpnDMA4T4On2M94J89Ryht/zYO5r7hOkBk+i2GdP67StMoG1t7PezQX/II2UE7bAs9yEF0SW8yK/9HVdLFe09OqL0h8r3dqFH1Q3V/Wfv+IdxlFEvjzeVa/WatYlx27UtjNOZ6ExSq/ourPGN9yfDrpOLOoKwxg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1782983543714784.9072368194012; Thu, 2 Jul 2026 02:12:23 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wfDRq-0000th-CN; Thu, 02 Jul 2026 05:11:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wfDRl-0000sL-HJ; Thu, 02 Jul 2026 05:11:01 -0400 Received: from forwardcorp1b.mail.yandex.net ([2a02:6b8:c02:900:1:45:d181:df01]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wfDRf-0000kD-I9; Thu, 02 Jul 2026 05:10:58 -0400 Received: from mail-nwsmtp-smtp-corp-main-34.sas.yp-c.yandex.net (mail-nwsmtp-smtp-corp-main-34.sas.yp-c.yandex.net [IPv6:2a02:6b8:c24:fa2:0:640:41ee:0]) by forwardcorp1b.mail.yandex.net (postfix) with ESMTPS id 66ACE8084B; Thu, 02 Jul 2026 12:10:51 +0300 (MSK) Received: from dtalexundeer-nx.yandex-team.ru (unknown [2a02:6bf:8080:43d::1:15]) by mail-nwsmtp-smtp-corp-main-34.sas.yp-c.yandex.net (smtpcorp) with ESMTPSA id NAc7BT0aDa60-g6KUmnfz; Thu, 02 Jul 2026 12:10:50 +0300 Precedence: bulk X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1782983450; bh=uTZ9LXbpWQ6ixQ7qul3NsO5E4bnqrWQ0h3AsjNHW+qA=; h=Message-Id:Date:In-Reply-To:Cc:Subject:References:To:From; b=kR8koIWEgXMlXXyoznK2l4DzPoIZEhELHK+qGDTtkt6xcUqUl2KLCy7GWu5mB6wG3 REA7uIMPawWXBBUi5hC62SkRV/7TtcgrwiBjrg90jzbA1cUBwGdO8EcRzthQrEOZCP t8Qu3l61/X5aqFA9GU32XR9AvAXRIcQVBHD48ygw= Authentication-Results: mail-nwsmtp-smtp-corp-main-34.sas.yp-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Alexandr Moshkov To: qemu-devel@nongnu.org Cc: Jason Wang , Milan Zamazal , Hanna Reitz , Paolo Bonzini , Fam Zheng , zhenwei pi , Stefan Hajnoczi , "Gonglei (Arei)" , Stefano Garzarella , Kevin Wolf , virtio-fs@lists.linux.dev, Jason Wang , "yc-core@yandex-team.ru" , qemu-block@nongnu.org, Raphael Norwitz , Pierrick Bouvier , Pierrick Bouvier , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Michael S. Tsirkin" , Vladimir Sementsov-Ogievskiy , Alexandr Moshkov Subject: [PATCH v4 3/6] vhost-user: use skip_drain with GET_VRING_BASE_SKIP_DRAIN message Date: Thu, 2 Jul 2026 14:10:20 +0500 Message-Id: <20260702091023.3306378-4-dtalexundeer@yandex-team.ru> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260702091023.3306378-1-dtalexundeer@yandex-team.ru> References: <20260702091023.3306378-1-dtalexundeer@yandex-team.ru> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2a02:6b8:c02:900:1:45:d181:df01; envelope-from=dtalexundeer@yandex-team.ru; helo=forwardcorp1b.mail.yandex.net X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @yandex-team.ru) X-ZM-MESSAGEID: 1782983546186158500 Content-Type: text/plain; charset="utf-8" Signed-off-by: Alexandr Moshkov --- hw/virtio/vhost.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c index 2a62550222..c09796de66 100644 --- a/hw/virtio/vhost.c +++ b/hw/virtio/vhost.c @@ -1518,7 +1518,11 @@ static int do_vhost_virtqueue_stop(struct vhost_dev = *dev, } =20 if (!force) { - r =3D dev->vhost_ops->vhost_get_vring_base(dev, &state); + if (!skip_drain) { + r =3D dev->vhost_ops->vhost_get_vring_base(dev, &state); + } else { + r =3D dev->vhost_ops->vhost_get_vring_base_skip_drain(dev, &st= ate); + } if (r < 0) { VHOST_OPS_DEBUG(r, "vhost VQ %u ring restore failed: %d", idx,= r); } --=20 2.34.1 From nobody Sun Jul 26 11:10:12 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=yandex-team.ru ARC-Seal: i=1; a=rsa-sha256; t=1782983526; cv=none; d=zohomail.com; s=zohoarc; b=duHG+kfOx5RPNMczQVgf/ot/33KTwAPiJPMdBbfZkPG4b7eONEbyYnLyL2hSyLduCSiFdtbRrlIFHf4AfKxe3pdJc3Fa68x10nr7bT9Iw+3/zpU6RrASUXHwozJXtNzR7PRIBsGXu8UAKixk/Htk/WoHX3v/PZeJ0SRqRKNs7Hw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782983526; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=fnYdZrGDB2jf+p6qYkKFNYbklx4wqPr4tlqVx4gY4Is=; b=FJYRGpbD5q3Ji7Rvn0v+5Z+7OS/hwtNQi99aDETa0en1hmsArgJheY41b2jAaGmO0C+oGPgAv0Xh3vtAJL2Kk83ClDXWRHF6Mwg3JagdsAjlrYbjzX/1eNg+xKn3LfbVgCygiD4bBAVBjxJWkG+NEt7g6WJi1coQlSdKEnstWUI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 178298352669523.59170561164717; Thu, 2 Jul 2026 02:12:06 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wfDRn-0000so-EI; Thu, 02 Jul 2026 05:11:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wfDRj-0000rf-LG; Thu, 02 Jul 2026 05:11:00 -0400 Received: from forwardcorp1b.mail.yandex.net ([2a02:6b8:c02:900:1:45:d181:df01]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wfDRf-0000kh-Hk; Thu, 02 Jul 2026 05:10:57 -0400 Received: from mail-nwsmtp-smtp-corp-main-34.sas.yp-c.yandex.net (mail-nwsmtp-smtp-corp-main-34.sas.yp-c.yandex.net [IPv6:2a02:6b8:c24:fa2:0:640:41ee:0]) by forwardcorp1b.mail.yandex.net (postfix) with ESMTPS id 8FDE580AD7; Thu, 02 Jul 2026 12:10:53 +0300 (MSK) Received: from dtalexundeer-nx.yandex-team.ru (unknown [2a02:6bf:8080:43d::1:15]) by mail-nwsmtp-smtp-corp-main-34.sas.yp-c.yandex.net (smtpcorp) with ESMTPSA id NAc7BT0aDa60-E9zXO6tG; Thu, 02 Jul 2026 12:10:52 +0300 Precedence: bulk X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1782983453; bh=fnYdZrGDB2jf+p6qYkKFNYbklx4wqPr4tlqVx4gY4Is=; h=Message-Id:Date:In-Reply-To:Cc:Subject:References:To:From; b=LG/jofjWf9YvBR50R6jsC4n2CXaGLmTO9vAfKK+m+Adh85UI/nxh7wpxQBVTet0bS yclJgYxdletiLgceau3dWDSKBY5G8cCmX8Er7oeJcUZcgxsdK2juX6u/BAwL1BLOHy p+tPkQMNXKkdwsHM53eTmwTyyL68OkfwVbKe5ViY= Authentication-Results: mail-nwsmtp-smtp-corp-main-34.sas.yp-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Alexandr Moshkov To: qemu-devel@nongnu.org Cc: Jason Wang , Milan Zamazal , Hanna Reitz , Paolo Bonzini , Fam Zheng , zhenwei pi , Stefan Hajnoczi , "Gonglei (Arei)" , Stefano Garzarella , Kevin Wolf , virtio-fs@lists.linux.dev, Jason Wang , "yc-core@yandex-team.ru" , qemu-block@nongnu.org, Raphael Norwitz , Pierrick Bouvier , Pierrick Bouvier , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Michael S. Tsirkin" , Vladimir Sementsov-Ogievskiy , Alexandr Moshkov Subject: [PATCH v4 4/6] vhost-user-blk: make inflight-migration prop mutable Date: Thu, 2 Jul 2026 14:10:21 +0500 Message-Id: <20260702091023.3306378-5-dtalexundeer@yandex-team.ru> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260702091023.3306378-1-dtalexundeer@yandex-team.ru> References: <20260702091023.3306378-1-dtalexundeer@yandex-team.ru> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2a02:6b8:c02:900:1:45:d181:df01; envelope-from=dtalexundeer@yandex-team.ru; helo=forwardcorp1b.mail.yandex.net X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @yandex-team.ru) X-ZM-MESSAGEID: 1782983530321158500 Content-Type: text/plain; charset="utf-8" Now this property can be turned on or off using the qom-set Acked-by: Raphael Norwitz Signed-off-by: Alexandr Moshkov --- hw/block/vhost-user-blk.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/hw/block/vhost-user-blk.c b/hw/block/vhost-user-blk.c index e3b873af7c..650c004bde 100644 --- a/hw/block/vhost-user-blk.c +++ b/hw/block/vhost-user-blk.c @@ -619,6 +619,8 @@ static const VMStateDescription vmstate_vhost_user_blk = =3D { } }; =20 +static PropertyInfo vhost_user_blk_inflight_migration_prop; + static const Property vhost_user_blk_properties[] =3D { DEFINE_PROP_CHR("chardev", VHostUserBlk, chardev), DEFINE_PROP_UINT16("num-queues", VHostUserBlk, num_queues, @@ -632,8 +634,9 @@ static const Property vhost_user_blk_properties[] =3D { VIRTIO_BLK_F_WRITE_ZEROES, true), DEFINE_PROP_BOOL("skip-get-vring-base-on-force-shutdown", VHostUserBlk, skip_get_vring_base_on_force_shutdown, false), - DEFINE_PROP_BOOL("inflight-migration", VHostUserBlk, - inflight_migration, false), + DEFINE_PROP("inflight-migration", VHostUserBlk, inflight_migration, + vhost_user_blk_inflight_migration_prop, bool, + .set_default =3D true, .defval.u =3D false), }; =20 static void vhost_user_blk_class_init(ObjectClass *klass, const void *data) @@ -665,6 +668,9 @@ static const TypeInfo vhost_user_blk_info =3D { =20 static void virtio_register_types(void) { + vhost_user_blk_inflight_migration_prop =3D qdev_prop_bool; + vhost_user_blk_inflight_migration_prop.realized_set_allowed =3D true; + type_register_static(&vhost_user_blk_info); } =20 --=20 2.34.1 From nobody Sun Jul 26 11:10:12 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=yandex-team.ru ARC-Seal: i=1; a=rsa-sha256; t=1782983558; cv=none; d=zohomail.com; s=zohoarc; b=AoteNYqMBLubGbng0esDs6GHCKVhv/mnmbdEIW3U0MWsn2lhTF7uD9hInlXEbDdDPhy+siuJU0iEaNT9MWK8bC+1n8hpo9OmW6ouB+6YtpKZdiZF2OR1n4+oY433cKrbSkvYHqV8gHZmAuoSBZrjCCi8YHbDJ7zN/OlH89oIBGo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782983558; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=mD1cajfmxp5W/UieGTiWLlUmbqZcs39FiEsdPECcnMo=; b=PwF71roVpZBENsRtn6PDBUz49N60OBuzM1EcgRvvl3RyNnMss4QzWLrBFzB3vGsM1/EOYiDy/+SLo19BbnSDP/DUZqkfIDwjVwLycAJj8k33yDyl0zZ7dW+OADjsd80NGx2iuOclkMmM6bYwVN5eT0nFW0sD8TTUXpxjOSeR8b4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1782983557946315.8748311372218; Thu, 2 Jul 2026 02:12:37 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wfDRs-0000u6-6R; Thu, 02 Jul 2026 05:11:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wfDRm-0000su-5e; Thu, 02 Jul 2026 05:11:03 -0400 Received: from forwardcorp1b.mail.yandex.net ([2a02:6b8:c02:900:1:45:d181:df01]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wfDRh-0000l2-DB; Thu, 02 Jul 2026 05:10:59 -0400 Received: from mail-nwsmtp-smtp-corp-main-34.sas.yp-c.yandex.net (mail-nwsmtp-smtp-corp-main-34.sas.yp-c.yandex.net [IPv6:2a02:6b8:c24:fa2:0:640:41ee:0]) by forwardcorp1b.mail.yandex.net (postfix) with ESMTPS id 9D07B80B12; Thu, 02 Jul 2026 12:10:55 +0300 (MSK) Received: from dtalexundeer-nx.yandex-team.ru (unknown [2a02:6bf:8080:43d::1:15]) by mail-nwsmtp-smtp-corp-main-34.sas.yp-c.yandex.net (smtpcorp) with ESMTPSA id NAc7BT0aDa60-FNcjg5o8; Thu, 02 Jul 2026 12:10:55 +0300 Precedence: bulk X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1782983455; bh=mD1cajfmxp5W/UieGTiWLlUmbqZcs39FiEsdPECcnMo=; h=Message-Id:Date:In-Reply-To:Cc:Subject:References:To:From; b=wXhZPpISWh0sXMKywGR4tnJGErZfOlLlXi+7xGUH6lRC5207hRD108xmTh2UB/jj8 iOuKJ50wW4ojFngalpdQhvMbnefRuIxNKJ3wdLHdKlMdzDa+SQzRs8QbiX1m4oTV/D R5qUyoYC0PenbdwbQkCrR516Oqufpstc/DsWlcpU= Authentication-Results: mail-nwsmtp-smtp-corp-main-34.sas.yp-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Alexandr Moshkov To: qemu-devel@nongnu.org Cc: Jason Wang , Milan Zamazal , Hanna Reitz , Paolo Bonzini , Fam Zheng , zhenwei pi , Stefan Hajnoczi , "Gonglei (Arei)" , Stefano Garzarella , Kevin Wolf , virtio-fs@lists.linux.dev, Jason Wang , "yc-core@yandex-team.ru" , qemu-block@nongnu.org, Raphael Norwitz , Pierrick Bouvier , Pierrick Bouvier , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Michael S. Tsirkin" , Vladimir Sementsov-Ogievskiy , Alexandr Moshkov Subject: [PATCH v4 5/6] vhost-user-blk: move inflight_needed higher Date: Thu, 2 Jul 2026 14:10:22 +0500 Message-Id: <20260702091023.3306378-6-dtalexundeer@yandex-team.ru> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260702091023.3306378-1-dtalexundeer@yandex-team.ru> References: <20260702091023.3306378-1-dtalexundeer@yandex-team.ru> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2a02:6b8:c02:900:1:45:d181:df01; envelope-from=dtalexundeer@yandex-team.ru; helo=forwardcorp1b.mail.yandex.net X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @yandex-team.ru) X-ZM-MESSAGEID: 1782983562332158500 Content-Type: text/plain; charset="utf-8" Will be used in future commits for adding skip_drain param Reviewed-by: Vladimir Sementsov-Ogievskiy Signed-off-by: Alexandr Moshkov --- hw/block/vhost-user-blk.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/hw/block/vhost-user-blk.c b/hw/block/vhost-user-blk.c index 650c004bde..156ed6de30 100644 --- a/hw/block/vhost-user-blk.c +++ b/hw/block/vhost-user-blk.c @@ -131,6 +131,17 @@ const VhostDevConfigOps blk_ops =3D { .vhost_dev_config_notifier =3D vhost_user_blk_handle_config_change, }; =20 +static bool vhost_user_blk_inflight_needed(void *opaque) +{ + struct VHostUserBlk *s =3D opaque; + + bool inflight_migration =3D virtio_has_feature(s->dev.protocol_feature= s, + VHOST_USER_PROTOCOL_F_GET_VRING_BASE_INFLIG= HT); + + return inflight_migration; +} + + static int vhost_user_blk_start(VirtIODevice *vdev, Error **errp) { VHostUserBlk *s =3D VHOST_USER_BLK(vdev); @@ -587,14 +598,6 @@ static struct vhost_dev *vhost_user_blk_get_vhost(Virt= IODevice *vdev) return &s->dev; } =20 -static bool vhost_user_blk_inflight_needed(void *opaque) -{ - struct VHostUserBlk *s =3D opaque; - - return vhost_user_has_protocol_feature( - &s->dev, VHOST_USER_PROTOCOL_F_GET_VRING_BASE_INFLIGHT); -} - static const VMStateDescription vmstate_vhost_user_blk_inflight =3D { .name =3D "vhost-user-blk/inflight", .version_id =3D 1, --=20 2.34.1 From nobody Sun Jul 26 11:10:12 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=yandex-team.ru ARC-Seal: i=1; a=rsa-sha256; t=1782983520; cv=none; d=zohomail.com; s=zohoarc; b=Q+C5dY4bMIHK4EQ9bXLd8kmAJcYhPm1XvBQO4c/FWjhR8aKn6i4f/UdCUbVSmbPE83ZVDLjiXjO2Zc5jxSZQAlHTAzBR1l8hECchGvLifBnF/Jlk3AtYwpZu6tOMDW3y+/m60nmw476mlgUMK3wHwHVrEPt2My/yCLIiGbkpMuk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782983520; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=f+j6gspIE6UnGGrgywr9U7aGweypYBibhpvyef7zBVc=; b=I9qJ5Jg8eLZm8JhU8pKPoIxfRHI3YCQamhnfmUDva5pWMGqVv9IYUXFy/n4jQsWgb9xRoqsSnPZDpAduLUynAthJUewUBdL56+QIy/NmhMX84tCWv3YCTHiv2WLpGBs0UCqWEsWbMfDmGtj0cbTipoPq1ZvGfkKI7mgHwC2kawQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1782983508737399.24670943799015; Thu, 2 Jul 2026 02:11:48 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wfDRw-0000wf-LM; Thu, 02 Jul 2026 05:11:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wfDRu-0000vz-D4; Thu, 02 Jul 2026 05:11:10 -0400 Received: from forwardcorp1b.mail.yandex.net ([178.154.239.136]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wfDRj-0000lE-Ur; Thu, 02 Jul 2026 05:11:03 -0400 Received: from mail-nwsmtp-smtp-corp-main-34.sas.yp-c.yandex.net (mail-nwsmtp-smtp-corp-main-34.sas.yp-c.yandex.net [IPv6:2a02:6b8:c24:fa2:0:640:41ee:0]) by forwardcorp1b.mail.yandex.net (postfix) with ESMTPS id 6D8D980B26; Thu, 02 Jul 2026 12:10:57 +0300 (MSK) Received: from dtalexundeer-nx.yandex-team.ru (unknown [2a02:6bf:8080:43d::1:15]) by mail-nwsmtp-smtp-corp-main-34.sas.yp-c.yandex.net (smtpcorp) with ESMTPSA id NAc7BT0aDa60-qNjZ3yIG; Thu, 02 Jul 2026 12:10:56 +0300 Precedence: bulk X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1782983456; bh=f+j6gspIE6UnGGrgywr9U7aGweypYBibhpvyef7zBVc=; h=Message-Id:Date:In-Reply-To:Cc:Subject:References:To:From; b=lQUnXfH2x+pJUdKRuIcQeyHCbgdi5pkZ+WV3/HkIm8WSrw5e7YtX946NwwbbZKVmx PtlJkeAdanEIK8xXrFaf9FWppjDUl63LO+Lj8hvZwlS2N7fuYwfEK73VdMnKas4ArB lrvk0BsS5CxJFq9uYqzdbR4uGTDIj1QR6A34EkjE= Authentication-Results: mail-nwsmtp-smtp-corp-main-34.sas.yp-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Alexandr Moshkov To: qemu-devel@nongnu.org Cc: Jason Wang , Milan Zamazal , Hanna Reitz , Paolo Bonzini , Fam Zheng , zhenwei pi , Stefan Hajnoczi , "Gonglei (Arei)" , Stefano Garzarella , Kevin Wolf , virtio-fs@lists.linux.dev, Jason Wang , "yc-core@yandex-team.ru" , qemu-block@nongnu.org, Raphael Norwitz , Pierrick Bouvier , Pierrick Bouvier , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Michael S. Tsirkin" , Vladimir Sementsov-Ogievskiy , Alexandr Moshkov Subject: [PATCH v4 6/6] vhost-user-blk: use GET_VRING_BASE_SKIP_DRAIN during inflight migration Date: Thu, 2 Jul 2026 14:10:23 +0500 Message-Id: <20260702091023.3306378-7-dtalexundeer@yandex-team.ru> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260702091023.3306378-1-dtalexundeer@yandex-team.ru> References: <20260702091023.3306378-1-dtalexundeer@yandex-team.ru> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=178.154.239.136; envelope-from=dtalexundeer@yandex-team.ru; helo=forwardcorp1b.mail.yandex.net X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @yandex-team.ru) X-ZM-MESSAGEID: 1782983526889158500 Content-Type: text/plain; charset="utf-8" In case of migration of QEMU from the new version (where the inflight-migration parameter is present), to the old one (where it is absent) there is no way to disable this feature on the backend during runtime. Now inflight-migration param can be turned on and off, so this logic will work correctly. Now when inflight-migration is enabled and the device is stopping due to live migration, send GET_VRING_BASE_SKIP_DRAIN message to the back-end, allowing back-end to suspend inflight I/O immediately instead of completing them. In case if inflight-migration is disabled, use default GET_VRING_BASE message with back-end. Also now QEMU will always try to setup VHOST_USER_PROTOCOL_F_GET_VRING_BASE_INFLIGHT protocol feature with backend. This will allow to use GET_VRING_BASE_SKIP_DRAIN message. Signed-off-by: Alexandr Moshkov --- hw/block/vhost-user-blk.c | 30 ++++++++++++++++++++++++------ hw/virtio/vhost-user.c | 3 +-- include/hw/virtio/vhost-user.h | 1 - 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/hw/block/vhost-user-blk.c b/hw/block/vhost-user-blk.c index 156ed6de30..cd0a443b26 100644 --- a/hw/block/vhost-user-blk.c +++ b/hw/block/vhost-user-blk.c @@ -135,10 +135,7 @@ static bool vhost_user_blk_inflight_needed(void *opaqu= e) { struct VHostUserBlk *s =3D opaque; =20 - bool inflight_migration =3D virtio_has_feature(s->dev.protocol_feature= s, - VHOST_USER_PROTOCOL_F_GET_VRING_BASE_INFLIG= HT); - - return inflight_migration; + return s->inflight_migration; } =20 =20 @@ -239,11 +236,14 @@ static int vhost_user_blk_stop(VirtIODevice *vdev) return 0; } =20 + bool skip_drain =3D vhost_user_blk_inflight_needed(s) && + runstate_check(RUN_STATE_FINISH_MIGRATE); + force_stop =3D s->skip_get_vring_base_on_force_shutdown && qemu_force_shutdown_requested(); =20 ret =3D force_stop ? vhost_dev_force_stop(&s->dev, vdev, true) : - vhost_dev_stop(&s->dev, vdev, true, false); + vhost_dev_stop(&s->dev, vdev, true, skip_drain); =20 err =3D k->set_guest_notifiers(qbus->parent, s->dev.nvqs, false); if (err < 0) { @@ -375,7 +375,6 @@ static int vhost_user_blk_connect(DeviceState *dev, Err= or **errp) vhost_dev_set_config_notifier(&s->dev, &blk_ops); =20 s->vhost_user.supports_config =3D true; - s->vhost_user.supports_inflight_migration =3D s->inflight_migration; ret =3D vhost_dev_init(&s->dev, &s->vhost_user, VHOST_BACKEND_TYPE_USE= R, 0, errp); if (ret < 0) { @@ -598,10 +597,29 @@ static struct vhost_dev *vhost_user_blk_get_vhost(Vir= tIODevice *vdev) return &s->dev; } =20 +static bool vhost_user_blk_pre_save(void *opaque, Error **errp) +{ + VHostUserBlk *s =3D VHOST_USER_BLK(opaque); + + bool inflight_migration_enabled =3D vhost_user_has_protocol_feature(&s= ->dev, + VHOST_USER_PROTOCOL_F_GET_VRING_BASE_INFLIG= HT); + + if (vhost_user_blk_inflight_needed(s) && !inflight_migration_enabled) { + error_setg(errp, "can't migrate vhost-user-blk device: " + "backend doesn't support " + "VHOST_USER_PROTOCOL_F_GET_VRING_BASE_INFLIGHT " + "protocol feature"); + return false; + } + + return true; +} + static const VMStateDescription vmstate_vhost_user_blk_inflight =3D { .name =3D "vhost-user-blk/inflight", .version_id =3D 1, .needed =3D vhost_user_blk_inflight_needed, + .pre_save_errp =3D vhost_user_blk_pre_save, .fields =3D (const VMStateField[]) { VMSTATE_VHOST_INFLIGHT_REGION(inflight, VHostUserBlk), VMSTATE_END_OF_LIST() diff --git a/hw/virtio/vhost-user.c b/hw/virtio/vhost-user.c index 2f71ede599..e3e0164707 100644 --- a/hw/virtio/vhost-user.c +++ b/hw/virtio/vhost-user.c @@ -2570,8 +2570,7 @@ static int vhost_user_backend_init(struct vhost_dev *= dev, void *opaque, } } =20 - if (!u->user->supports_inflight_migration || - !virtio_has_feature(protocol_features, + if (!virtio_has_feature(protocol_features, VHOST_USER_PROTOCOL_F_INFLIGHT_SHMFD)) { protocol_features &=3D ~(1ULL << VHOST_USER_PROTOCOL_F_GET_VRING_BASE_INFLIG= HT); diff --git a/include/hw/virtio/vhost-user.h b/include/hw/virtio/vhost-user.h index 06c360af18..1ded2c2d27 100644 --- a/include/hw/virtio/vhost-user.h +++ b/include/hw/virtio/vhost-user.h @@ -72,7 +72,6 @@ typedef struct VhostUserState { GPtrArray *notifiers; int memory_slots; bool supports_config; - bool supports_inflight_migration; } VhostUserState; =20 /** --=20 2.34.1