From nobody Sun Oct 5 01:49:24 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 1758590941830660.9642171678465; Mon, 22 Sep 2025 18:29:01 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id C9AC841A85; Mon, 22 Sep 2025 21:29:00 -0400 (EDT) Received: from [172.19.199.10] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id 99CAF419F9; Mon, 22 Sep 2025 21:19:38 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id EF7AA41A4E; Mon, 22 Sep 2025 21:19:24 -0400 (EDT) Received: from SN4PR2101CU001.outbound.protection.outlook.com (mail-southcentralusazon11012013.outbound.protection.outlook.com [40.93.195.13]) (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 17B2043E16 for ; Mon, 22 Sep 2025 21:16:19 -0400 (EDT) Received: from PH7PR12MB6834.namprd12.prod.outlook.com (2603:10b6:510:1b4::18) by IA1PR12MB6090.namprd12.prod.outlook.com (2603:10b6:208:3ee::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9137.19; Tue, 23 Sep 2025 01:16:11 +0000 Received: from PH7PR12MB6834.namprd12.prod.outlook.com ([fe80::f432:162b:b94e:d2cb]) by PH7PR12MB6834.namprd12.prod.outlook.com ([fe80::f432:162b:b94e:d2cb%6]) with mapi id 15.20.9137.018; Tue, 23 Sep 2025 01:16:11 +0000 X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-3.1 required=5.0 tests=ARC_SIGNED,ARC_VALID, 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=oAEPErl14k2qpu17PN9i1lOSLmqRDcPVUdjooVqThYKyiK8eF/LCfcM/yTEfMPHgJHkSwKP2MWMH8yXTo9o92GikGVEdOsnk2Uup1T6LtbREMDsY+R8MhYsrEiLEPuws0GZ5U1b3HzhIL4hebXv49mmiwzyXOiU7L6KG6cQBBKeeDjc89XLmk+DtFe3bUn713OJi3mXNE0RFW8RpI4waCEVA/7FG4dGAqYrd2Rmt1ZSSUPpXH2bhw8vgCdlv5w7QQYs9pCVxSe3TfaEw15ex8mK7rnhRmPlJjFZZBUb1t+a1uC1K44QCWxYZCgfYIpW/53wBB5bSx/6vWu/lBvx/JA== 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=gBA2a13/4XaCXwRu23Oerp7PScIiE1lQmngJYRkKDnw=; b=IUMYF6hPFs676hBoFUGN+NpsFGptH1Vv9Wib+/S4fDMq3G0QxVoSV2HucAmhe+R4GQ42L3rwtbimT3ks+yTMDjxBaoLkm8zHDtdhP2mzg/JIjKBzTjI3FtLCbT+cFvmb/I/S/Wi3kEs1bRkEbF2QZFPALxqotqMiQMVu/O59PMMLXpQrFxuMifzjJXW5O+1yzGjoC6B/RDMttTEKFjTgYTP1TNMIFQ1z2Tn3UUH0lVx9POK3mzqb7RBRzKoCJe+MIfkPsSOFF2DCHqBFW4gT6ALqg1OGPwFtjNQPE6m0634O8Q43k1JVE2ZKCJYCVTNmiplYMPRyO6oK1jxbDYXyAA== 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=gBA2a13/4XaCXwRu23Oerp7PScIiE1lQmngJYRkKDnw=; b=uDNtSHxITUFWQzXuMJ2J8JIvKSjGxbQt3nBmjXMWdenLeJVojsJwHTHQynxhNw83amWCr4+wVLqOg0l/URXhOxSezMqxbqTNYJWJSGubMKjz+X6LY3CYccihYiMOpJXBV0fnNyu4lHxTOEBZVgr+hu6lucePPcvdwu/XFgkbi+3DuC/o/YH+9KXkP4W+SyVo4Sml0l7nkQY6EoPut5HQMzmmF5sTKBUccJzd9MDb7Autd8GHxRaTV7TTRszC0usHncjA/dFVeO2fHJ0QJHwg8IP8r+mRKpq0zIzm0nyKh52FcMQpgbs8fmWgldGLAus+BmQwNe/FM6IFCHJx8C/zqA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; To: devel@lists.libvirt.org Subject: [RFC PATCH 4/7] qemu: Implement support for associating iommufd to hostdev Date: Mon, 22 Sep 2025 18:15:57 -0700 Message-ID: <20250923011600.3229388-5-nathanc@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250923011600.3229388-1-nathanc@nvidia.com> References: <20250923011600.3229388-1-nathanc@nvidia.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BY5PR20CA0028.namprd20.prod.outlook.com (2603:10b6:a03:1f4::41) To PH7PR12MB6834.namprd12.prod.outlook.com (2603:10b6:510:1b4::18) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PH7PR12MB6834:EE_|IA1PR12MB6090:EE_ X-MS-Office365-Filtering-Correlation-Id: 46a1da1e-6cd7-4dd9-914e-08ddfa3ec845 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?8EJSy4cnIz1UMxTFBICmcT8A6h0ccWDdb0v2PzFAqzlSsvhsS8wCcq4pV5fs?= =?us-ascii?Q?D6j/qyB435AWZYcTyMSrr96ehklz7WfSOC9lOYLf1M40fI0KT85YKISRn1gS?= =?us-ascii?Q?0k+FO/74VGqydFh0RnxkrJrIo4wkMcT6QmOD9SPnIBuI9MJRV79CRAYdDAQY?= =?us-ascii?Q?rGvCYL0hH3hO9MkuYinP2ZRrDdMdpuYCjTIWKVtLlb3/6fj9X/HMQDMZIjSI?= =?us-ascii?Q?V2DTG5j6ZikM5rdut1Z9+GhNmtOJB1dVuWQAeQHDsF+mDTOG7RAyvomvyyyY?= =?us-ascii?Q?XuPSI2JQiIOO4FHRAZjrTZEsyP7BR3HXiXLeIEjckQ94E0CF8NoqfoHRM1HO?= =?us-ascii?Q?/qBUuYQ+gSgxD/DF73PlqK1ClFdjWSAb0PcVCMyDvwl9uUcj+M1skrsjC6mS?= =?us-ascii?Q?FFraGx06Q9+xi+4w1v4Al5FGcJw4dS6sNqgs98u3o3kOU/A36ySWuTlexBi0?= =?us-ascii?Q?REeNqgprmDTQE/izJQZlyG4nDvoUSSB7YPvgXYSqoVpcXbvQ0uihARieDopW?= =?us-ascii?Q?4Gr8rWkrJuPqOfZVGfXiHMStGECMa0gQ4dibx0tYxBCM9VywU15T8xAlCjJN?= =?us-ascii?Q?n41jsCfKwG4W112dP8yiEPkWRSkGsLXghroE2XdxZBYWY3kx4k1i4oyYDmUm?= =?us-ascii?Q?GleHgAuSLKyJEJ6cHsT6fgi+BjZ2kGQtr64lU1zZ2m9myzgS9Q+CylMT6HDW?= =?us-ascii?Q?ds5geHO8Huf1cZJSe0vG0/0SKV5RDLR2HJ1TMitV4EOjSmcL54rVpOpug4SC?= =?us-ascii?Q?VOfvNIMIN7yZerE5A5r2GuMGuSTiUWUp5NrduueEKF8OSPswNhF5UhzBvpnR?= =?us-ascii?Q?41QurWb8NoKXPFqTU6meo9TmObgzlIU50bZv6BTpxYJtibYWIXJZe1ES5rXM?= =?us-ascii?Q?ajLSSW/XMFsuq05GtxkF7IekrIWIDECrLp94lC+HVS9SN1Ofd+b//A7/K3xd?= =?us-ascii?Q?VzqFMn6KRlQn3BTCrow/MQTXcL+Ba77Yk8aHWWLtQRwk6dHvseNmPdJtfOvK?= =?us-ascii?Q?j1vrjdMWYpEvTjhBrr38L+63G9jJlAf30JdmRXkuWFtveebtBsXyh1LIgjoE?= =?us-ascii?Q?WlSxB9q29xPkmBnF5vW0mDq4P7hajtIbZhMion7NjWnparM3x7+evYDKYyk4?= =?us-ascii?Q?9mteSGW4dNdxThH0ctRNJFPdVKeGYDJVR6aBhJrXvjC+JXuVff4QsOm6mCVF?= =?us-ascii?Q?b/LlMyFVh5ZY2oX/nX9jtOISOFG1TTjorQiposBUickljfGq10yHBpvb08pD?= =?us-ascii?Q?uLkhuZ02MLbA9l8MqbRtxNRCtpXm8XuJLJQ0/dF1jTDnEcmwwkENkdCmdHPr?= =?us-ascii?Q?sRmyAkWahhRB+jTNKfgzLyNSBnpGJVyyscvLj2FInepMEBn7Lc4pOIeaSjDv?= =?us-ascii?Q?NYfehnOCL7/g/ZJT43LySDWYk5XkJZaeczjgxqhOqVl15E85o4qEG1BFAgZ+?= =?us-ascii?Q?fOgseHhh8P4=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH7PR12MB6834.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?eM2R59Lp1LWjSpBuOuoIxZPM1x293TMOocGQu/ls08BD+lbiturcPElGMz/L?= =?us-ascii?Q?exMDmpNQXIwf8T5CYyM3oI9g2Kd0WxPRZuTQu1EmJ4qwLzNI+UrXAE5bjWnj?= =?us-ascii?Q?wuY9xa/2YYJzsGS+gZceaHDqi9cqq/A3NK++rl2PVDmohbmLBRQ9YBWhR38u?= =?us-ascii?Q?ypcUkCXjiqQH9sV6GXmkW9Tc83HvqrmwW1AdhZInhs+Thjaa7zozyLwULqt0?= =?us-ascii?Q?r5FQv4V2EaRlDHmSTvrY3L6pKRYL+a/qsn8diGcGhLpAqNIBtr3X0fSbWb9j?= =?us-ascii?Q?UElM4Xa5Yf1WTzfkN9qlLAtO7TmPWzOif5syQ3EhREqS1FYosrUVuVR4HnNk?= =?us-ascii?Q?QZr8gCCMhRFBCimqFIYL//mmoycBwLeWPo32bZLCBwVolpye4ggcDcEd9ObQ?= =?us-ascii?Q?WxrvO+UAog8e6daGnUXFDXIauphc+isZ6HGRwHEnbUnUCXc+IjpaBSgYaiV8?= =?us-ascii?Q?A73IeAdNtgWVvkFzxvIWBqXDJ1IAqk6N2Rgk2YPS7R5ffyITgQIjm1jHT52y?= =?us-ascii?Q?OD1a/Mdni68tQQXfwoRQsQphsKsaEynfUFeP6KbYD8RZmfLJOGMwOgvfDuLm?= =?us-ascii?Q?llWVCxrAUXcxvVfMFd+d5aMOxnIi+TB18Uoi7i61QmYQGvnm03mmDj1o5U7q?= =?us-ascii?Q?3Eq0zEII47bzeXULxvxq/VVDA/owmgp5tKSp1801whHmA981isRY1Evnp2Jn?= =?us-ascii?Q?d7ZArx9jSi5DVPE3gd8AaaUsaycUQw4AeqU5rSfKAiF6YHvzM6m3lghy/z/X?= =?us-ascii?Q?uORDytoGUd8zhWDF4Ys0mz8NT20Xvm5FkRldoH5JOnw1btUw/9bLEKOOfCnn?= =?us-ascii?Q?CmEE1oXE+x7VPuNozhnJV2eDBA6noVwfxZO427yq3BuwrJm5E97eSs6bR9tK?= =?us-ascii?Q?kWB8HOCqwybG5tow+CrZCtrOVvHtQwzixpqhmIv9k5AaZc4MdIB7hMDyso6G?= =?us-ascii?Q?tG9oQQ9tNA7cDH2Y91fZHI7PaxbHajLyyjqN2GTF5uweUzWVYwmud1qebXAP?= =?us-ascii?Q?JYLh6CQFFutWeKJ0oT1m9Xkkt9/vtkGCxsq6MTFKVOUNP4/wtznFQx+0y0jj?= =?us-ascii?Q?d4S9fsXQGWpUtQV8C3I4r6zflNrinB9EriJr6AMOeU7D2yPlAzUfvBKMM4GJ?= =?us-ascii?Q?eZM2LvFuXAgCxNMPlG+bZIU5i46fqMLr/d36igs1M5wGVZN/xHKq7L9ugJaF?= =?us-ascii?Q?Mz9VD9KWvPtMRNVfeFQrkjUpHKSvE2fGPURLL1HMPOofkNIZuRQAtNhK2icA?= =?us-ascii?Q?q6451rLpqifP3bJ3QWvEq5j5bMxoFtFTdij4Eb63qcMSVgM3qxURCKTih5CO?= =?us-ascii?Q?AHLL8TVQUU7r/ZnEpbprwbQC+GrSPWZtJZClVFK8QsuVOMpo3BuCY5L7Yogi?= =?us-ascii?Q?j4HBL3NhjjV6kKjdcZQrB0WFCWYL7u4P0OUDpoR1MVz/AAMmW+iSz84tOC0a?= =?us-ascii?Q?b65FIcL/soNOySq2dNQJgvY9DYjZd2cln8B57XR6fcm/E1YEja1VJaqvlICl?= =?us-ascii?Q?U2AIzQJhm19ggR7IXG9RYy2QjUhKob/CkPdnFdJZnb6+MDHrn7myv0VJJ53i?= =?us-ascii?Q?/ZsU9Z/q9c8DeTJ71+28Th/L2RRfGSI4I4Gse7vF?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 46a1da1e-6cd7-4dd9-914e-08ddfa3ec845 X-MS-Exchange-CrossTenant-AuthSource: PH7PR12MB6834.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Sep 2025 01:16:11.2804 (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: 0WACGPt1j5Cw27JMsmYusvcLhw+PGqqjYrpQZkLSa8FGqKEJowRzbW6KHqC55PcoYNE/You1/vWndU6YLKyqrw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR12MB6090 Message-ID-Hash: GS5YTBJEKZGBI6KYXZYYF6FDTOQOU6VV X-Message-ID-Hash: GS5YTBJEKZGBI6KYXZYYF6FDTOQOU6VV 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: shameerali.kolothum.thodi@huawei.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: 1758590943193116600 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 2f1e06ba0e..61b71fdf1f 100644 --- a/docs/formatdomain.rst +++ b/docs/formatdomain.rst @@ -4836,6 +4836,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 @@ -4876,6 +4877,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 fc6d4ae706..c9d165dfd9 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -4808,6 +4808,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 @@ -4841,6 +4842,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, @@ -4849,6 +4853,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 @@ -5265,6 +5270,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]; @@ -5293,6 +5301,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