From nobody Fri Nov 21 10:13:15 2025 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; arc=fail (Bad Signature); dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1762195786558977.795488531635; Mon, 3 Nov 2025 10:49:46 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 993) id E1C8244198; Mon, 3 Nov 2025 13:49:45 -0500 (EST) Received: from [172.19.199.29] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id E68D7441AB; Mon, 3 Nov 2025 13:47:41 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 993) id 0797443EB5; Mon, 3 Nov 2025 13:47:30 -0500 (EST) Received: from CH1PR05CU001.outbound.protection.outlook.com (mail-northcentralusazon11010047.outbound.protection.outlook.com [52.101.193.47]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (prime256v1) server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id ADC9243EB1 for ; Mon, 3 Nov 2025 13:47:29 -0500 (EST) Received: from SJ0PR12MB6855.namprd12.prod.outlook.com (2603:10b6:a03:47e::6) by BL3PR12MB6643.namprd12.prod.outlook.com (2603:10b6:208:38f::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9275.15; Mon, 3 Nov 2025 18:47:24 +0000 Received: from SJ0PR12MB6855.namprd12.prod.outlook.com ([fe80::1924:8e6f:c8f3:83c2]) by SJ0PR12MB6855.namprd12.prod.outlook.com ([fe80::1924:8e6f:c8f3:83c2%3]) with mapi id 15.20.9275.015; Mon, 3 Nov 2025 18:47:24 +0000 X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIM_INVALID,DKIM_SIGNED,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 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=JH1yj/8FIA/Crdq25RkCYWyZ3YdUU/vstr5VYqMAInTZT/fq+a24XZGx1AYE7jBcLp6JDH20kfHHezGMV9gQeNbP2DMWWUKQw5cRlXdh7oDkEgtY4a2u0Bqv3z1zkEMzCyAuZMGOZcg4S8QlaW6bjyoXkzglgoVTLslV6Q0EWPrcvF0NkN9zv56ErKQZ0zamdteX41tQ4hsshagtM5IpcdOrex9PApWaiPiC2fXoDNpO2vgHj3dc5q0HkauuxsCek1hAM5q5FDu5x6ZcP97mI1bPzBQgzGYcJX9Sq2vLfNN+zVsByCwXs1XG+fTc6b4aOvbjn2zxqiP5wTqvMHR3Dg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=luMpDj9meLB+4/S4U220jb3skc/hMdPxBO6VzxWkxzQ=; b=DmXHPCiuyJ9RNvVdCs598XiIOs+5mZ+Y0rzz1RxePgpn7MrVDEkOrR1NX0O3et1rbn7T5GAt0nH0xpoieblEc9nmIUqP4giwf54MhqdhHKksZGMKx+YaI6NV+Gn6Q2GHJw84YVfGO2GD8CIeYAtK2fFwD5eQHqsooQAcgmO12yHxEV8u+Xgzum1G2dQr1diR3nd6XNx2i2ij4gOvqFJNCVDxl98La/jPCl55+NVv5dZrOaT9eyBLuWJwt3IC6qPfQZyHWshjG6Vf0BqHzd0BVkDQfTnyGXGfhB54ntlp+8F/2s3hXIof26SE77nZQZEiuFyCuIwnAa+MxV12kaqaZA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=luMpDj9meLB+4/S4U220jb3skc/hMdPxBO6VzxWkxzQ=; b=ZxkwEbSYKcx3Ap6CQzvMlvWUIsxRoCRtv5A9m+3RqGN7RK7PNqBFchtxb/LdyxIi4AFzgyEIqQVjhVYlw1kW63ze9D9sb9CZf6uGemQ6JdWQGzG07GMMzCBemj3OF6iKWPT2AudimKThOz9eTnSSg1P26lYYsrtN4y3yeGiwgjDvVN1QANuQ0CxDyAV9Vo0Q6BnfYnzLveV8QMdrQBMykuBgySGOPmcp3cIMvEzGBjfkBXkUdPFb1Z7c5QAtHbvsZH+OK7oSMPR/xzgqeUIKz3jt6G8Zb6zTUrOLpciutpw41pJqR85OkUqLUsTqYB0sGxfjbrGPhk6JhtzA0/nGlA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; To: devel@lists.libvirt.org Subject: [PATCH 1/4] qemu: Implement support for associating iommufd to hostdev Date: Mon, 3 Nov 2025 10:47:08 -0800 Message-ID: <20251103184711.4022833-2-nathanc@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251103184711.4022833-1-nathanc@nvidia.com> References: <20251103184711.4022833-1-nathanc@nvidia.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH7P221CA0081.NAMP221.PROD.OUTLOOK.COM (2603:10b6:510:328::33) To SJ0PR12MB6855.namprd12.prod.outlook.com (2603:10b6:a03:47e::6) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR12MB6855:EE_|BL3PR12MB6643:EE_ X-MS-Office365-Filtering-Correlation-Id: 6db49436-99e3-443d-9588-08de1b096dce X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?IafboSUGGb58yCeD3INhlUFWnd3K61HJruitibLRr9/W8H3cSsPJT9fX6IDZ?= =?us-ascii?Q?TPyGusQn7iNb5vzh3G8jgiPoQqblAcJrV34w/301I4b/+rvGcegHk5yg1LFp?= =?us-ascii?Q?LgGhYrqBw7raRGy/xUePkJNdLwiuHIjPdYTo8N+HpNmzAUFQz+5dYj9GFTCI?= =?us-ascii?Q?34kLD+uRYAQWXGdlAL68hrbtPkWX8T73A8Yd8agxWuKuyiPZi+29Y0EFg3tK?= =?us-ascii?Q?uSj5+2VcInQsvPyX18Hp+AFdeG1lqqfLqlGoVxmw/Ekk6EP7tFxxajeAnBb7?= =?us-ascii?Q?MrMoWg6Xha0nt4FTSIXThuzW/rfa/D/nLfUD+qR3GHGqN/0OomewP+sTC4B4?= =?us-ascii?Q?wbWzOqJA+EbP/gnPGdEbcrpYxq6IbxqnPs94ACzIu3xKPWTupobvrrqLG7ld?= =?us-ascii?Q?znYdhasmb2+r+sJCxmU0mmi79TTc+BRw1bc4AtPxleiRyXz8CBXwdQrT2/d2?= =?us-ascii?Q?LuGaykPtQnNpGxZ98NIcwnw9YI+XNj9z6yuRh2FRDxQLc/ONGi7qbNk1sUzi?= =?us-ascii?Q?eSRw49HKrZnAzXhriQHDVhaQbcs85RtYCJT9OzSPnni7DY2sFHyU/HJ1NN4G?= =?us-ascii?Q?mBQGJSMtwva75h1IhSZ+EuadeTA6JKa5NfyJ7+YUQY8IqVuxSc+AF4LnivCB?= =?us-ascii?Q?MugP9kQyJYdVzuX9SKF1D7M8hLAEyqac5EhojC4KXLTWFyu8rZHLlRqYqzU9?= =?us-ascii?Q?fTqu/4mzzjz9F8D3cIGpL602iOY/n/LslmJsoIoRGR4sL3wwU9VBdoij/IlC?= =?us-ascii?Q?73+Ck5nfo7YroGbXGAHqffFzLxffPB+5A9UfLlU+4mQwu16yveU0RSP0ZaaL?= =?us-ascii?Q?ml06bbUiHh4jTr1jgD2mLymsD1HeR2d7qoZRYbnIFGrdaGDDsGfcRs3xfE0t?= =?us-ascii?Q?JCYsJC74CYEBpHIHwtw72mQhfGAL1TGAqGiOTOji8SgC+aOmUFoQK/KUJ9Se?= =?us-ascii?Q?wR6CkJiO+HVIlf+7lcvkLomVBkn9cvH/z9M1ZlbJOLy3VP3Y+PcLvub1g60X?= =?us-ascii?Q?jC5YFZEivw0wck2CMs5fhI8y9GDwUnBZOUv99AYtXweDZGP83UUH3H6YLoBw?= =?us-ascii?Q?BdYHk7ouBvvJ7YmQNrRMMnD0KO17pVv6K9dp6AY9ZLoMjuPeprKCmiz5n7jd?= =?us-ascii?Q?2NcWdjU+Ssr0x66fAd7h65uVRD8PJAhiqNP6IJpyn1b2t0/wXv3QPAdRhxFL?= =?us-ascii?Q?EvXAUoEUGNBC2bx0J7huEV4CFBbRQPosc9LTQYAsCHJ9/1jJwV9MjdU2L47H?= =?us-ascii?Q?yYhT+UFNPEMJkOr+mOkOp92I/o5anIHoH/m6Dm+9VUrRcUQN+yXqBpXCnfs0?= =?us-ascii?Q?2INCcT+aqhxqKWHmaXfz6k15o8tRtaY6CCf4A7AGAcONEwCOMbh9g9qCNtAt?= =?us-ascii?Q?N5AtwP280A862bpZa91eVcqnV+/FnCIF4S7sHkd1fJa0jm01Mylk5stG5Wbs?= =?us-ascii?Q?n2Si+UcU4JF4qV80+3UM+FbtLUnoOD+/?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SJ0PR12MB6855.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?TjNTlm9LpuN3/OPJBJspqdU324INPwUaOsa85QczD0WXHWxYWlVM5znpLA7j?= =?us-ascii?Q?l35WQVbsUkyo/Z46FegER3Hqs8pdEabqrfEVNJuSrALSPtL2ahDNspjfg2eX?= =?us-ascii?Q?gfZRLQNyltzYfyVQJJ71HbkQL2yoygsno+0ilIbeD7iAJsv1Q8LCQYAQgBE1?= =?us-ascii?Q?Jrkfb0J13cJysXaveIqe0qyGZN1LbUO2HT98Bv28tsNfDZPY/1iz7mwA1K3t?= =?us-ascii?Q?ve1R73j7VutXD0HXLerSvnVznCJUm3ifhfVhzikgqcXMC0MMOSd/6Bbupn/h?= =?us-ascii?Q?yFZehObZUHYyOPrN1rERHH1Mg+uy9KpTV4SX5I51LQd2OlR9xa6H7pV6Rijc?= =?us-ascii?Q?URWUtW+1reP/JmjD5/5CeSeTvdC9Th7gDTLfwngHsXsciDMTJJ7djt8Snpnr?= =?us-ascii?Q?5f2QzJlUv/Lw3t3y5zmW5C/iAMZjfCAu6+fXtNXqcv/wOr+BBB9sxdQkawG1?= =?us-ascii?Q?R1tarYXgaCdUaLky4XBKqluDY4UKEKcMF59qYQpWh3CLZO1dT1DVj6YrTkIT?= =?us-ascii?Q?6sKecGPV5+iQafRaqrqcK4e16iymSmAjKkq1u0PJuFtR3IHajjTJcG7gc6iI?= =?us-ascii?Q?lJkwR02fCDZMlf0J0YOgUpVqG2DH++j6+L+U+zCzYAGf/EEdX9qE6OjpxwBA?= =?us-ascii?Q?EtUkduCU3J+vKY964h+Qm8qfGSt6xINrshh+y0R+KmyVn0L8n5SuY6ysZr6H?= =?us-ascii?Q?OwJn4yYUwNWnX9AjVM4DbDkmOdIjSSpJZqtJql9RXOXZ66ongHHAl0vBI/gG?= =?us-ascii?Q?Lh87t3vxWXg4rsGR/SWJek0JQmdbLKg6PVRmmKYINwrd9iMXHaYr6O7Dys57?= =?us-ascii?Q?ILTO1tJ3dy5r/blYiT/+cvjJP1RrJ9Q7UVAOHVvZOvTcUg6J/4dtt6/6Q4y3?= =?us-ascii?Q?Ecbee9vd5+5r1emouGgJAupgBCHiXynPvRBsLErKxF10UA95ot0ENZ4fJ2iM?= =?us-ascii?Q?uQ+MJVPaJv3g5SX4x2mq84dSQSlcmGeiUaSugucwSBpRfObs4eDahPqovOgm?= =?us-ascii?Q?AvobiJkURLvQAVOBcung5x9MDA6+oCJ8+nT9199ISkaBZWJPOYi/CnTXyrM8?= =?us-ascii?Q?DO4mKKrI3mFWFIVncoqaiEBiZRCheceREWbinqGqWYECPZwmen7HDk5mTnju?= =?us-ascii?Q?zvTgNF/rZIh6xZTnzFd8lkLNYOnrZ6A7UlHJRT6dNAEVNXmHf57tLIZKLkPA?= =?us-ascii?Q?1lVMoOpTHF6x38iwe4OGJ9/hqMadubvXx4eMBBUDrWcyq/oalkhxKiSDvBZW?= =?us-ascii?Q?zpn1Tb03Q7ntNe0ILrQ3CQer/gkxiYwUW7Ya0WG4CYyqoG1RPmBpTb1jJt/m?= =?us-ascii?Q?2BtY4wlfy4ACLL/u2RMKSw9Y3kZC2uPjRcFBJIv+ZJomGu1lx4oBdwHi6F8G?= =?us-ascii?Q?vz18mR4j9JlxfCQM5tsWdXK78fuqGNziwUe549sLPlId/4UXY3GtSLOfNSs6?= =?us-ascii?Q?lLE5jQ9xvbM4DZfOZL6tl3lSWNSVsJKzMUxAdeK9g9jgO5bNPx1w8EUcVhzX?= =?us-ascii?Q?rxufTHKPMw/bnuotdUj/jgvgVMWuElg8HXyxDsrMyTxfrZeEqOe8uwsnCUgE?= =?us-ascii?Q?lY8SyUsHxhkngepza4EUnzMPRcDcfg3QlzLeVNm6?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6db49436-99e3-443d-9588-08de1b096dce X-MS-Exchange-CrossTenant-AuthSource: SJ0PR12MB6855.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Nov 2025 18:47:24.5733 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: y2a5kGx7qhHi3Wk5ZpR9vdAxcS8IYeYT4gP1sxtLR8wJ2Lkk4IZtuSDwDDaTnqtCHl5vhpGEGGdYYHTP39ZfOw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL3PR12MB6643 Message-ID-Hash: 4XPDXFO77QPC475I7UPEEEBTA4L7B24W X-Message-ID-Hash: 4XPDXFO77QPC475I7UPEEEBTA4L7B24W X-MailFrom: nathanc@nvidia.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 CC: skolothumtho@nvidia.com, nicolinc@nvidia.com, nathanc@nvidia.com, mochs@nvidia.com 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: Nathan Chen via Devel Reply-To: Nathan Chen X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1762195789583154100 Content-Type: text/plain; charset="utf-8" Implement a new iommufd attribute under hostdevs' PCI subsystem driver that can be used to specify associated iommufd object when launching a qemu VM. Signed-off-by: Nathan Chen --- docs/formatdomain.rst | 8 ++++++++ src/conf/device_conf.c | 9 +++++++++ src/conf/device_conf.h | 1 + src/conf/schemas/basictypes.rng | 5 +++++ src/qemu/qemu_command.c | 19 +++++++++++++++++++ 5 files changed, 42 insertions(+) diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst index 34dc9c3af7..a5c69dbcf4 100644 --- a/docs/formatdomain.rst +++ b/docs/formatdomain.rst @@ -4845,6 +4845,7 @@ or: device; if PCI ROM loading is disabled through this attribute, attempts= to tweak the loading process further using the ``bar`` or ``file`` attribu= tes will be rejected. :since:`Since 4.3.0 (QEMU and KVM only)`. + ``address`` The ``address`` element for USB devices has a ``bus`` and ``device`` attribute to specify the USB bus and device number the device appears a= t on @@ -4885,6 +4886,13 @@ or: found is "problematic" in some way, the generic vfio-pci driver similarly be forced. =20 + The ```` element's ``iommufd`` attribute is used to specify + using the iommufd interface to propagate DMA mappings to the kernel, + instead of legacy VFIO. When the attribute is present, an iommufd + object will be created by the resulting qemu command. Libvirt will + open the /dev/iommu and VFIO device cdev, passing the associated + file descriptor numbers to the qemu command. + (Note: :since:`Since 1.0.5`, the ``name`` attribute has been described to be used to select the type of PCI device assignment ("vfio", "kvm", or "xen"), but those values have been mostly diff --git a/src/conf/device_conf.c b/src/conf/device_conf.c index c278b81652..88979ecc39 100644 --- a/src/conf/device_conf.c +++ b/src/conf/device_conf.c @@ -60,6 +60,8 @@ int virDeviceHostdevPCIDriverInfoParseXML(xmlNodePtr node, virDeviceHostdevPCIDriverInfo *drive= r) { + virTristateBool iommufd; + driver->iommufd =3D false; if (virXMLPropEnum(node, "name", virDeviceHostdevPCIDriverNameTypeFromString, VIR_XML_PROP_NONZERO, @@ -67,6 +69,10 @@ virDeviceHostdevPCIDriverInfoParseXML(xmlNodePtr node, return -1; } =20 + if (virXMLPropTristateBool(node, "iommufd", VIR_XML_PROP_NONE, &iommuf= d) < 0) + return -1; + virTristateBoolToBool(iommufd, &driver->iommufd); + driver->model =3D virXMLPropString(node, "model"); return 0; } @@ -93,6 +99,9 @@ virDeviceHostdevPCIDriverInfoFormat(virBuffer *buf, =20 virBufferEscapeString(&driverAttrBuf, " model=3D'%s'", driver->model); =20 + if (driver->iommufd) + virBufferAddLit(&driverAttrBuf, " iommufd=3D'yes'"); + virXMLFormatElement(buf, "driver", &driverAttrBuf, NULL); return 0; } diff --git a/src/conf/device_conf.h b/src/conf/device_conf.h index e570f51824..7bdbd80b0a 100644 --- a/src/conf/device_conf.h +++ b/src/conf/device_conf.h @@ -47,6 +47,7 @@ VIR_ENUM_DECL(virDeviceHostdevPCIDriverName); struct _virDeviceHostdevPCIDriverInfo { virDeviceHostdevPCIDriverName name; char *model; + bool iommufd; }; =20 typedef enum { diff --git a/src/conf/schemas/basictypes.rng b/src/conf/schemas/basictypes.= rng index 2931e316b7..089fc0f1c2 100644 --- a/src/conf/schemas/basictypes.rng +++ b/src/conf/schemas/basictypes.rng @@ -673,6 +673,11 @@ + + + + + diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index c538a9fb2f..8fd7527645 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -4738,6 +4738,7 @@ qemuBuildPCIHostdevDevProps(const virDomainDef *def, g_autofree char *host =3D virPCIDeviceAddressAsString(&pcisrc->addr); const char *failover_pair_id =3D NULL; const char *driver =3D NULL; + const char *iommufdId =3D NULL; /* 'ramfb' property must be omitted unless it's to be enabled */ bool ramfb =3D pcisrc->ramfb =3D=3D VIR_TRISTATE_SWITCH_ON; =20 @@ -4771,6 +4772,9 @@ qemuBuildPCIHostdevDevProps(const virDomainDef *def, teaming->persistent) failover_pair_id =3D teaming->persistent; =20 + if (pcisrc->driver.iommufd) + iommufdId =3D "iommufd0"; + if (virJSONValueObjectAdd(&props, "s:driver", driver, "s:host", host, @@ -4779,6 +4783,7 @@ qemuBuildPCIHostdevDevProps(const virDomainDef *def, "S:failover_pair_id", failover_pair_id, "S:display", qemuOnOffAuto(pcisrc->display), "B:ramfb", ramfb, + "S:iommufd", iommufdId, NULL) < 0) return NULL; =20 @@ -5195,6 +5200,9 @@ qemuBuildHostdevCommandLine(virCommand *cmd, virQEMUCaps *qemuCaps) { size_t i; + g_autoptr(virJSONValue) props =3D NULL; + int iommufd =3D 0; + const char * iommufdId =3D "iommufd0"; =20 for (i =3D 0; i < def->nhostdevs; i++) { virDomainHostdevDef *hostdev =3D def->hostdevs[i]; @@ -5223,6 +5231,17 @@ qemuBuildHostdevCommandLine(virCommand *cmd, if (hostdev->info->type =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_U= NASSIGNED) continue; =20 + if (subsys->u.pci.driver.iommufd && iommufd =3D=3D 0) { + iommufd =3D 1; + if (qemuMonitorCreateObjectProps(&props, "iommufd", + iommufdId, + NULL) < 0) + return -1; + + if (qemuBuildObjectCommandlineFromJSON(cmd, props) < 0) + return -1; + } + if (qemuCommandAddExtDevice(cmd, hostdev->info, def, qemuCaps)= < 0) return -1; =20 --=20 2.43.0