From nobody Mon Mar 23 23:23:29 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1773938345; cv=none; d=zohomail.com; s=zohoarc; b=angPHihnNd/2MbZKFU15LK0VHWViw2Dn8IZItNe3a+8IlzgbfrfFnyaRWbnltVjSnxDHckbx9AXVEvGhOAm46JUvj9k9Qgw+cWsfjC9VqaGX7Z8ZBR6fJCm4XQYvDDJKNyioYKVRUblCQClslEb9YDv65hy/Ipwxz7qYm4tkSxU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773938345; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=x0oPPDVCmH0pnh+mF11vQICye4CjHl9xfrBBmeYq+Bk=; b=JR16zyviFERzf6Qca1YuWElIJIJQsGyPcXEcm+ytrpd8AfdHkgfghQ7Zie7rJDj8WQeRvDuZxxoSZDXV5yqeZ0XEu1MSOt622DazKmlMgQvH6Yv7vsTiigrWEwDABXNFZE5fqhYlbDO/5XTvfcVWL2B62VvhWOtRoLU23enio2U= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1773938345653130.45348794064387; Thu, 19 Mar 2026 09:39:05 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 6BE3E41990; Thu, 19 Mar 2026 12:39:04 -0400 (EDT) Received: from [172.19.199.12] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id E119D41B35; Thu, 19 Mar 2026 12:37:08 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id E73FA3F363; Thu, 19 Mar 2026 12:37:03 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 6EFDE3F363 for ; Thu, 19 Mar 2026 12:37:03 -0400 (EDT) Received: from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-274-gX1HbzGdMvOad82EIe2WsQ-1; Thu, 19 Mar 2026 12:37:01 -0400 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 4891618005BA for ; Thu, 19 Mar 2026 16:37:00 +0000 (UTC) Received: from antique-work.redhat.com (unknown [10.44.33.53]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 92EE530001A1 for ; Thu, 19 Mar 2026 16:36:59 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HELO_MISC_IP,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_PASS autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1773938222; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=x0oPPDVCmH0pnh+mF11vQICye4CjHl9xfrBBmeYq+Bk=; b=VVCNdQb7TpDGB8sibh3S7/aeAWxSeiF4gAqaHzT5+ONkQwKkIOtq4CXuGI6PyNNPsxOAw2 myx1GTIfvvZhnYaFeabbkNciB1ijo8kEMx2fInHFqkN8ePl7a2Dlyu1Pb2Zs4WbsuEO/FW fLZeiw0UnsygzBaPQr4L3uKy2vgS1hs= X-MC-Unique: gX1HbzGdMvOad82EIe2WsQ-1 X-Mimecast-MFC-AGG-ID: gX1HbzGdMvOad82EIe2WsQ_1773938220 To: devel@lists.libvirt.org Subject: [libvirt PATCH 01/11] conf: Move and rename virStorageSourceFDTuple object Date: Thu, 19 Mar 2026 17:36:47 +0100 Message-ID: <497d6009d4032f89dada5f0ca06278f3176c1c06.1773938045.git.phrdina@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: HSO0LoIQkhdURdYlHKBkURc_9sJxSOf-NdIkie5pLMo_1773938220 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: YWY5EMTZ5OW5ZBX3XNT4S6RGXCT7M3FM X-Message-ID-Hash: YWY5EMTZ5OW5ZBX3XNT4S6RGXCT7M3FM X-MailFrom: phrdina@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Pavel Hrdina via Devel Reply-To: Pavel Hrdina X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1773938348000158500 Content-Type: text/plain; charset="utf-8"; x-default="true" From: Pavel Hrdina Associating FD can be used by other parts of VM so rename it to generic virDomainFDTuple. Signed-off-by: Pavel Hrdina Reviewed-by: Peter Krempa --- src/conf/meson.build | 1 + src/conf/storage_source_conf.c | 42 --------------------------- src/conf/storage_source_conf.h | 24 ++-------------- src/conf/virdomainfd.c | 52 ++++++++++++++++++++++++++++++++++ src/conf/virdomainfd.h | 27 ++++++++++++++++++ src/libvirt_private.syms | 5 +++- src/qemu/qemu_backup.c | 2 +- src/qemu/qemu_domain.c | 2 +- src/qemu/qemu_driver.c | 6 ++-- tests/testutilsqemu.c | 2 +- 10 files changed, 92 insertions(+), 71 deletions(-) create mode 100644 src/conf/virdomainfd.c create mode 100644 src/conf/virdomainfd.h diff --git a/src/conf/meson.build b/src/conf/meson.build index 5116c23fe3..6f95b23cce 100644 --- a/src/conf/meson.build +++ b/src/conf/meson.build @@ -20,6 +20,7 @@ domain_conf_sources =3D [ 'numa_conf.c', 'snapshot_conf.c', 'virdomaincheckpointobjlist.c', + 'virdomainfd.c', 'virdomainjob.c', 'virdomainmomentobjlist.c', 'virdomainobjlist.c', diff --git a/src/conf/storage_source_conf.c b/src/conf/storage_source_conf.c index e5f20fba80..010b44ccb0 100644 --- a/src/conf/storage_source_conf.c +++ b/src/conf/storage_source_conf.c @@ -1417,48 +1417,6 @@ virStorageSourceInitiatorClear(virStorageSourceIniti= atorDef *initiator) VIR_FREE(initiator->iqn); } =20 -G_DEFINE_TYPE(virStorageSourceFDTuple, vir_storage_source_fd_tuple, G_TYPE= _OBJECT); - -static void -vir_storage_source_fd_tuple_init(virStorageSourceFDTuple *fdt G_GNUC_UNUSE= D) -{ -} - - -static void -virStorageSourceFDTupleFinalize(GObject *object) -{ - virStorageSourceFDTuple *fdt =3D VIR_STORAGE_SOURCE_FD_TUPLE(object); - size_t i; - - if (!fdt) - return; - - for (i =3D 0; i < fdt->nfds; i++) - VIR_FORCE_CLOSE(fdt->fds[i]); - - g_free(fdt->fds); - g_free(fdt->testfds); - g_free(fdt->selinuxLabel); - G_OBJECT_CLASS(vir_storage_source_fd_tuple_parent_class)->finalize(obj= ect); -} - - -static void -vir_storage_source_fd_tuple_class_init(virStorageSourceFDTupleClass *klass) -{ - GObjectClass *obj =3D G_OBJECT_CLASS(klass); - - obj->finalize =3D virStorageSourceFDTupleFinalize; -} - - -virStorageSourceFDTuple * -virStorageSourceFDTupleNew(void) -{ - return g_object_new(vir_storage_source_fd_tuple_get_type(), NULL); -} - =20 /** * virStorageSourceNetworkProtocolPathSplit: diff --git a/src/conf/storage_source_conf.h b/src/conf/storage_source_conf.h index d3a9b0e7a2..5ddcebb282 100644 --- a/src/conf/storage_source_conf.h +++ b/src/conf/storage_source_conf.h @@ -24,6 +24,7 @@ #include "storage_encryption_conf.h" #include "virbitmap.h" #include "virconftypes.h" +#include "virdomainfd.h" #include "virenum.h" #include "virobject.h" #include "virpci.h" @@ -269,27 +270,6 @@ struct _virStorageSourceSlice { void virStorageSourceSliceFree(virStorageSourceSlice *slice); =20 -struct _virStorageSourceFDTuple { - GObject parent; - int *fds; - size_t nfds; - int *testfds; /* populated by tests to ensure stable FDs */ - - bool writable; - bool tryRestoreLabel; - - /* connection this FD tuple is associated with for auto-closing */ - virConnect *conn; - - /* original selinux label when we relabel the image */ - char *selinuxLabel; -}; -G_DECLARE_FINAL_TYPE(virStorageSourceFDTuple, vir_storage_source_fd_tuple,= VIR, STORAGE_SOURCE_FD_TUPLE, GObject); - -virStorageSourceFDTuple * -virStorageSourceFDTupleNew(void); - - typedef struct _virStorageSource virStorageSource; =20 /* Stores information related to a host resource. In the case of backing @@ -442,7 +422,7 @@ struct _virStorageSource { * one event for it */ bool thresholdEventWithIndex; =20 - virStorageSourceFDTuple *fdtuple; + virDomainFDTuple *fdtuple; =20 /* Setting 'seclabelSkipRemember' to true will cause the security driv= er to * not remember the security label even if it otherwise were to be diff --git a/src/conf/virdomainfd.c b/src/conf/virdomainfd.c new file mode 100644 index 0000000000..13c3161e6a --- /dev/null +++ b/src/conf/virdomainfd.c @@ -0,0 +1,52 @@ +/* + * SPDX-License-Identifier: LGPL-2.1-or-later + */ + +#include + +#include "virdomainfd.h" + +#include "virfile.h" + +G_DEFINE_TYPE(virDomainFDTuple, vir_domain_fd_tuple, G_TYPE_OBJECT); + + +static void +vir_domain_fd_tuple_init(virDomainFDTuple *fdt G_GNUC_UNUSED) +{ +} + + +static void +virDomainFDTupleFinalize(GObject *object) +{ + virDomainFDTuple *fdt =3D VIR_DOMAIN_FD_TUPLE(object); + size_t i; + + if (!fdt) + return; + + for (i =3D 0; i < fdt->nfds; i++) + VIR_FORCE_CLOSE(fdt->fds[i]); + + g_free(fdt->fds); + g_free(fdt->testfds); + g_free(fdt->selinuxLabel); + G_OBJECT_CLASS(vir_domain_fd_tuple_parent_class)->finalize(object); +} + + +static void +vir_domain_fd_tuple_class_init(virDomainFDTupleClass *klass) +{ + GObjectClass *obj =3D G_OBJECT_CLASS(klass); + + obj->finalize =3D virDomainFDTupleFinalize; +} + + +virDomainFDTuple * +virDomainFDTupleNew(void) +{ + return g_object_new(vir_domain_fd_tuple_get_type(), NULL); +} diff --git a/src/conf/virdomainfd.h b/src/conf/virdomainfd.h new file mode 100644 index 0000000000..0c0d475ed6 --- /dev/null +++ b/src/conf/virdomainfd.h @@ -0,0 +1,27 @@ +/* + * SPDX-License-Identifier: LGPL-2.1-or-later + */ + +#pragma once + +#include "internal.h" + +struct _virDomainFDTuple { + GObject parent; + int *fds; + size_t nfds; + int *testfds; /* populated by tests to ensure stable FDs */ + + bool writable; + bool tryRestoreLabel; + + /* connection this FD tuple is associated with for auto-closing */ + virConnect *conn; + + /* original selinux label when we relabel the image */ + char *selinuxLabel; +}; +G_DECLARE_FINAL_TYPE(virDomainFDTuple, vir_domain_fd_tuple, VIR, DOMAIN_FD= _TUPLE, GObject); + +virDomainFDTuple * +virDomainFDTupleNew(void); diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index f5acf46bc0..cd028c488a 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1180,7 +1180,6 @@ virStorageSourceChainHasManagedPR; virStorageSourceChainHasNVMe; virStorageSourceClear; virStorageSourceCopy; -virStorageSourceFDTupleNew; virStorageSourceGetActualType; virStorageSourceGetSecurityLabelDef; virStorageSourceHasBacking; @@ -1233,6 +1232,10 @@ virDomainCheckpointUpdateRelations; virDomainListCheckpoints; =20 =20 +# conf/virdomainfd.h +virDomainFDTupleNew; + + #conf/virdomainjob.h virDomainAgentJobTypeToString; virDomainAsyncJobTypeFromString; diff --git a/src/qemu/qemu_backup.c b/src/qemu/qemu_backup.c index 44514d08fc..d380dd3a63 100644 --- a/src/qemu/qemu_backup.c +++ b/src/qemu/qemu_backup.c @@ -876,7 +876,7 @@ qemuBackupBegin(virDomainObj *vm, priv->backup =3D g_steal_pointer(&def); =20 if (pull && priv->backup->server->fdgroup) { - virStorageSourceFDTuple *fdt =3D NULL; + virDomainFDTuple *fdt =3D NULL; VIR_AUTOCLOSE fdcopy =3D -1; =20 if (!(fdt =3D virHashLookup(priv->fds, priv->backup->server->fdgro= up))) { diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 6fdca4be09..90d0f02612 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -9835,7 +9835,7 @@ qemuDomainPrepareStorageSourceFDs(virStorageSource *s= rc, { qemuDomainStorageSourcePrivate *srcpriv =3D NULL; virStorageType actualType =3D virStorageSourceGetActualType(src); - virStorageSourceFDTuple *fdt =3D NULL; + virDomainFDTuple *fdt =3D NULL; size_t i; =20 if (actualType !=3D VIR_STORAGE_TYPE_FILE && diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 8b148b33b4..5ef3ec649f 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -20269,7 +20269,7 @@ qemuDomainFDHashCloseConnect(virDomainObj *vm, virConnectPtr conn) { qemuDomainObjPrivate *priv =3D QEMU_DOMAIN_PRIVATE(vm); - virStorageSourceFDTuple *data; + virDomainFDTuple *data; GHashTableIter htitr; =20 if (!priv->fds) @@ -20293,7 +20293,7 @@ qemuDomainFDAssociate(virDomainPtr domain, { virDomainObj *vm =3D NULL; qemuDomainObjPrivate *priv; - g_autoptr(virStorageSourceFDTuple) new =3D NULL; + g_autoptr(virDomainFDTuple) new =3D NULL; size_t i; int ret =3D -1; =20 @@ -20311,7 +20311,7 @@ qemuDomainFDAssociate(virDomainPtr domain, =20 priv =3D vm->privateData; =20 - new =3D virStorageSourceFDTupleNew(); + new =3D virDomainFDTupleNew(); new->nfds =3D nfds; new->fds =3D g_new0(int, new->nfds); for (i =3D 0; i < new->nfds; i++) { diff --git a/tests/testutilsqemu.c b/tests/testutilsqemu.c index e00e52d2a8..e9bdbdbbe7 100644 --- a/tests/testutilsqemu.c +++ b/tests/testutilsqemu.c @@ -712,7 +712,7 @@ testQemuInfoSetArgs(testQemuInfo *info, break; =20 case ARG_FD_GROUP: { - virStorageSourceFDTuple *new =3D virStorageSourceFDTupleNew(); + virDomainFDTuple *new =3D virDomainFDTupleNew(); const char *fdname =3D va_arg(argptr, char *); VIR_AUTOCLOSE fakefd =3D open("/dev/zero", O_RDWR); bool writable =3D va_arg(argptr, int); --=20 2.53.0 From nobody Mon Mar 23 23:23:29 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1773938389; cv=none; d=zohomail.com; s=zohoarc; b=ntE2UZglKfkkNtoeI6fe6a0RvMhQdQPpPMoydaQchUfq5QdJxqzF3+XoaUZM8X6bAVS16ZOJ4hV2WqPJ+La6/nmH5JPTaGwealCGUdvzpIWitAzgMh1tNzjVQ4ewKL+z47X6/T8bkWuhhEv6H080rBxIZH2pVsnIaq5WBruNGqE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773938389; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=xSmZFgFXggtmz347oYBCs2uJKsGAGY61faUPk26abt4=; b=N4G1g8x7O+ykgr3O+xhELQfLRS6M5FufKO9e2RMhDQvsaofH1rbAclE9Eu9rXLs6BkASmyPP1W8o57tc4fUzD67QvOVFuYWLrajsBrskAnFdslg7Xp/hcsaW9PeBLMCcoMWA23p5f8F/M5pQldwrpFFU1QOdV65lwyixQBU0h60= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1773938388917167.32795897041422; Thu, 19 Mar 2026 09:39:48 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 0155C41AD5; Thu, 19 Mar 2026 12:39:48 -0400 (EDT) Received: from [172.19.199.12] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id B956B41880; Thu, 19 Mar 2026 12:37:10 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 72AAB4180D; Thu, 19 Mar 2026 12:37:04 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id ED7233F363 for ; Thu, 19 Mar 2026 12:37:03 -0400 (EDT) Received: from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-488-IjNHSBTOMFK0MYhxr5H8nQ-1; Thu, 19 Mar 2026 12:37:02 -0400 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 72311195608C for ; Thu, 19 Mar 2026 16:37:01 +0000 (UTC) Received: from antique-work.redhat.com (unknown [10.44.33.53]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id C014930002E0 for ; Thu, 19 Mar 2026 16:37:00 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HELO_MISC_IP,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_PASS autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1773938223; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=xSmZFgFXggtmz347oYBCs2uJKsGAGY61faUPk26abt4=; b=J75dnkygGpXMb75P74rExoQZ67N9Y6Cg8HVUOmmF4IXYhFt47BxByjJuRPbpdn51f/EhTo FVxDc6agv1dG5PGih3bQXq4JHnb2JLqh4sEbmKxJ/tKjtjJ31pPz42vyIYJEcYfqqfnGcS 9NjoWucHjzpgWIRGpjLPLvTdoy2RhXQ= X-MC-Unique: IjNHSBTOMFK0MYhxr5H8nQ-1 X-Mimecast-MFC-AGG-ID: IjNHSBTOMFK0MYhxr5H8nQ_1773938221 To: devel@lists.libvirt.org Subject: [libvirt PATCH 02/11] conf: Refactor virHostdevIsPCIDevice Date: Thu, 19 Mar 2026 17:36:48 +0100 Message-ID: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: Mnc4R5niKEMyusIAEFwsH6kkZdEAcDlIRhR5RI68J7E_1773938221 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: ABILZXA2EL327QR4AACO4TWMY5N25JNW X-Message-ID-Hash: ABILZXA2EL327QR4AACO4TWMY5N25JNW X-MailFrom: phrdina@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Pavel Hrdina via Devel Reply-To: Pavel Hrdina X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1773938389895158500 Content-Type: text/plain; charset="utf-8"; x-default="true" From: Pavel Hrdina Future patches will need to check if the host device uses IOMMUFD or not but we also need to keep a function that will check only if it is PCI devic= e. Signed-off-by: Pavel Hrdina Reviewed-by: Peter Krempa --- src/conf/domain_conf.c | 34 +++++++++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index b1a73afef2..01e2bd631a 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -33026,6 +33026,33 @@ virHostdevIsMdevDevice(const virDomainHostdevDef *= hostdev) } =20 =20 +static bool +virHostdevPCIDevHasIOMMUFD(const virDomainHostdevDef *hostdev) +{ + return hostdev->source.subsys.u.pci.driver.name =3D=3D VIR_DEVICE_HOST= DEV_PCI_DRIVER_NAME_VFIO && + hostdev->source.subsys.u.pci.driver.iommufd =3D=3D VIR_TRISTATE_BO= OL_YES; +} + + +static bool +virHostdevIsPCIDeviceImpl(const virDomainHostdevDef *hostdev, + virTristateBool iommufd) +{ + if (hostdev->mode !=3D VIR_DOMAIN_HOSTDEV_MODE_SUBSYS) + return false; + + if (hostdev->source.subsys.type !=3D VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PC= I) + return false; + + if (iommufd !=3D VIR_TRISTATE_BOOL_ABSENT) { + bool hasIOMMUFD =3D iommufd =3D=3D VIR_TRISTATE_BOOL_YES; + return hasIOMMUFD =3D=3D virHostdevPCIDevHasIOMMUFD(hostdev); + } + + return true; +} + + /** * virHostdevIsPCIDevice: * @hostdev: host device to check @@ -33035,8 +33062,7 @@ virHostdevIsMdevDevice(const virDomainHostdevDef *h= ostdev) bool virHostdevIsPCIDevice(const virDomainHostdevDef *hostdev) { - return hostdev->mode =3D=3D VIR_DOMAIN_HOSTDEV_MODE_SUBSYS && - hostdev->source.subsys.type =3D=3D VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_= PCI; + return virHostdevIsPCIDeviceImpl(hostdev, VIR_TRISTATE_BOOL_ABSENT); } =20 =20 @@ -33049,9 +33075,7 @@ virHostdevIsPCIDevice(const virDomainHostdevDef *ho= stdev) bool virHostdevIsPCIDeviceWithIOMMUFD(const virDomainHostdevDef *hostdev) { - return virHostdevIsPCIDevice(hostdev) && - hostdev->source.subsys.u.pci.driver.name =3D=3D VIR_DEVICE_HOSTDEV= _PCI_DRIVER_NAME_VFIO && - hostdev->source.subsys.u.pci.driver.iommufd =3D=3D VIR_TRISTATE_BO= OL_YES; + return virHostdevIsPCIDeviceImpl(hostdev, VIR_TRISTATE_BOOL_YES); } =20 =20 --=20 2.53.0 From nobody Mon Mar 23 23:23:29 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1773938427; cv=none; d=zohomail.com; s=zohoarc; b=CQe9gQD0dM/u2GyFaf8eLBMMbQrpkBsTROw+eXOhs2E8LIVumFfcZij6gj3c9m5J1zYQczczGR7KE/CuaFm5Hn2e5fibfAdn2LlVjbtBEx7Yy5RQgJgJvKsiO8T8qCTAPY/RlD1haTw8ur0/iePkkgOrqkZTZLcGuhz1onmKnlY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773938427; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=g9hyZfQMtAoa3+O244UGs9wvQ2kRintsYQ5F9tiCHpU=; b=FMsxYyDMOrPR59JQIMNlC9QUfdnAe/8MeFyJAxWN6/VcmnUe5cwuPzHV6Y2fygtYCz0HjAU3yxudee5ZrQy8FEujVu5ovCd2iN1+2dNVa4ftdiMKEmDpgZE+G4whmAkygGP2XI1gh0x8lXbxRvpUJ/BQuG5WNp5SoV2Kk85j0Ow= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1773938427320421.30574685140004; Thu, 19 Mar 2026 09:40:27 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id AA4D241B4F; Thu, 19 Mar 2026 12:40:26 -0400 (EDT) Received: from [172.19.199.12] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id 8B8A241BD1; Thu, 19 Mar 2026 12:37:12 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 8F669418A5; Thu, 19 Mar 2026 12:37:05 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 12C0F3F363 for ; Thu, 19 Mar 2026 12:37:05 -0400 (EDT) Received: from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-460-YuTRoCrWNseBxMo_5bMUEw-1; Thu, 19 Mar 2026 12:37:03 -0400 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 9C09C19560B5 for ; Thu, 19 Mar 2026 16:37:02 +0000 (UTC) Received: from antique-work.redhat.com (unknown [10.44.33.53]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id E90E530001A1 for ; Thu, 19 Mar 2026 16:37:01 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HELO_MISC_IP,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_PASS autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1773938224; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=g9hyZfQMtAoa3+O244UGs9wvQ2kRintsYQ5F9tiCHpU=; b=LcSaxQHHO+sR7dK8U98rJBUz4uc9rl/mfF2Ezo8x7Fw3c5h5LCZtPNnsA+0Mbqys3qAijK sREwOcr+GJzIarcQaKZd4SFQ8qa8Npv4U5H3R34va96Kr9ldF3ovJvud2olzFsgyD8tX+9 OalLNMu3wCnNzypzP6ekgi4ZlPzCchY= X-MC-Unique: YuTRoCrWNseBxMo_5bMUEw-1 X-Mimecast-MFC-AGG-ID: YuTRoCrWNseBxMo_5bMUEw_1773938222 To: devel@lists.libvirt.org Subject: [libvirt PATCH 03/11] hypervisor: Fix virHostdevNeedsVFIO detection Date: Thu, 19 Mar 2026 17:36:49 +0100 Message-ID: <38e2ff795150d2d5e21fbb79b94fbddec77aa00b.1773938045.git.phrdina@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: DM9Dmlo3blp-cGfmUXBhOHMkwgkmEZCXo5U4OgsTEk8_1773938222 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: ZC6HNHYOHZV3BUQPTC74Z6L3PHO75C6J X-Message-ID-Hash: ZC6HNHYOHZV3BUQPTC74Z6L3PHO75C6J X-MailFrom: phrdina@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Pavel Hrdina via Devel Reply-To: Pavel Hrdina X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1773938428209154100 Content-Type: text/plain; charset="utf-8"; x-default="true" From: Pavel Hrdina Function virHostdevNeedsVFIO is used only in QEMU to figure out if the host device needs access to /dev/vfio/vfio, for PCI host devices that is true only if libvirt is not using IOMMUFD. Signed-off-by: Pavel Hrdina Reviewed-by: Peter Krempa --- src/conf/domain_conf.c | 13 +++++++++++++ src/conf/domain_conf.h | 3 +++ src/hypervisor/virhostdev.c | 2 +- src/libvirt_private.syms | 1 + 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 01e2bd631a..2d6ae64210 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -33079,6 +33079,19 @@ virHostdevIsPCIDeviceWithIOMMUFD(const virDomainHo= stdevDef *hostdev) } =20 =20 +/** + * virHostdevIsPCIDeviceWithIOMMUFD: + * @hostdev: host device to check + * + * Returns true if @hostdev is a PCI device with IOMMUFD disabled, false o= therwise. + */ +bool +virHostdevIsPCIDeviceWithoutIOMMUFD(const virDomainHostdevDef *hostdev) +{ + return virHostdevIsPCIDeviceImpl(hostdev, VIR_TRISTATE_BOOL_NO); +} + + static void virDomainObjGetMessagesIOErrorsSrc(virStorageSource *src, const char *diskdst, diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index e63230beec..018daef4c7 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -4735,6 +4735,9 @@ virHostdevIsPCIDevice(const virDomainHostdevDef *host= dev) bool virHostdevIsPCIDeviceWithIOMMUFD(const virDomainHostdevDef *hostdev) ATTRIBUTE_NONNULL(1); +bool +virHostdevIsPCIDeviceWithoutIOMMUFD(const virDomainHostdevDef *hostdev) + ATTRIBUTE_NONNULL(1); =20 void virDomainObjGetMessagesIOErrorsChain(virStorageSource *src, diff --git a/src/hypervisor/virhostdev.c b/src/hypervisor/virhostdev.c index 19907c76ba..0d5e582c08 100644 --- a/src/hypervisor/virhostdev.c +++ b/src/hypervisor/virhostdev.c @@ -2536,7 +2536,7 @@ virHostdevUpdateActiveNVMeDevices(virHostdevManager *= hostdev_mgr, bool virHostdevNeedsVFIO(const virDomainHostdevDef *hostdev) { - return virHostdevIsPCIDevice(hostdev) || + return virHostdevIsPCIDeviceWithoutIOMMUFD(hostdev) || virHostdevIsMdevDevice(hostdev); } =20 diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index cd028c488a..8dbbd7f64d 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -817,6 +817,7 @@ virDomainQemuMonitorEventStateRegisterID; virHostdevIsMdevDevice; virHostdevIsPCIDevice; virHostdevIsPCIDeviceWithIOMMUFD; +virHostdevIsPCIDeviceWithoutIOMMUFD; virHostdevIsSCSIDevice; =20 =20 --=20 2.53.0 From nobody Mon Mar 23 23:23:29 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1773938485; cv=none; d=zohomail.com; s=zohoarc; b=H7APGiWd/Au//1IKPzafE7qzU84c+/gkLUeYj3JBV6gZVd77C7sLMEhrikb2D6XJRkJ09waHjaEoJJcH+KUPz0e3GNXoAC7KqLyr3sRWGzMsHvjCdh97dnBBpr19k/RcFRmdsrRUvkmnRqLz/xXQ/zCskOwNiR8bfolzEuMwsuc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773938485; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=bYVm5TWksyx6O4UHIxvsAonDsvnAd4wn8m0FmxRFGrE=; b=AUi/PVsLlw+dMBiJGvjLyNq+4oZOu7mx5d7cAGYKvCajMEnj4Byf6CRejyM/+zwpZPIhl6mO9skaEZhwVel3KJ1IV0HRk9GGK+oHDqt9nvmxCwsVr6mAZt66iL+8nGaKERQdULBXbsiQ3F6ZCdJeFuQ1+449cW+YdY9m5faGdV4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1773938485600740.6883806554395; Thu, 19 Mar 2026 09:41:25 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 2840A41B5C; Thu, 19 Mar 2026 12:41:25 -0400 (EDT) Received: from [172.19.199.12] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id 2CF6841C0A; Thu, 19 Mar 2026 12:38:00 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 1C6524192E; Thu, 19 Mar 2026 12:37:56 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 59E8A419E5 for ; Thu, 19 Mar 2026 12:37:06 -0400 (EDT) Received: from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-70-jVRkQXmENYmuaJeQNQFPNw-1; Thu, 19 Mar 2026 12:37:04 -0400 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id B6F43195606F for ; Thu, 19 Mar 2026 16:37:03 +0000 (UTC) Received: from antique-work.redhat.com (unknown [10.44.33.53]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 0EA9A30002DF for ; Thu, 19 Mar 2026 16:37:02 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HELO_MISC_IP,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_PASS autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1773938226; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=bYVm5TWksyx6O4UHIxvsAonDsvnAd4wn8m0FmxRFGrE=; b=TtJC+n9GGGX5A0gA0doIZUXQ55CKHsa4nRtGgfRwlX5YEVhVj9LDgP+l30G92QvADpoZBG m6tth4xX3dQMyAbb2+6F3yjfQoR84oq6hzqmshXPu8MoAkXf/o3yUYcjwy2CyIl52n7Bo4 O3Fd2lf0fY/9BNM28AhFqeMasC/Uywc= X-MC-Unique: jVRkQXmENYmuaJeQNQFPNw-1 X-Mimecast-MFC-AGG-ID: jVRkQXmENYmuaJeQNQFPNw_1773938223 To: devel@lists.libvirt.org Subject: [libvirt PATCH 04/11] qemu: Expand call to qemuDomainNeedsVFIO Date: Thu, 19 Mar 2026 17:36:50 +0100 Message-ID: <7f13878fd7ac905dde4ed6babd35778afad04b2e.1773938045.git.phrdina@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: lyCS3CBSWBVDVyjQVOfAHLVQAEfrjyZ2wHNNHFEnBok_1773938223 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: Q7KMVWWWYTILWZ5LHNNQOUWTLYKEKDBD X-Message-ID-Hash: Q7KMVWWWYTILWZ5LHNNQOUWTLYKEKDBD X-MailFrom: phrdina@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Pavel Hrdina via Devel Reply-To: Pavel Hrdina X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1773938486863154100 Content-Type: text/plain; charset="utf-8"; x-default="true" From: Pavel Hrdina The function qemuDomainNeedsVFIO() was originally used by other parts of qemu code to figure out if the VM needs /dev/vfio/vfio. Later it was also used by code calculating locked memory limit for all architectures, and after that change again and used only for PPC64. Now it needs to be changed again due to IOMMUFD support, the /dev/vfio/vfio device is used by QEMU only if IOMMUFD is not used but for accounting we should most likely still consider any PCI host device. Signed-off-by: Pavel Hrdina Reviewed-by: Peter Krempa --- src/qemu/qemu_domain.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 90d0f02612..4520c3c28d 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -8259,7 +8259,10 @@ getPPC64MemLockLimitBytes(virDomainDef *def) passthroughLimit =3D maxMemory + 128 * (1ULL<<30) / 512 * nPCIHostBridges + 8192; - } else if (qemuDomainNeedsVFIO(def) || virDomainDefHasVDPANet(def)) { + } else if (virDomainDefHasPCIHostdev(def) || + virDomainDefHasMdevHostdev(def) || + virDomainDefHasNVMeDisk(def) || + virDomainDefHasVDPANet(def)) { /* For regular (non-NVLink2 present) VFIO passthrough, the value * of passthroughLimit is: * --=20 2.53.0 From nobody Mon Mar 23 23:23:29 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1773938520; cv=none; d=zohomail.com; s=zohoarc; b=YdsS1mcYEWd1oSUCO/id8K3mQuhEcznoLdApGXXhJfEdHJ+TjS7KFvJzafOPZQM7QxVSimi4TDRqLf9lYE/oTx+qEy2rFPNE9SiKbr7Zqc9u1XySwl9Dz4HFpHTMHWbX89CNXFinnT/NllViFIwCoyHu1mcHlmPbAfMb0INSxII= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773938520; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=Wdf88/Y0dqQIbZ4UspgsXDSN13RhyCgltyWpuqHqik4=; b=H1wDcDXps9vYkmg8AjDwt3l/eLnQeEmUE7KImvmtVwr91KmX1l3YmNUcPrZ0FGNU4YspxYGlUvwv3X2k4pCIQ+nZ2cA1AQv4BkrrnT3Gjf14wx3NwCzFG3khjgjzsqoUTfHj3pBSpEp+Bmw8PZ7jD1sgPfmyDxaCUF1OAnPUfHI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 177393852032768.88860985677366; Thu, 19 Mar 2026 09:42:00 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id CF80141B0D; Thu, 19 Mar 2026 12:41:59 -0400 (EDT) Received: from [172.19.199.12] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id 3B3CC41C8E; Thu, 19 Mar 2026 12:38:06 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id D376E4193A; Thu, 19 Mar 2026 12:38:01 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 9F17441AC0 for ; Thu, 19 Mar 2026 12:37:07 -0400 (EDT) Received: from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-220-YYCcRFgKMXerARmLi9wq7w-1; Thu, 19 Mar 2026 12:37:05 -0400 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id D1711195608B for ; Thu, 19 Mar 2026 16:37:04 +0000 (UTC) Received: from antique-work.redhat.com (unknown [10.44.33.53]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 2992F30002DF for ; Thu, 19 Mar 2026 16:37:03 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HELO_MISC_IP,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_PASS autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1773938227; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Wdf88/Y0dqQIbZ4UspgsXDSN13RhyCgltyWpuqHqik4=; b=gD3nQF+OgFQKgHsYj4Ad31QFJiDKRlb7KvSEXFNjj0zLZ6kNoXkJyFOY3M4FLti6lhJhPC ooJ8cZHQx5a8C9tYWn2U6hThLB+YihrCrJ/BUtqoMLiV/cJh3/lrMixgdkaq5dnWIYAuZD jQtc1kK05VJmXYdyzVBE8Ch5GPIEDJQ= X-MC-Unique: YYCcRFgKMXerARmLi9wq7w-1 X-Mimecast-MFC-AGG-ID: YYCcRFgKMXerARmLi9wq7w_1773938225 To: devel@lists.libvirt.org Subject: [libvirt PATCH 05/11] qemu: Update qemuDomainNeedsVFIO to ignore PCI hostdev with IOMMUFD Date: Thu, 19 Mar 2026 17:36:51 +0100 Message-ID: <70aa3385366d5ea467371971e34411ee70a066d9.1773938045.git.phrdina@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: -Dz_rMEQz0pA593_Myd9Lhf3IVNBfMq9xehPEfXC3kI_1773938225 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: DI5VF6EUAXH6PRWQ23TRUIA7DYDZU2FL X-Message-ID-Hash: DI5VF6EUAXH6PRWQ23TRUIA7DYDZU2FL X-MailFrom: phrdina@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Pavel Hrdina via Devel Reply-To: Pavel Hrdina X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1773938523451154100 Content-Type: text/plain; charset="utf-8"; x-default="true" From: Pavel Hrdina This function is used to figure out if VM needs access to /dev/vfio/vfio. In case of PCI host devices that is true only if IOMMUFD is not enabled. This fixes error when hotplugging PCI host device with IOMMUFD disabled to a VM that already has PCI host device with IOMMIFD enabled: Could not open '/dev/vfio/vfio': No such file or directory The function is used in this case to check if /dev/vfio/vfio was already made available to QEMU or not. Signed-off-by: Pavel Hrdina Reviewed-by: Peter Krempa --- src/conf/domain_conf.c | 14 ++++++++++++++ src/conf/domain_conf.h | 3 +++ src/libvirt_private.syms | 1 + src/qemu/qemu_domain.c | 2 +- 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 2d6ae64210..562803ea87 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -32764,6 +32764,20 @@ virDomainDefHasPCIHostdevWithIOMMUFD(const virDoma= inDef *def) } =20 =20 +bool +virDomainDefHasPCIHostdevWithoutIOMMUFD(const virDomainDef *def) +{ + size_t i; + + for (i =3D 0; i < def->nhostdevs; i++) { + if (virHostdevIsPCIDeviceWithoutIOMMUFD(def->hostdevs[i])) + return true; + } + + return false; +} + + bool virDomainDefHasMdevHostdev(const virDomainDef *def) { diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 018daef4c7..3b4980394e 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -4674,6 +4674,9 @@ virDomainDefHasPCIHostdev(const virDomainDef *def); bool virDomainDefHasPCIHostdevWithIOMMUFD(const virDomainDef *def); =20 +bool +virDomainDefHasPCIHostdevWithoutIOMMUFD(const virDomainDef *def); + bool virDomainDefHasMdevHostdev(const virDomainDef *def); =20 diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 8dbbd7f64d..cf0e71cc6a 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -349,6 +349,7 @@ virDomainDefHasOldStyleROUEFI; virDomainDefHasOldStyleUEFI; virDomainDefHasPCIHostdev; virDomainDefHasPCIHostdevWithIOMMUFD; +virDomainDefHasPCIHostdevWithoutIOMMUFD; virDomainDefHasTimer; virDomainDefHasUSB; virDomainDefHasVcpusOffline; diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 4520c3c28d..1d00ff2845 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -9284,7 +9284,7 @@ qemuDomainSupportsVideoVga(const virDomainVideoDef *v= ideo, bool qemuDomainNeedsVFIO(const virDomainDef *def) { - return virDomainDefHasPCIHostdev(def) || + return virDomainDefHasPCIHostdevWithoutIOMMUFD(def) || virDomainDefHasMdevHostdev(def) || virDomainDefHasNVMeDisk(def); } --=20 2.53.0 From nobody Mon Mar 23 23:23:29 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1773938565; cv=none; d=zohomail.com; s=zohoarc; b=BonK31x+3UbqMEV0GykM4KiwKOBq+AhIfRgczvl+538Sux//KhPHynHVlez0t4e6KhYEw3rxBZSVGLyxrnbpTFVTW4W+QpE9bsjFy/IvIe+1beIqe6LtwsDsJZEEU4YP2PkaMCaw7BlFU4Juy+6GItBZrFZHIC+O0muJu2+ezxA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773938565; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=JOHgJ96UnXbFuVIFE3+N+e/GhunOWRsNjHnIwPr1r2o=; b=EFDZS7dqAjXKw71O3gqWvVEW+iqWnjSW4z4D4fcQ4vnEQuvlW+bIAcz1TfPOIbDtUXi8Yeg+Xqdc5T2JoC7nuOMZeJS2TVLLRMNKV08IiVAWH6llNONCU3DFhVu7WVMny03QurNaFF3R83Xdwx7LHH/LPAhBCibGrnpjmBEUGTA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1773938565071970.8482891281; Thu, 19 Mar 2026 09:42:45 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 3616441B05; Thu, 19 Mar 2026 12:42:44 -0400 (EDT) Received: from [172.19.199.12] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id 93A9341CBC; Thu, 19 Mar 2026 12:38:33 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 596DF3F840; Thu, 19 Mar 2026 12:38:26 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 8F6B541B09 for ; Thu, 19 Mar 2026 12:37:08 -0400 (EDT) Received: from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-245-Wji47gkKOS-HGKws7Nm85w-1; Thu, 19 Mar 2026 12:37:06 -0400 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 1A1BE1800577 for ; Thu, 19 Mar 2026 16:37:06 +0000 (UTC) Received: from antique-work.redhat.com (unknown [10.44.33.53]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 6453B30002E0 for ; Thu, 19 Mar 2026 16:37:05 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HELO_MISC_IP,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_PASS autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1773938228; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=JOHgJ96UnXbFuVIFE3+N+e/GhunOWRsNjHnIwPr1r2o=; b=RV/p7skTiOtFv9TieHxC3LH0ENCEqJ4J1b3wV6F2THuLihTWVC0YzgehVw29fnpWPFpEYB 1UG4lImLeBiufDXfSlR17Ne7Dg9ufJ7wX3SKWuGE+Z6zvcyGIaPXYgDR+NbAgsT35iqXyx 5kTS2fqosvzTLXFbhtr9434tJ+MFwdk= X-MC-Unique: Wji47gkKOS-HGKws7Nm85w-1 X-Mimecast-MFC-AGG-ID: Wji47gkKOS-HGKws7Nm85w_1773938226 To: devel@lists.libvirt.org Subject: [libvirt PATCH 06/11] src: Use virHostdevIsPCIDeviceWith* to check for IOMMUFD Date: Thu, 19 Mar 2026 17:36:52 +0100 Message-ID: <2bcae3bdc2c6a8e758bb6e523223b0382f279ed0.1773938045.git.phrdina@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: nlEelnbu6WbbKwEv4H0kUSz6culOB08Re4kV5nIwpGw_1773938226 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: 6VFHNBDU3W5E6R7XXAPKYVXF6S6JWJCV X-Message-ID-Hash: 6VFHNBDU3W5E6R7XXAPKYVXF6S6JWJCV X-MailFrom: phrdina@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Pavel Hrdina via Devel Reply-To: Pavel Hrdina X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1773938566683158500 Content-Type: text/plain; charset="utf-8"; x-default="true" From: Pavel Hrdina Signed-off-by: Pavel Hrdina Reviewed-by: Peter Krempa --- src/qemu/qemu_cgroup.c | 2 +- src/qemu/qemu_command.c | 2 +- src/qemu/qemu_namespace.c | 2 +- src/qemu/qemu_validate.c | 2 +- src/security/security_apparmor.c | 2 +- src/security/security_dac.c | 4 ++-- src/security/security_selinux.c | 4 ++-- src/security/virt-aa-helper.c | 2 +- 8 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c index 6148990f19..0e1815f571 100644 --- a/src/qemu/qemu_cgroup.c +++ b/src/qemu/qemu_cgroup.c @@ -479,7 +479,7 @@ qemuSetupHostdevCgroup(virDomainObj *vm, g_autofree char *path =3D NULL; int perms; =20 - if (dev->source.subsys.u.pci.driver.iommufd =3D=3D VIR_TRISTATE_BOOL_Y= ES) + if (virHostdevIsPCIDeviceWithIOMMUFD(dev)) return 0; =20 if (!virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_DEVICE= S)) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index d0df7b7826..7286fd8b83 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -5266,7 +5266,7 @@ qemuBuildHostdevCommandLine(virCommand *cmd, if (qemuCommandAddExtDevice(cmd, hostdev->info, def, qemuCaps)= < 0) return -1; =20 - if (subsys->u.pci.driver.iommufd =3D=3D VIR_TRISTATE_BOOL_YES)= { + if (virHostdevIsPCIDeviceWithIOMMUFD(hostdev)) { qemuDomainHostdevPrivate *hostdevPriv =3D QEMU_DOMAIN_HOST= DEV_PRIVATE(hostdev); =20 qemuFDPassDirectTransferCommand(hostdevPriv->vfioDeviceFd,= cmd); diff --git a/src/qemu/qemu_namespace.c b/src/qemu/qemu_namespace.c index fb0734193d..4a063064f1 100644 --- a/src/qemu/qemu_namespace.c +++ b/src/qemu/qemu_namespace.c @@ -345,7 +345,7 @@ qemuDomainSetupHostdev(virDomainObj *vm, { g_autofree char *path =3D NULL; =20 - if (hostdev->source.subsys.u.pci.driver.iommufd =3D=3D VIR_TRISTATE_BO= OL_YES) + if (virHostdevIsPCIDeviceWithIOMMUFD(hostdev)) return 0; =20 if (qemuDomainGetHostdevPath(hostdev, &path, NULL) < 0) diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index f8a15374c9..b3db2c71d8 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -2791,7 +2791,7 @@ qemuValidateDomainDeviceDefHostdev(const virDomainHos= tdevDef *hostdev, return -1; } =20 - if (hostdev->source.subsys.u.pci.driver.iommufd =3D=3D VIR= _TRISTATE_BOOL_YES) { + if (virHostdevIsPCIDeviceWithIOMMUFD(hostdev)) { if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_IOMMUFD= )) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("IOMMUFD is not supported by this= version of qemu")); diff --git a/src/security/security_apparmor.c b/src/security/security_appar= mor.c index 40f13ec1a5..e53486ee0c 100644 --- a/src/security/security_apparmor.c +++ b/src/security/security_apparmor.c @@ -847,7 +847,7 @@ AppArmorSetSecurityHostdevLabel(virSecurityManager *mgr, return -1; =20 if (pcisrc->driver.name =3D=3D VIR_DEVICE_HOSTDEV_PCI_DRIVER_NAME_= VFIO) { - if (dev->source.subsys.u.pci.driver.iommufd !=3D VIR_TRISTATE_= BOOL_YES) { + if (virHostdevIsPCIDeviceWithoutIOMMUFD(dev)) { g_autofree char *vfioGroupDev =3D virPCIDeviceGetIOMMUGrou= pDev(pci); =20 if (!vfioGroupDev) diff --git a/src/security/security_dac.c b/src/security/security_dac.c index 5aa13741e6..05ab7ec2f9 100644 --- a/src/security/security_dac.c +++ b/src/security/security_dac.c @@ -1283,7 +1283,7 @@ virSecurityDACSetHostdevLabel(virSecurityManager *mgr, return -1; =20 if (pcisrc->driver.name =3D=3D VIR_DEVICE_HOSTDEV_PCI_DRIVER_NAME_= VFIO) { - if (dev->source.subsys.u.pci.driver.iommufd !=3D VIR_TRISTATE_= BOOL_YES) { + if (virHostdevIsPCIDeviceWithoutIOMMUFD(dev)) { g_autofree char *vfioGroupDev =3D virPCIDeviceGetIOMMUGrou= pDev(pci); =20 if (!vfioGroupDev) @@ -1454,7 +1454,7 @@ virSecurityDACRestoreHostdevLabel(virSecurityManager = *mgr, return -1; =20 if (pcisrc->driver.name =3D=3D VIR_DEVICE_HOSTDEV_PCI_DRIVER_NAME_= VFIO) { - if (dev->source.subsys.u.pci.driver.iommufd !=3D VIR_TRISTATE_= BOOL_YES) { + if (virHostdevIsPCIDeviceWithoutIOMMUFD(dev)) { g_autofree char *vfioGroupDev =3D virPCIDeviceGetIOMMUGrou= pDev(pci); =20 if (!vfioGroupDev) diff --git a/src/security/security_selinux.c b/src/security/security_selinu= x.c index 89546e3316..0824217f24 100644 --- a/src/security/security_selinux.c +++ b/src/security/security_selinux.c @@ -2255,7 +2255,7 @@ virSecuritySELinuxSetHostdevSubsysLabel(virSecurityMa= nager *mgr, return -1; =20 if (pcisrc->driver.name =3D=3D VIR_DEVICE_HOSTDEV_PCI_DRIVER_NAME_= VFIO) { - if (dev->source.subsys.u.pci.driver.iommufd !=3D VIR_TRISTATE_= BOOL_YES) { + if (virHostdevIsPCIDeviceWithoutIOMMUFD(dev)) { g_autofree char *vfioGroupDev =3D virPCIDeviceGetIOMMUGrou= pDev(pci); =20 if (!vfioGroupDev) @@ -2499,7 +2499,7 @@ virSecuritySELinuxRestoreHostdevSubsysLabel(virSecuri= tyManager *mgr, return -1; =20 if (pcisrc->driver.name =3D=3D VIR_DEVICE_HOSTDEV_PCI_DRIVER_NAME_= VFIO) { - if (dev->source.subsys.u.pci.driver.iommufd !=3D VIR_TRISTATE_= BOOL_YES) { + if (virHostdevIsPCIDeviceWithoutIOMMUFD(dev)) { g_autofree char *vfioGroupDev =3D virPCIDeviceGetIOMMUGrou= pDev(pci); =20 if (!vfioGroupDev) diff --git a/src/security/virt-aa-helper.c b/src/security/virt-aa-helper.c index e932e79dab..14b202bf7b 100644 --- a/src/security/virt-aa-helper.c +++ b/src/security/virt-aa-helper.c @@ -1133,7 +1133,7 @@ get_files(vahControl * ctl) =20 if ((driverName =3D=3D VIR_DEVICE_HOSTDEV_PCI_DRIVER_NAME_VFIO= || driverName =3D=3D VIR_DEVICE_HOSTDEV_PCI_DRIVER_NAME_DEFAU= LT) && - dev->source.subsys.u.pci.driver.iommufd !=3D VIR_TRISTATE_= BOOL_YES) { + virHostdevIsPCIDeviceWithoutIOMMUFD(dev)) { needsVfio =3D true; } =20 --=20 2.53.0 From nobody Mon Mar 23 23:23:29 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1773938608; cv=none; d=zohomail.com; s=zohoarc; b=cKSflM+k/+dly/QPgbmUPi53AgCXYC3Ma1fRHfej/jXz+fgC1dFtethywP05y2x6ZnSwL3sMejUzthHtu2u2ZdCDw/YsDa7jXHewVDhZ8+bVWCURvlPg255xrXwgOJBvKjJ06a/dfm2yTmSyzcgNX07sX/regGGb7VGF+gbQANs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773938608; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=02pdjjEf5vEy3sHZchktJDzwHtJ5KvsbVFFpwiJf0KA=; b=nnUNsEPg3MPvnn5EcPJoXsk7YaX8CUp7alrv3xn/PGZPpH7hvSbl0HG5ihDaSOq2/VWLKvNGz2quWNf7ITg+2FTkE8zw5H9imG6ngLJ1osmYGMUa2UEju/ofjhjiixrFBn7O/aTJbhYOylrSfRk44c39I8UW4KqJxpp58aWAms4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1773938608868965.0549438203107; Thu, 19 Mar 2026 09:43:28 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 3F0A341961; Thu, 19 Mar 2026 12:43:28 -0400 (EDT) Received: from [172.19.199.12] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id 4D98F41CE6; Thu, 19 Mar 2026 12:39:13 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id D6A9341ADD; Thu, 19 Mar 2026 12:39:08 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id E53ED4181C for ; Thu, 19 Mar 2026 12:37:09 -0400 (EDT) Received: from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-170-rePvilaGNd6VqcpAlPH31Q-1; Thu, 19 Mar 2026 12:37:08 -0400 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 458C019560A2 for ; Thu, 19 Mar 2026 16:37:07 +0000 (UTC) Received: from antique-work.redhat.com (unknown [10.44.33.53]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 8EBD230001A1 for ; Thu, 19 Mar 2026 16:37:06 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HELO_MISC_IP,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_PASS autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1773938229; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=02pdjjEf5vEy3sHZchktJDzwHtJ5KvsbVFFpwiJf0KA=; b=d0MDYcsQlswMzMthQVp/P738ucgNov7m3MIpbu/l/aOGOfdsE9Izgo2nCxC5XyriTj8b8d VOVnZi6iYFayGY9KeUSfIvlvAYoPdqFOXOXJ+Z+Q3Y0YKCCd74XLI/syC8o+viBCYiXYA0 M5uDgf9nvhM65h7ECN3SFL+eXPZhPjU= X-MC-Unique: rePvilaGNd6VqcpAlPH31Q-1 X-Mimecast-MFC-AGG-ID: rePvilaGNd6VqcpAlPH31Q_1773938227 To: devel@lists.libvirt.org Subject: [libvirt PATCH 07/11] conf: Introduce domain iommufd element Date: Thu, 19 Mar 2026 17:36:53 +0100 Message-ID: <1d0065abb64ee522aa155278f78e8602cd300f61.1773938045.git.phrdina@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: cwJ0NQf9MmcCUJomIHojHeX6jv_2Zw43GAs_mJJA3G8_1773938227 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: K5R4YY7UAZJO3JCZ2XNUWLNGMD26WA46 X-Message-ID-Hash: K5R4YY7UAZJO3JCZ2XNUWLNGMD26WA46 X-MailFrom: phrdina@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Pavel Hrdina via Devel Reply-To: Pavel Hrdina X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1773938611960154100 Content-Type: text/plain; charset="utf-8"; x-default="true" From: Pavel Hrdina In addition to configuring IOMMUFD for each host device add configuration for the whole VM. This will be extended to add support for passing FD to libvirt from management applications. Signed-off-by: Pavel Hrdina Reviewed-by: Peter Krempa --- docs/formatdomain.rst | 21 ++++++++++++ src/conf/domain_conf.c | 46 ++++++++++++++++++++++++++ src/conf/domain_conf.h | 2 ++ src/conf/schemas/domaincommon.rng | 12 +++++++ tests/genericxml2xmlindata/iommufd.xml | 18 ++++++++++ tests/genericxml2xmltest.c | 2 ++ 6 files changed, 101 insertions(+) create mode 100644 tests/genericxml2xmlindata/iommufd.xml diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst index 9f245293e6..f6096b2b9b 100644 --- a/docs/formatdomain.rst +++ b/docs/formatdomain.rst @@ -1382,6 +1382,27 @@ Block I/O Tuning ``write_iops_sec`` Write I/O operations per second limit. :since:`Since 1.2.2` =20 +Host Device IOMMUFD +------------------- + +:: + + + ... + + ... + + +``iommufd`` + :since:`Since 12.2.0 (QEMU/KVM only)` The optional ``iommufd`` element = with + mandatory ``enabled`` attribute can be used to enable IOMMUFD backned f= or + VFIO host devices. This provides an interface to propagate DMA mappings= to + kernel for assigned devices. Libvirt will open the /dev/iommu and VFIO = device + cdev and pass associated file descriptors to QEMU. + + This controls IOMMUFD usage for all host devices, each device can chang= e this + global default by setting ``iommufd`` attribute for ``driver`` element. + Resource partitioning --------------------- =20 diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 562803ea87..950c755ad9 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -19883,6 +19883,31 @@ virDomainDefControllersParse(virDomainDef *def, return 0; } =20 +static int +virDomainDefIommufdParse(virDomainDef *def, + xmlXPathContextPtr ctxt) +{ + int n; + g_autofree xmlNodePtr *nodes =3D NULL; + + if ((n =3D virXPathNodeSet("./iommufd", ctxt, &nodes)) < 0) + return -1; + + if (n > 1) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("only one 'iommufd' element is supported")); + return -1; + } + + if (n =3D=3D 0) + return 0; + + if (virXMLPropTristateBool(nodes[0], "enabled", VIR_XML_PROP_REQUIRED,= &def->iommufd) < 0) + return -1; + + return 0; +} + static virDomainDef * virDomainDefParseXML(xmlXPathContextPtr ctxt, virDomainXMLOption *xmlopt, @@ -19961,6 +19986,9 @@ virDomainDefParseXML(xmlXPathContextPtr ctxt, !virDomainIOThreadIDArrayHasPin(def)) def->placement_mode =3D VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO; =20 + if (virDomainDefIommufdParse(def, ctxt) < 0) + return NULL; + if ((n =3D virXPathNodeSet("./resource", ctxt, &nodes)) < 0) return NULL; =20 @@ -28172,6 +28200,22 @@ virDomainHubDefFormat(virBuffer *buf, } =20 =20 +static void +virDomainDefIommufdFormat(virBuffer *buf, + virDomainDef *def) +{ + g_auto(virBuffer) attrBuf =3D VIR_BUFFER_INITIALIZER; + + if (def->iommufd =3D=3D VIR_TRISTATE_BOOL_ABSENT) + return; + + virBufferAsprintf(&attrBuf, " enabled=3D'%s'", + virTristateBoolTypeToString(def->iommufd)); + + virXMLFormatElement(buf, "iommufd", &attrBuf, NULL); +} + + static void virDomainResourceDefFormat(virBuffer *buf, virDomainResourceDef *def) @@ -29721,6 +29765,8 @@ virDomainDefFormatInternalSetRootName(virDomainDef = *def, if (virDomainNumatuneFormatXML(buf, def->numa) < 0) return -1; =20 + virDomainDefIommufdFormat(buf, def); + virDomainResourceDefFormat(buf, def->resource); =20 for (i =3D 0; i < def->nsysinfo; i++) { diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 3b4980394e..f7e2eb6f5e 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -3244,6 +3244,8 @@ struct _virDomainDef { virTristateSwitch apic_eoi; virDomainFeatureTCG *tcg_features; =20 + virTristateBool iommufd; + bool tseg_specified; unsigned long long tseg_size; =20 diff --git a/src/conf/schemas/domaincommon.rng b/src/conf/schemas/domaincom= mon.rng index 376218118d..0436ec8edc 100644 --- a/src/conf/schemas/domaincommon.rng +++ b/src/conf/schemas/domaincommon.rng @@ -1025,6 +1025,10 @@ =20 + + + + @@ -1368,6 +1372,14 @@ =20 + + + + + + + + diff --git a/tests/genericxml2xmlindata/iommufd.xml b/tests/genericxml2xmli= ndata/iommufd.xml new file mode 100644 index 0000000000..63ea839383 --- /dev/null +++ b/tests/genericxml2xmlindata/iommufd.xml @@ -0,0 +1,18 @@ + + foo + c7a5fdbd-edaf-9455-926a-d65c16db1809 + 219136 + 219136 + 1 + + + hvm + + + + destroy + restart + destroy + + + diff --git a/tests/genericxml2xmltest.c b/tests/genericxml2xmltest.c index 6757fc44de..6be694cac5 100644 --- a/tests/genericxml2xmltest.c +++ b/tests/genericxml2xmltest.c @@ -263,6 +263,8 @@ mymain(void) =20 DO_TEST("iothreadids"); =20 + DO_TEST("iommufd"); + virObjectUnref(caps); virObjectUnref(xmlopt); =20 --=20 2.53.0 From nobody Mon Mar 23 23:23:29 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1773938656; cv=none; d=zohomail.com; s=zohoarc; b=LVW7kcNsvqAfcuMEqZBPycg+xltyzEJjepxUlU1fp4r87oBYBLbe8j1GwLaAtzONUJ2MLcosRnrsQYoWycBr80JQnXYlUGiVIJaZz8w93suCzRbzBLRo2EuNpqZwSokK9ouFgNfJeOBli/uE6/O8sYbFxvU54RxOPhy9SJKzCgw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773938656; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=pqQKmU2a9uPO/LL5cGvbS4iGyY4HVAULcePRHjCPhAQ=; b=nS9DunjAsxztm34feOGN3bcFOq3m//V86JCd1qgtusUfM5l70+Wh0KCDZwwMJ3lmxMoAqm1h2ZUUKNHvcpeGpZCc90+z4tOW2trwiHmUcNtiJU9bb6NpwQDFyz7L2xLeL9DpGiC6H32yfzja8F2J/srLiEBoNr13kXSvb50JOes= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1773938656235408.777322969788; Thu, 19 Mar 2026 09:44:16 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 5153741937; Thu, 19 Mar 2026 12:44:15 -0400 (EDT) Received: from [172.19.199.12] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id B694141CFD; Thu, 19 Mar 2026 12:39:54 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 0D3CA41819; Thu, 19 Mar 2026 12:39:51 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id EBD7A41B96 for ; Thu, 19 Mar 2026 12:37:10 -0400 (EDT) Received: from mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-251-zjgSV-2yOheyUkhd5eKjTA-1; Thu, 19 Mar 2026 12:37:09 -0400 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 58C2D19560AA for ; Thu, 19 Mar 2026 16:37:08 +0000 (UTC) Received: from antique-work.redhat.com (unknown [10.44.33.53]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id A76B030001A1 for ; Thu, 19 Mar 2026 16:37:07 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HELO_MISC_IP,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_PASS autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1773938230; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=pqQKmU2a9uPO/LL5cGvbS4iGyY4HVAULcePRHjCPhAQ=; b=OU7APRKZje9NvQKgVBwmcnnUpceX4tBZQPy8eKQy8HI4geIp9pT34hbe/tz1KXNQe2vEWr x32dMNME+n4be8cx4HFLwkNzv5LZYSQJpx+rRlrAAl3If/VLYkX9a2Al3vWygtAL8xDB7V PAzUA71BWCcpXqs2CU8vn12Q6Q1rnog= X-MC-Unique: zjgSV-2yOheyUkhd5eKjTA-1 X-Mimecast-MFC-AGG-ID: zjgSV-2yOheyUkhd5eKjTA_1773938228 To: devel@lists.libvirt.org Subject: [libvirt PATCH 08/11] qemu: Implement iommufd Date: Thu, 19 Mar 2026 17:36:54 +0100 Message-ID: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: bEAvbbaWkWhYfH4xxAZffnwvSZ3vjgO4q2Ip8CVinqI_1773938228 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: XRSVZE6MNC4OSIE5IJWQ4NOH5IFCEBBL X-Message-ID-Hash: XRSVZE6MNC4OSIE5IJWQ4NOH5IFCEBBL X-MailFrom: phrdina@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Pavel Hrdina via Devel Reply-To: Pavel Hrdina X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1773938657393158500 Content-Type: text/plain; charset="utf-8"; x-default="true" From: Pavel Hrdina Ideally this should be done in qemuDomainHostdevDefPostParse but that would require a lot of refactoring mainly due to how interface backed by hostdev works. Signed-off-by: Pavel Hrdina Reviewed-by: Peter Krempa --- src/qemu/qemu_domain.c | 12 +++++++++--- src/qemu/qemu_domain.h | 3 ++- src/qemu/qemu_hotplug.c | 2 +- src/qemu/qemu_process.c | 4 ++-- 4 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 1d00ff2845..e667d74f1a 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -10110,10 +10110,12 @@ qemuDomainPrepareHostdevSCSI(virDomainHostdevDef = *hostdev, =20 =20 static int -qemuDomainPrepareHostdevPCI(virDomainHostdevDef *hostdev, +qemuDomainPrepareHostdevPCI(const virDomainDef *def, + virDomainHostdevDef *hostdev, virQEMUCaps *qemuCaps) { virDeviceHostdevPCIDriverName *driverName =3D &hostdev->source.subsys.= u.pci.driver.name; + virDomainHostdevSubsysPCI *pcisrc =3D &hostdev->source.subsys.u.pci; =20 /* assign defaults for hostdev passthrough */ switch (*driverName) { @@ -10150,12 +10152,16 @@ qemuDomainPrepareHostdevPCI(virDomainHostdevDef *= hostdev, return -1; } =20 + if (pcisrc->driver.iommufd =3D=3D VIR_TRISTATE_BOOL_ABSENT) + pcisrc->driver.iommufd =3D def->iommufd; + return 0; } =20 =20 int -qemuDomainPrepareHostdev(virDomainHostdevDef *hostdev, +qemuDomainPrepareHostdev(const virDomainDef *def, + virDomainHostdevDef *hostdev, qemuDomainObjPrivate *priv) { if (hostdev->mode !=3D VIR_DOMAIN_HOSTDEV_MODE_SUBSYS) @@ -10165,7 +10171,7 @@ qemuDomainPrepareHostdev(virDomainHostdevDef *hostd= ev, case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: return qemuDomainPrepareHostdevSCSI(hostdev, priv); case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI: - return qemuDomainPrepareHostdevPCI(hostdev, priv->qemuCaps); + return qemuDomainPrepareHostdevPCI(def, hostdev, priv->qemuCaps); case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB: case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI_HOST: case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_MDEV: diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index 5755d2adb0..f797542a87 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -1040,7 +1040,8 @@ qemuDomainDiskCachemodeFlags(virDomainDiskCache cache= mode, bool *noflush); =20 int -qemuDomainPrepareHostdev(virDomainHostdevDef *hostdev, +qemuDomainPrepareHostdev(const virDomainDef *def, + virDomainHostdevDef *hostdev, qemuDomainObjPrivate *priv); =20 char * qemuDomainGetManagedPRSocketPath(qemuDomainObjPrivate *priv); diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index d6be851e61..adae94f0a2 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -2891,7 +2891,7 @@ qemuDomainAttachHostDevice(virQEMUDriver *driver, return -1; } =20 - if (qemuDomainPrepareHostdev(hostdev, vm->privateData) < 0) + if (qemuDomainPrepareHostdev(vm->def, hostdev, vm->privateData) < 0) return -1; =20 switch (hostdev->source.subsys.type) { diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index ecd05b4bf6..fed6079ad2 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -6087,7 +6087,7 @@ qemuProcessPrepareDomainNetwork(virDomainObj *vm) /* For hostdev present in qemuProcessPrepareDomain() phase= this was * done already, but this code runs after that, so we have= to call * it ourselves. */ - if (qemuDomainPrepareHostdev(hostdev, priv) < 0) + if (qemuDomainPrepareHostdev(def, hostdev, priv) < 0) return -1; =20 virDomainHostdevInsert(def, hostdev); @@ -6875,7 +6875,7 @@ qemuProcessPrepareDomainHostdevs(virDomainObj *vm, for (i =3D 0; i < vm->def->nhostdevs; i++) { virDomainHostdevDef *hostdev =3D vm->def->hostdevs[i]; =20 - if (qemuDomainPrepareHostdev(hostdev, priv) < 0) + if (qemuDomainPrepareHostdev(vm->def, hostdev, priv) < 0) return -1; } =20 --=20 2.53.0 From nobody Mon Mar 23 23:23:29 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1773938733; cv=none; d=zohomail.com; s=zohoarc; b=fYHHD4heBjtZ4lj276uOvPyTY8DKFsNJd0HNh+SrT4XvixmkVSb3Sp0AEUSJXvH9yFcyqPM92g7eDX9KTA6813rzU/DSDqtilCqUq+uY5pbmDBgd+dBNUDmka1krmd0LOfiTUGVZIfB/E3MwAhAH+RPC2QDpotZFeo7yL45hCI0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773938733; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=8C7173bCtf18HdlMba8lYuF2unkMag6cDE8/V7lHf08=; b=kwQI4HfKT2Zle/2F8tWIHL52LGrCvQg6kMW15skm3Zn2RQLo4Qps7vrDKMw2tpnUeKqSYXqpxUYHVk1H9omTfRa9X9sL5Wbzqr3WlFTTRdnBedq+JjbPtGKH9f0DbNpbeDMznvNi8EBgD7R0tI/PitE1aDMvqpAc5c8iNGF3m3Y= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1773938733955646.9888982339428; Thu, 19 Mar 2026 09:45:33 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 7D67341AA9; Thu, 19 Mar 2026 12:45:33 -0400 (EDT) Received: from [172.19.199.12] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id 1C17841D46; Thu, 19 Mar 2026 12:40:36 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 547BD418B7; Thu, 19 Mar 2026 12:40:29 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 0446C41852 for ; Thu, 19 Mar 2026 12:37:12 -0400 (EDT) Received: from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-402-ISrGMYbcPpWSy-i8L84VBA-1; Thu, 19 Mar 2026 12:37:10 -0400 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 7242A180044D for ; Thu, 19 Mar 2026 16:37:09 +0000 (UTC) Received: from antique-work.redhat.com (unknown [10.44.33.53]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id BF01C30002DF for ; Thu, 19 Mar 2026 16:37:08 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HELO_MISC_IP,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_PASS autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1773938232; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=8C7173bCtf18HdlMba8lYuF2unkMag6cDE8/V7lHf08=; b=KWwsB8E80f7NnFvDOqsFb4F9ZVsZnwlgypN0l4Z4XmgBYNnBruYfLCa4GwviXwF1wvsNoe N6yUOSoiZpQdj1Owca+USJJEPAFUN6iZ6YtB02YLGnTsXqlL8mmdylnD1NaKyecJnSQbCl lLTlh9ezPHqybk6J5IEnCA04LkqM0GI= X-MC-Unique: ISrGMYbcPpWSy-i8L84VBA-1 X-Mimecast-MFC-AGG-ID: ISrGMYbcPpWSy-i8L84VBA_1773938229 To: devel@lists.libvirt.org Subject: [libvirt PATCH 09/11] conf: Add iommufd fdgroup support Date: Thu, 19 Mar 2026 17:36:55 +0100 Message-ID: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: 3dAANHxqrq62pYVEX5MoufiYqv5shWwUVyUpFrRja5g_1773938229 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: 74QESKESLA43LRWA65SGY2RELXQMRJ4Z X-Message-ID-Hash: 74QESKESLA43LRWA65SGY2RELXQMRJ4Z X-MailFrom: phrdina@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Pavel Hrdina via Devel Reply-To: Pavel Hrdina X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1773938735874154100 Content-Type: text/plain; charset="utf-8"; x-default="true" From: Pavel Hrdina This will allow management applications running libvirt without necessary permissions to pass FD for /dev/iommu with per-process locked memory accounting enabled. Kernel uses per-user locked memory accounting by default which may cause error while starting multiple VMs with host devices using IOMMUFD. Signed-off-by: Pavel Hrdina Reviewed-by: Peter Krempa --- docs/formatdomain.rst | 8 +++++++- src/conf/domain_conf.c | 7 +++++++ src/conf/domain_conf.h | 1 + src/conf/domain_validate.c | 16 ++++++++++++++++ src/conf/schemas/domaincommon.rng | 3 +++ tests/genericxml2xmlindata/iommufd.xml | 2 +- 6 files changed, 35 insertions(+), 2 deletions(-) diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst index f6096b2b9b..412b2b4ddd 100644 --- a/docs/formatdomain.rst +++ b/docs/formatdomain.rst @@ -1389,7 +1389,7 @@ Host Device IOMMUFD =20 ... - + ... =20 @@ -1403,6 +1403,12 @@ Host Device IOMMUFD This controls IOMMUFD usage for all host devices, each device can chang= e this global default by setting ``iommufd`` attribute for ``driver`` element. =20 + Optional ``fdgroup`` attribute can be used together with + ``virDomainFDAssociate()`` to pass /dev/iommu FD instead of letting + libvirt to open it. Caller is responsible for setting per-process locked + memory accounting otherwise starting multiple VMs with host devices usi= ng + IOMMUFD may fail. + Resource partitioning --------------------- =20 diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 950c755ad9..71488a0840 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -4242,6 +4242,8 @@ void virDomainDefFree(virDomainDef *def) g_free(def->kvm_features); g_free(def->tcg_features); =20 + g_free(def->iommufd_fdgroup); + virBlkioDeviceArrayClear(def->blkio.devices, def->blkio.ndevices); g_free(def->blkio.devices); @@ -19905,6 +19907,8 @@ virDomainDefIommufdParse(virDomainDef *def, if (virXMLPropTristateBool(nodes[0], "enabled", VIR_XML_PROP_REQUIRED,= &def->iommufd) < 0) return -1; =20 + def->iommufd_fdgroup =3D virXMLPropString(nodes[0], "fdgroup"); + return 0; } =20 @@ -28212,6 +28216,9 @@ virDomainDefIommufdFormat(virBuffer *buf, virBufferAsprintf(&attrBuf, " enabled=3D'%s'", virTristateBoolTypeToString(def->iommufd)); =20 + if (def->iommufd_fdgroup) + virBufferAsprintf(&attrBuf, " fdgroup=3D'%s'", def->iommufd_fdgrou= p); + virXMLFormatElement(buf, "iommufd", &attrBuf, NULL); } =20 diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index f7e2eb6f5e..75acfc46bf 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -3245,6 +3245,7 @@ struct _virDomainDef { virDomainFeatureTCG *tcg_features; =20 virTristateBool iommufd; + char *iommufd_fdgroup; =20 bool tseg_specified; unsigned long long tseg_size; diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c index 7e3da84767..a49156061f 100644 --- a/src/conf/domain_validate.c +++ b/src/conf/domain_validate.c @@ -2003,6 +2003,19 @@ virDomainDefValidateThrottleGroups(const virDomainDe= f *def) } =20 =20 +static int +virDomainDefValidateIommufd(const virDomainDef *def) +{ + if (def->iommufd =3D=3D VIR_TRISTATE_BOOL_NO && def->iommufd_fdgroup) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("Setting 'fdgroup' when 'iommufd' is disabled is = not supported.")); + return -1; + } + + return 0; +} + + static int virDomainDefValidateInternal(const virDomainDef *def, virDomainXMLOption *xmlopt) @@ -2064,6 +2077,9 @@ virDomainDefValidateInternal(const virDomainDef *def, if (virDomainDefValidateThrottleGroups(def) < 0) return -1; =20 + if (virDomainDefValidateIommufd(def) < 0) + return -1; + return 0; } =20 diff --git a/src/conf/schemas/domaincommon.rng b/src/conf/schemas/domaincom= mon.rng index 0436ec8edc..db1dcd3bb7 100644 --- a/src/conf/schemas/domaincommon.rng +++ b/src/conf/schemas/domaincommon.rng @@ -1377,6 +1377,9 @@ + + + =20 diff --git a/tests/genericxml2xmlindata/iommufd.xml b/tests/genericxml2xmli= ndata/iommufd.xml index 63ea839383..10d59ca548 100644 --- a/tests/genericxml2xmlindata/iommufd.xml +++ b/tests/genericxml2xmlindata/iommufd.xml @@ -4,7 +4,7 @@ 219136 219136 1 - + hvm --=20 2.53.0 From nobody Mon Mar 23 23:23:29 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1773938693; cv=none; d=zohomail.com; s=zohoarc; b=HjQKsF0XJaupqDPBq9V8dnKeGwZzWq0FDw2gBmywUwx9ZHlhKnLree731DCGfOSXjH2u7W6Sa9lNUqK3iw3CeH9oaJJpZPCe+a7/hNW3qALwZyw7jwsvWeKshS0JlKfYJuLVbNLa9QY8zEKuOMPGbSs0dA4gvKZKQon80oWuJ8E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773938693; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=fvCYNP28g0c5B8Xydj9c9/Yof2xbb2Ai33ALBZmUYgw=; b=GyOVY1nkIipYKPV+TgrGdbUe/yC6/5IvzhAt1CYJHitzQdXz1t24dK2H4lxHhRaOhWNaaPx7SZ2Eibz8pAyiB1YJbOg3xumLL8mEZO3PaZENyEs80yd0slHmXyRx8CiKPw+E7YJEJf5A3zpDkzyXr2nvrr7mTf78qSdV4AGbz+A= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1773938693626146.32940390732153; Thu, 19 Mar 2026 09:44:53 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id C217E41AC4; Thu, 19 Mar 2026 12:44:52 -0400 (EDT) Received: from [172.19.199.12] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id AE8F141D07; Thu, 19 Mar 2026 12:40:33 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 1FA4341B0B; Thu, 19 Mar 2026 12:40:29 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 13C0141BE2 for ; Thu, 19 Mar 2026 12:37:13 -0400 (EDT) Received: from mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-492-fyExUEK8PBeeTcqsLCimmQ-1; Thu, 19 Mar 2026 12:37:11 -0400 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 8B5CD1944F01 for ; Thu, 19 Mar 2026 16:37:10 +0000 (UTC) Received: from antique-work.redhat.com (unknown [10.44.33.53]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id D7D5930002E0 for ; Thu, 19 Mar 2026 16:37:09 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HELO_MISC_IP,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_PASS autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1773938232; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=fvCYNP28g0c5B8Xydj9c9/Yof2xbb2Ai33ALBZmUYgw=; b=iTNxsbzQ82JndRbZ7B2mmCKBgnZqHKbe2xNPg5Oya+PAJvg+HsKEhesjcR668wOVw+Yp2o csfp0qezm4eJxgCHEdPOCCYV62gYtx3KHFBW+0uxojvjrKxxtek46L/l4/ng1P31ftDefE sa8VVb+qfGBaD4hFPbX37soahT4xb4U= X-MC-Unique: fyExUEK8PBeeTcqsLCimmQ-1 X-Mimecast-MFC-AGG-ID: fyExUEK8PBeeTcqsLCimmQ_1773938230 To: devel@lists.libvirt.org Subject: [libvirt PATCH 10/11] qemu: Implement iommufd fdgroup Date: Thu, 19 Mar 2026 17:36:56 +0100 Message-ID: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: _vdpCSVrcOgJ7hp1C0yNZVZ7L95sq-VoXO-6xbcKN40_1773938230 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: UATYAA2NNZAFWXNBCOJJN24XHCQEYGWO X-Message-ID-Hash: UATYAA2NNZAFWXNBCOJJN24XHCQEYGWO X-MailFrom: phrdina@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Pavel Hrdina via Devel Reply-To: Pavel Hrdina X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1773938695394158500 Content-Type: text/plain; charset="utf-8"; x-default="true" From: Pavel Hrdina When fdgroup is used for iommufd we will start QEMU with -object iommufd even if the VM has no host device. When virDomainFDAssociate() is used the FD libvirt is holding is closed with connection. Signed-off-by: Pavel Hrdina Reviewed-by: Peter Krempa --- src/qemu/qemu_command.c | 4 +++- src/qemu/qemu_hotplug.c | 4 ++-- src/qemu/qemu_process.c | 47 ++++++++++++++++++++++++++++++++++++++--- 3 files changed, 49 insertions(+), 6 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 7286fd8b83..7801d99738 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -5367,8 +5367,10 @@ qemuBuildIOMMUFDCommandLine(virCommand *cmd, qemuDomainObjPrivate *priv =3D vm->privateData; g_autoptr(virJSONValue) props =3D NULL; =20 - if (!virDomainDefHasPCIHostdevWithIOMMUFD(def)) + if (!virDomainDefHasPCIHostdevWithIOMMUFD(def) && + !def->iommufd_fdgroup) { return 0; + } =20 qemuFDPassDirectTransferCommand(priv->iommufd, cmd); =20 diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index adae94f0a2..c86ebc59d0 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -1615,7 +1615,7 @@ qemuDomainAttachHostPCIDevice(virQEMUDriver *driver, if (qemuProcessOpenVfioDeviceFd(vm, hostdev) < 0) goto error; =20 - if (!priv->iommufdState) { + if (!priv->iommufdState && !vm->def->iommufd_fdgroup) { if (qemuProcessOpenIommuFd(vm) < 0) goto error; =20 @@ -5041,7 +5041,7 @@ qemuDomainRemoveHostDevice(virQEMUDriver *driver, } } =20 - if (priv->iommufdState && + if (priv->iommufdState && !vm->def->iommufd_fdgroup && !virDomainDefHasPCIHostdevWithIOMMUFD(vm->def)) { qemuDomainObjEnterMonitor(vm); ignore_value(qemuMonitorDelObject(priv->mon, "iommufd0", false)); diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index fed6079ad2..c78fb4273c 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -7743,6 +7743,44 @@ qemuProcessOpenIommuFd(virDomainObj *vm) return 0; } =20 +/** + * qemuProcessPrepareIommuFd: + * @vm: domain object + * + * Find passed FD via virDomainFDAssociate() API for the VM. + * + * Returns: 0 on success, -1 on failure + */ +static int +qemuProcessPrepareIommuFd(virDomainObj *vm) +{ + qemuDomainObjPrivate *priv =3D vm->privateData; + virDomainFDTuple *fdt =3D virHashLookup(priv->fds, vm->def->iommufd_fd= group); + VIR_AUTOCLOSE iommufd =3D -1; + + if (!fdt) { + virReportError(VIR_ERR_INVALID_ARG, + _("file descriptor group '%1$s' was not associated = with the domain"), + vm->def->iommufd_fdgroup); + return -1; + } + + if (fdt->nfds !=3D 1) { + virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", + _("Only one file descriptor needs to be associated = with iommufd")); + return -1; + } + + iommufd =3D dup(fdt->fds[0]); + + if (qemuSecuritySetImageFDLabel(priv->driver->securityManager, vm->def= , iommufd) < 0) + return -1; + + priv->iommufd =3D qemuFDPassDirectNew("iommufd", &iommufd); + + return 0; +} + /** * qemuProcessOpenVfioDeviceFd: * @hostdev: host device definition @@ -7798,9 +7836,12 @@ qemuProcessPrepareHostHostdev(virDomainObj *vm) } =20 /* Open IOMMU FD */ - if (virDomainDefHasPCIHostdevWithIOMMUFD(vm->def) && - qemuProcessOpenIommuFd(vm) < 0) { - return -1; + if (vm->def->iommufd_fdgroup) { + if (qemuProcessPrepareIommuFd(vm) < 0) + return -1; + } else if (virDomainDefHasPCIHostdevWithIOMMUFD(vm->def)) { + if (qemuProcessOpenIommuFd(vm) < 0) + return -1; } =20 return 0; --=20 2.53.0 From nobody Mon Mar 23 23:23:29 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1773938788; cv=none; d=zohomail.com; s=zohoarc; b=JIh4xZnYn+n6W18kEJqcTbF3kqCO/IrV3d4/ugOGnJlI07eKdUetjbDG3ij+D5/Dm8WWRja7i2StkSVhOx69iDDL2WmxEDpaOMbXlQRlzpZEyNSaltNKuBHHV8zJWGm0uDqnXWfKFmzpLuOGNaFNthkpQokkpqArYhZHCyfOXfE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773938788; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=AaANdqwsP8tWZutdwAsKavsQcyzhk/adE9ED6e0X2Eg=; b=OJqsqckH59eQf2wvYBo1U8QcPdrTVAAOuuN7e/Pof3ZKi6w6n3eeKY6mZGCbgnp3JGaGDUjLoPusNPXa/s0XdexLjyYzLdhd8iM2Hj3BgqCaVunR+TnhlvEVy/BKSChgbi0+VrAedduCB0lD+Z2RZAxUu/yZW9YNwZqZFOGZD64= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1773938788247115.55707132802604; Thu, 19 Mar 2026 09:46:28 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id BB71241819; Thu, 19 Mar 2026 12:46:27 -0400 (EDT) Received: from [172.19.199.12] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id 6A2A841D73; Thu, 19 Mar 2026 12:40:48 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 2121D41822; Thu, 19 Mar 2026 12:40:43 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 02C06418C1 for ; Thu, 19 Mar 2026 12:37:14 -0400 (EDT) Received: from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-41-0PgPuYgyP86Y84JknUW4bw-1; Thu, 19 Mar 2026 12:37:12 -0400 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id A2DDE18005BB for ; Thu, 19 Mar 2026 16:37:11 +0000 (UTC) Received: from antique-work.redhat.com (unknown [10.44.33.53]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id F075D30002E2 for ; Thu, 19 Mar 2026 16:37:10 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HELO_MISC_IP,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_PASS autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1773938234; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=AaANdqwsP8tWZutdwAsKavsQcyzhk/adE9ED6e0X2Eg=; b=RbT2DTthLIPC0nK+E849XSU1Qm16w9jAaz8oBvKQNaaRRlBubcg8WhfbuA8HfPSg5m/gkE k3mGz3vGmZF/OG/DlamO2QfT6uC12E7mlEf0WnNkQU6rhOFK5Jnsc+T8NYZABy6c24VgLq 3E60z4pEkGGREY39WHeaKNVSKuUCKa8= X-MC-Unique: 0PgPuYgyP86Y84JknUW4bw-1 X-Mimecast-MFC-AGG-ID: 0PgPuYgyP86Y84JknUW4bw_1773938231 To: devel@lists.libvirt.org Subject: [libvirt PATCH 11/11] tests: Add iommufd fdgroup test Date: Thu, 19 Mar 2026 17:36:57 +0100 Message-ID: <22eb53973dd9fff0234362d64a6afe82f53cbc50.1773938045.git.phrdina@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: Jes39lG4hRQLhGwMoBdnZ-djFoyiZ-1MMfg6WieRojk_1773938231 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: LMTMUEOBYEVW4TOHPHXRHKYFWA4HJOQL X-Message-ID-Hash: LMTMUEOBYEVW4TOHPHXRHKYFWA4HJOQL X-MailFrom: phrdina@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Pavel Hrdina via Devel Reply-To: Pavel Hrdina X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1773938790910154100 Content-Type: text/plain; charset="utf-8"; x-default="true" From: Pavel Hrdina Signed-off-by: Pavel Hrdina Reviewed-by: Peter Krempa --- src/qemu/qemu_process.c | 12 ++-- src/qemu/qemu_processpriv.h | 2 + .../iommufd-q35-fd.x86_64-latest.args | 41 +++++++++++++ .../iommufd-q35-fd.x86_64-latest.xml | 60 +++++++++++++++++++ tests/qemuxmlconfdata/iommufd-q35-fd.xml | 38 ++++++++++++ tests/qemuxmlconftest.c | 9 ++- 6 files changed, 157 insertions(+), 5 deletions(-) create mode 100644 tests/qemuxmlconfdata/iommufd-q35-fd.x86_64-latest.args create mode 100644 tests/qemuxmlconfdata/iommufd-q35-fd.x86_64-latest.xml create mode 100644 tests/qemuxmlconfdata/iommufd-q35-fd.xml diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index c78fb4273c..14bc88b5cc 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -7751,7 +7751,7 @@ qemuProcessOpenIommuFd(virDomainObj *vm) * * Returns: 0 on success, -1 on failure */ -static int +int qemuProcessPrepareIommuFd(virDomainObj *vm) { qemuDomainObjPrivate *priv =3D vm->privateData; @@ -7771,10 +7771,14 @@ qemuProcessPrepareIommuFd(virDomainObj *vm) return -1; } =20 - iommufd =3D dup(fdt->fds[0]); + if (fdt->testfds) { + iommufd =3D dup2(fdt->fds[0], fdt->testfds[0]); + } else { + iommufd =3D dup(fdt->fds[0]); =20 - if (qemuSecuritySetImageFDLabel(priv->driver->securityManager, vm->def= , iommufd) < 0) - return -1; + if (qemuSecuritySetImageFDLabel(priv->driver->securityManager, vm-= >def, iommufd) < 0) + return -1; + } =20 priv->iommufd =3D qemuFDPassDirectNew("iommufd", &iommufd); =20 diff --git a/src/qemu/qemu_processpriv.h b/src/qemu/qemu_processpriv.h index 0ba5897f40..39cb7dd0dc 100644 --- a/src/qemu/qemu_processpriv.h +++ b/src/qemu/qemu_processpriv.h @@ -37,3 +37,5 @@ void qemuProcessHandleDeviceDeleted(qemuMonitor *mon, const char *devAlias); =20 int qemuProcessQMPInitMonitor(qemuMonitor *mon); + +int qemuProcessPrepareIommuFd(virDomainObj *vm); diff --git a/tests/qemuxmlconfdata/iommufd-q35-fd.x86_64-latest.args b/test= s/qemuxmlconfdata/iommufd-q35-fd.x86_64-latest.args new file mode 100644 index 0000000000..7df3d173f3 --- /dev/null +++ b/tests/qemuxmlconfdata/iommufd-q35-fd.x86_64-latest.args @@ -0,0 +1,41 @@ +LC_ALL=3DC \ +PATH=3D/bin \ +HOME=3D/var/lib/libvirt/qemu/domain--1-q35-test \ +USER=3Dtest \ +LOGNAME=3Dtest \ +XDG_DATA_HOME=3D/var/lib/libvirt/qemu/domain--1-q35-test/.local/share \ +XDG_CACHE_HOME=3D/var/lib/libvirt/qemu/domain--1-q35-test/.cache \ +XDG_CONFIG_HOME=3D/var/lib/libvirt/qemu/domain--1-q35-test/.config \ +/usr/bin/qemu-system-x86_64 \ +-name guest=3Dq35-test,debug-threads=3Don \ +-S \ +-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/va= r/lib/libvirt/qemu/domain--1-q35-test/master-key.aes"}' \ +-machine q35,usb=3Doff,dump-guest-core=3Doff,memory-backend=3Dpc.ram,acpi= =3Doff \ +-accel tcg \ +-cpu qemu64 \ +-m size=3D2097152k \ +-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":2147483648}= ' \ +-overcommit mem-lock=3Doff \ +-smp 2,sockets=3D2,cores=3D1,threads=3D1 \ +-uuid 11dbdcdd-4c3b-482b-8903-9bdb8c0a2774 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=3Dcharmonitor,fd=3D1729,server=3Don,wait=3Doff \ +-mon chardev=3Dcharmonitor,id=3Dmonitor,mode=3Dcontrol \ +-rtc base=3Dutc \ +-no-shutdown \ +-boot strict=3Don \ +-device '{"driver":"pcie-root-port","port":16,"chassis":1,"id":"pci.1","bu= s":"pcie.0","multifunction":true,"addr":"0x2"}' \ +-device '{"driver":"pcie-root-port","port":17,"chassis":2,"id":"pci.2","bu= s":"pcie.0","addr":"0x2.0x1"}' \ +-device '{"driver":"qemu-xhci","id":"usb","bus":"pci.1","addr":"0x0"}' \ +-blockdev '{"driver":"host_device","filename":"/dev/HostVG/QEMUGuest1","no= de-name":"libvirt-1-storage","read-only":false}' \ +-device '{"driver":"ide-hd","bus":"ide.0","drive":"libvirt-1-storage","id"= :"sata0-0-0","bootindex":1}' \ +-audiodev '{"id":"audio1","driver":"none"}' \ +-device '{"driver":"qxl-vga","id":"video0","max_outputs":1,"ram_size":6710= 8864,"vram_size":33554432,"vram64_size_mb":0,"vgamem_mb":8,"bus":"pcie.0","= addr":"0x1"}' \ +-global ICH9-LPC.noreboot=3Doff \ +-watchdog-action reset \ +-object '{"qom-type":"iommufd","id":"iommufd0","fd":"20"}' \ +-device '{"driver":"vfio-pci","id":"hostdev0","iommufd":"iommufd0","fd":"0= ","bus":"pcie.0","addr":"0x3"}' \ +-sandbox on,obsolete=3Ddeny,elevateprivileges=3Ddeny,spawn=3Ddeny,resource= control=3Ddeny \ +-msg timestamp=3Don diff --git a/tests/qemuxmlconfdata/iommufd-q35-fd.x86_64-latest.xml b/tests= /qemuxmlconfdata/iommufd-q35-fd.x86_64-latest.xml new file mode 100644 index 0000000000..a6be49cbb3 --- /dev/null +++ b/tests/qemuxmlconfdata/iommufd-q35-fd.x86_64-latest.xml @@ -0,0 +1,60 @@ + + q35-test + 11dbdcdd-4c3b-482b-8903-9bdb8c0a2774 + 2097152 + 2097152 + 2 + + + hvm + + + + qemu64 + + + destroy + restart + destroy + + /usr/bin/qemu-system-x86_64 + + + + +
+ + + + + +
+ + + + +
+ + +
+ + +
+ + + +