From nobody Mon Feb 9 16:27:28 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=1770197040; cv=none; d=zohomail.com; s=zohoarc; b=GwPUFGHCNEKAD8S41efuOC3WDOAtIpj/n2gIqUFYahjj39WuoOuS9t4t8I+00oxjyXPGde1Lj9o3nertkzVwx8TyRFtKHC7qaVcmpV+8Jnm+bnrMu/AF2PqQ3uz9L9j/JtlAzXWsn5DSZGiVzYdU1K+Uu/XK1eE/KEmtiNke24A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1770197040; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Pfq/QKPKp23MSJ6FjLKG3ExuRdNsMAjh3P4leBDAn1A=; b=ApIeVX8X7kWr1MguJqWrTCJRq5t9YZWSAz+FM9gIGgNTFO5tqIocmq6vSscnfIbEO6/V8vve04TF6QiIN5TdgHTixpTr+0ifElocRVxXdWycN+oiCzBl37ihbASb7PSUPLVKHmvHTto7ufi9w2Tf8/Iz5jajwRXlPcQbnPs5X0Y= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1770197040065621.0383061702101; Wed, 4 Feb 2026 01:24:00 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vnZ71-00037l-WF; Wed, 04 Feb 2026 04:23:52 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vnZ6z-00033B-K6 for qemu-devel@nongnu.org; Wed, 04 Feb 2026 04:23:49 -0500 Received: from forwardcorp1d.mail.yandex.net ([178.154.239.200]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vnZ6x-00038I-JV for qemu-devel@nongnu.org; Wed, 04 Feb 2026 04:23:49 -0500 Received: from mail-nwsmtp-smtp-corp-main-56.klg.yp-c.yandex.net (mail-nwsmtp-smtp-corp-main-56.klg.yp-c.yandex.net [IPv6:2a02:6b8:c42:65a0:0:640:e1de:0]) by forwardcorp1d.mail.yandex.net (Yandex) with ESMTPS id A09DF807E9; Wed, 04 Feb 2026 12:23:43 +0300 (MSK) Received: from vsementsov-lin (unknown [2a02:6bf:8080:52d::1:1f]) by mail-nwsmtp-smtp-corp-main-56.klg.yp-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id fNlTbg0A58c0-UIls85fU; Wed, 04 Feb 2026 12:23:42 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1770197023; bh=Pfq/QKPKp23MSJ6FjLKG3ExuRdNsMAjh3P4leBDAn1A=; h=Message-ID:Date:Cc:Subject:To:From; b=gLtTK3fo0Sy6XrgaccLAw+ADWbuqVZU8UUm7MSDD9Qk39qyyq8PCEwJmboNziiJxK B036fPQvW5WfkKQvyMwe9fiNcJxdErFZ9oG3ltFkcqOolWXs3yKmmtNHqXOGgpe/Xr yL/qMzU5nJlnjP7LFAAHM5fjRjztLFP/bwPtS9AU= Authentication-Results: mail-nwsmtp-smtp-corp-main-56.klg.yp-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Vladimir Sementsov-Ogievskiy To: mst@redhat.com Cc: sgarzare@redhat.com, qemu-devel@nongnu.org, d-tatianin@yandex-team.ru, vsementsov@yandex-team.ru Subject: [PATCH] vhost-user: pass GPA instead of UVA Date: Wed, 4 Feb 2026 12:23:39 +0300 Message-ID: <20260204092339.211650-1-vsementsov@yandex-team.ru> X-Mailer: git-send-email 2.52.0 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=lists.gnu.org; Received-SPF: pass client-ip=178.154.239.200; envelope-from=vsementsov@yandex-team.ru; helo=forwardcorp1d.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, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, 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 Precedence: list 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: 1770197044597154100 Content-Type: text/plain; charset="utf-8" Unlike the kernel, vhost-user backend knows nothing about QEMUs userspace addresses. We can pass GPA instead and nothing changes. The benefit: open the doors for further implementation of local migration (live-update) with passing open vhost-releated FDs through UNIX domain socket. This way the connection with backend kept live and untouched. Without this change, we'll have to communicate with backend to inform it about UVA addresses change, but better is simply use more stable GPA numbers, like it's done for VDPA. Signed-off-by: Vladimir Sementsov-Ogievskiy --- hw/virtio/vhost-user.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/hw/virtio/vhost-user.c b/hw/virtio/vhost-user.c index 63fa9a1b4b..f379408c95 100644 --- a/hw/virtio/vhost-user.c +++ b/hw/virtio/vhost-user.c @@ -386,6 +386,24 @@ static int vhost_user_write(struct vhost_dev *dev, Vho= stUserMsg *msg, CharFrontend *chr =3D u->user->chr; int ret, size =3D VHOST_USER_HDR_SIZE + msg->hdr.size; =20 + if (msg->hdr.request =3D=3D VHOST_USER_REM_MEM_REG || + msg->hdr.request =3D=3D VHOST_USER_ADD_MEM_REG) { + + /* + * In QEMU we pass guest physical addresses to vhost-user server + * instead of QEMUs virtual address. Server have no option to + * distinguesh, but we get a benefit: guest physical address is + * stable during migration, and we don't have to reset memory + * regions. + * + * Look also at vhost_user_vq_get_addr(): like in VDPA, we pass + * physical addresses instead of user. + */ + + msg->payload.mem_reg.region.userspace_addr =3D + msg->payload.mem_reg.region.guest_phys_addr; + } + /* * Some devices, like virtio-scsi, are implemented as a single vhost_d= ev, * while others, like virtio-net, contain multiple vhost_devs. For @@ -3021,6 +3039,17 @@ static int vhost_user_check_device_state(struct vhos= t_dev *dev, Error **errp) return 0; } =20 +static int vhost_user_vq_get_addr(struct vhost_dev *dev, + struct vhost_vring_addr *addr, + struct vhost_virtqueue *vq) +{ + assert(dev->vhost_ops->backend_type =3D=3D VHOST_BACKEND_TYPE_USER); + addr->desc_user_addr =3D (uint64_t)(unsigned long)vq->desc_phys; + addr->avail_user_addr =3D (uint64_t)(unsigned long)vq->avail_phys; + addr->used_user_addr =3D (uint64_t)(unsigned long)vq->used_phys; + return 0; +} + const VhostOps user_ops =3D { .backend_type =3D VHOST_BACKEND_TYPE_USER, .vhost_backend_init =3D vhost_user_backend_init, @@ -3059,4 +3088,5 @@ const VhostOps user_ops =3D { .vhost_supports_device_state =3D vhost_user_supports_device_state, .vhost_set_device_state_fd =3D vhost_user_set_device_state_fd, .vhost_check_device_state =3D vhost_user_check_device_state, + .vhost_vq_get_addr =3D vhost_user_vq_get_addr, }; --=20 2.52.0