From nobody Fri Dec 12 14:06:21 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 1763778450193962.301194474432; Fri, 21 Nov 2025 18:27:30 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 993) id 742A944030; Fri, 21 Nov 2025 21:27:29 -0500 (EST) Received: from [172.19.199.56] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id 1990343F92; Fri, 21 Nov 2025 21:26:07 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 993) id 3D67143FE6; Fri, 21 Nov 2025 21:22:45 -0500 (EST) Received: from SN4PR0501CU005.outbound.protection.outlook.com (mail-southcentralusazon11011049.outbound.protection.outlook.com [40.93.194.49]) (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 7BD4843FE7 for ; Fri, 21 Nov 2025 21:21:02 -0500 (EST) Received: from PH7PR12MB6834.namprd12.prod.outlook.com (2603:10b6:510:1b4::18) by CY1PR12MB9559.namprd12.prod.outlook.com (2603:10b6:930:fd::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9343.11; Sat, 22 Nov 2025 02:20:59 +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.9343.011; Sat, 22 Nov 2025 02:20:59 +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=LGgpg00PmytX54Kjp3c18FqFQeYnetlGGOsBNwDOTrgwDku7aYVoB5ePY37HMin5XgZigEZwG+OLj29IQdQfgVVY8/oMTemXMsmkjysBh7hJi4zz3cp9dtelF8j6eTjSJiiLUYWBpwihq3wLISaFtC/1uaCTFBYmA9zM5eTtm3RUOWC4KDhJpGdgZgGjEZlInispHKuJFmb/eK1CpRm233hkc395d5InvCKzsE7FctrzTQDvS7Xiz+kzIVoR6ouFCN94ZQQ9DcgqeEbzX2dUkJZ7aWi+Xwh8tZe+5hCqXoxbr16vOJvvVngzFWIB78JUmbIk2lZwzqUNgzHNuyyysg== 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=Oxqnj+PsFKmCP3cbgl+ThwSgJFOyfQpM8JntzUiIvj4=; b=NFE3kVrZZztyZS2J7fL6+5LjhpTeVtwoGCT4JKgo7XhxmB32Fo1+Xd+UM1PuXqn5Oz8pBb4NKvK4V3jfMCit2Ygn3rVuGnw/tNyIUglM3JEePL4sczxFxj5rBwFlE65ETTLLQ1TpfzV9gCuCfY6ur6mQwnIXATcW3AKoYII1/HDGfB+kg6K0YROPcuyQDlA3MrxXiPTJFmu3BGTQedCc3bSgr1ub2qWS7m67K68brn4QqhMJRDI0TM+Hv+XNOT8Iv7UNS0xBq/WNazofECVnsG3hb71pBG98yMuIw5LT9fdALPDKseWyLP7SY5RTVnb0FU4hm4uXYeQ0oku5ZYtoiQ== 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=Oxqnj+PsFKmCP3cbgl+ThwSgJFOyfQpM8JntzUiIvj4=; b=tVdLhPCzY/rMELYXu4aczZDe8kVnmRKfELii7KtkI9B1uBRwSWNBOFOS3Bcx6mqTQ3k4WYbvSP4gx5xmQ9/9VBRujLbrlYLPkFeYB5iAvuBoV3zn3Bkwu0jbnF+Z0GLHgpfkfib4wLKn1RodFu/Zw4tM6HB99p2YaQLdGb2QhmowjOSieGGQ3a0Nw6+spkoEaGn87q8sC6rG6RNSiYH78XWsPVCkgYJ0wSXyM3qhABvspc3gqs0CbDwrcrWyEZkGjtTSRlIAtYPpgJHlR5xhj0ioFVGwWO7tbvtp7PtNJ6mSOmPvD8JB9KA0xQqkxBEdi0DRHbrX82az6BH6CAlDcQ== 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 v2 1/5] qemu: Implement support for associating iommufd to hostdev Date: Fri, 21 Nov 2025 18:20:53 -0800 Message-ID: <20251122022057.3440459-2-nathanc@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251122022057.3440459-1-nathanc@nvidia.com> References: <20251122022057.3440459-1-nathanc@nvidia.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BYAPR11CA0038.namprd11.prod.outlook.com (2603:10b6:a03:80::15) To PH7PR12MB6834.namprd12.prod.outlook.com (2603:10b6:510:1b4::18) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PH7PR12MB6834:EE_|CY1PR12MB9559:EE_ X-MS-Office365-Filtering-Correlation-Id: 179cd0ec-c66a-44c7-8ab7-08de296dc69f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?hXjak7kwJQ+DPcalALiORr1oQ4CVXC5hU6HISBy044VfIb9YfcarrafRQXAV?= =?us-ascii?Q?e0OIEbnnwq2Pbku7GPuUFa8UfE1yiiYJVrobvgBCZgjs/TiZfe+260EhM4dr?= =?us-ascii?Q?AMtvRRPoMx8BwXXW7ooZBn7Pc4xuS64GzNYks0A9TlTPXAyfpktbiwGHVBMw?= =?us-ascii?Q?/S9DrCrFG7V9evF1YqJyI3xZShA2xeucKCztn3+GXYAgik/VCZVCmjr3Smka?= =?us-ascii?Q?LGEF3ub9emBsXpXQEsr6II4+w33aYa5ofuz6aBlyN7ZyC+hhatn4AadcY3Pa?= =?us-ascii?Q?piB8Uwc8i3k3GdadADOT5T4eDCpiVEYhPO8cIb3CVvb3DlG4FQTWBWYorPoJ?= =?us-ascii?Q?w+VYvKflgyl/DMmgDTtBB2+BIBN9rJyH5eX3WPaqcwsGD4Crk8b2rp7l3Dgk?= =?us-ascii?Q?7/Dlkko31TGAWKK6riK7XvRj4za3RqsUWhvkgGiqeSkdFv8VXo2+H42V057X?= =?us-ascii?Q?i+nQlFAeC83sPS2BGZqYvLMbZdgefksiBQMNYAqTC2qz4uUSwCjvGRxLC7Vd?= =?us-ascii?Q?Zp8nrhMMNWVpSflCNdfavXuOYmfxQVsxNerHZVc4YCGqCGmWDW+o1KCWrd81?= =?us-ascii?Q?c8lNT8S5yoJwjM3lmFNrLyOk5EzYhsas0cQzpjrq9MXFEzZUxOtRaLeGEq36?= =?us-ascii?Q?DSGqvQxJD6Ho7i5K1I1OvbWd6gWF/8ZxUx6zcnezNIr/Lo6dCejHpl4f2APz?= =?us-ascii?Q?jJZJkmz1u5tPMmM8N+aIqjJ5GAbnwTB9ZgFFKCBatoE2A8DhPNxhT5ByNwnj?= =?us-ascii?Q?mpK1mbBlUK5qnkvgSZNAEzv94wT4l7CTueurmRxo3D8eIO28MBqbb+iXOj0c?= =?us-ascii?Q?WMRNZzO+/ZlV9jY6zJufhCylwTu7JPLPpVZNPpafqT0RHjqhdSVPXagS1rIn?= =?us-ascii?Q?KfIBWpsl4I8BL/i+NHMoiDF7WyuOuRUIqoZQp1PKknLaKqFDwWL0mM/G4DKF?= =?us-ascii?Q?5GaD93RX652fRW+32jOnrJZljhyveNuMYp4KTdxAUNXjktcnFw1E5Z+Zz2u+?= =?us-ascii?Q?HTxiXfy4ajQOR+AQoBQZe+7XXOiN34nQVT7hj65zgK55R0rPC01zJ66wHfAr?= =?us-ascii?Q?yNWxrRVrVE+vzDsO4IkyV2O7STJFJbP4sfO/ILKiAYH+V1gbcDTrm30OmZ+0?= =?us-ascii?Q?y9kjorj26hlgqs1zwUUbXkR7quJpAbmepm1+yJRTP8ll36zQcqnLgeCZSHV4?= =?us-ascii?Q?j5PBONjRTewWdvgMbzAcIN6hzVfit0sk/hb4ljwP0Suu5ITJg+l5/o2/iKzL?= =?us-ascii?Q?U1b5yV6MeuRepBC8Q2V+jiZYj4xuO7mLurTPdjd3qtd1hmB92UGr37Kaqadt?= =?us-ascii?Q?Asqd/SROXEx7Q6DXDKG2j3MxcPOTVHtJgjQbjVEafMhEIfnVbGQcmgxRvfNJ?= =?us-ascii?Q?UJErpJcKUmFHWvdsnEZJqY5w63RxbIVJzD9lmG5V6nUxyl8WhHPsrCX737Be?= =?us-ascii?Q?iwszkC5mW82SdBTYVfxKJNcBQ91x+6D2?= 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)(376014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?nMqwAZfO+2fUrhlzJfR6NroWoXagxEvnAqBwAkkYbnWwWA8fH1foCnQkRaEg?= =?us-ascii?Q?PrtLA0YEfA2NlMsoDzC1eHqhlQgreVegTFSiAL3e++Cy8ex0365GstiCd8Hf?= =?us-ascii?Q?dyjhSbwGWDOUOjF7VvCFpO5Uuz09PgBu64Ah1Pp4TV6eQ8951m2vVcXJrRJv?= =?us-ascii?Q?JjLF5d+WilJcqwSY949DxrqTz5ENHVHklSArnTKmNevTiRwtOyGwhJiNFjvq?= =?us-ascii?Q?do9jT4WyRl6tN7F+5kJiTWPpsgASsZrPQSMnAwbztjfP5Oy/Q1qYE/UL/ZFu?= =?us-ascii?Q?eLVfHk2LG3eQNH3++lOe2O5ePiz8CX4ZdTGhRVZ7sZGiOyZCfc+8odXSJ/dd?= =?us-ascii?Q?7ydd2pM5j/JwtXuSKoDSaUtS/LqrECgfac3aKfAH3+oBbDZ/azpohN2BWcXk?= =?us-ascii?Q?ZWgSibVFYUE7ufX9425YPnr5WA05WEozQoOVSM+6n9wsevNIArPHwLGc6YIa?= =?us-ascii?Q?tZdwkf20SaBAKeacKdJ2fuVM/P7/G9gAkuCwmjlhzJeInWgQp9AZKx3J1BXl?= =?us-ascii?Q?SAPmPijzSPxGeDI0qWAwvIs6IWKWbZ7j5nWUAoUiMDlonIl0Amc0S5zCUljn?= =?us-ascii?Q?AEpKJtOMYeSRYYLT1i2iEvFV9pgXsMzEcfXUT93yfv3yIvSveFBjThK5Apf3?= =?us-ascii?Q?5vLPWsCJEz5dnnNz4Fhe4mu3N+3aceZ37yAUOz2uGKGQ54UdcFTqefrTVzZQ?= =?us-ascii?Q?6UWxwP80zP0dwUBA5+IgaRYRD4IqHhSn+lQZW9CZA/nR4IwTNGkzOp5znt5r?= =?us-ascii?Q?Danj8I6Lokog7tntA4YdRuJ9+LUcdNjjVDIAaZwc3a3sPfocPcgeZJir2a3T?= =?us-ascii?Q?Wr+eyUSPMEWPS7RcDUL2NmlubVlut5a3UbMmtcXpy628KT+FhtP2vjZLk1xX?= =?us-ascii?Q?IFN2ZeeY4Vv0pyKrSbaUSScmpWmakuXLS1lIz0SQ9iMS+o9t/7MejM0lCK2+?= =?us-ascii?Q?2HNNhtCqt0G6S0DFT54GJY48edHXTWeJFFY44WIypCeCUEP7RT3tU6Os9Z8c?= =?us-ascii?Q?sKqpIqIlV7bt4Ivar8jDGO0fK13uBWQa7pif2IpFoGRMMlJ6wIqXQyBBeNQv?= =?us-ascii?Q?Ekp/lEWofHNmV+ppAPymmJgTI/oO90n3rk/cmAh3qLHBdgEiGQhmMPvE+8lQ?= =?us-ascii?Q?/aecTv2iaYN4le8ljHf1uH+PAjQv0eCXiqDh9KN/uJjeOAEzMpuEdMaoaIR6?= =?us-ascii?Q?NMFccUsqB86CtaKzjlG1XOo9VDzuORb/P5KpWKAGLwu4vfUXhsVzh3MSguik?= =?us-ascii?Q?Dxj1c5uGywZc5BiX2W/9lu1cYRnaXx5CP0jeVrEmtZS3qllK28soFX1sGRlJ?= =?us-ascii?Q?nWgqzv6SUWOBnTPzQDnazavmXVGJiR+axlAaUANrKpcZMPSdZgjFuY/hr6sZ?= =?us-ascii?Q?tuXzVLAe4ePEjti7uYdrcSwKmOO/bod7yf6acDxW1UCugqD+YI4ooub3Zqqd?= =?us-ascii?Q?kweDNu5QHAQbN0d1KdjLbx+qz1VlUniFJLCJmrWIIX5SvsB6bEWJI12WGNE0?= =?us-ascii?Q?VKUztjsWO9m1QOoXRjL1bGYlnfM1+1h9x+gfqO+QiYmKCK4P6p5kLHAnf4TR?= =?us-ascii?Q?qFMVADu+DstP9AYJAXqwavsgcTQvKP+iM9y3SjoY?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 179cd0ec-c66a-44c7-8ab7-08de296dc69f X-MS-Exchange-CrossTenant-AuthSource: PH7PR12MB6834.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Nov 2025 02:20:59.4926 (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: nwe5cys0zUnJMDGDTkT29TniNIYTRwQhUB2w2LN+e/MEze9Vk9j/TiKaNIJBoD1bGPjYd61k112+vNSWb5svhQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR12MB9559 Message-ID-Hash: PHMA33LV7ANKLHDW4EIQ7DQW6IEZVDXI X-Message-ID-Hash: PHMA33LV7ANKLHDW4EIQ7DQW6IEZVDXI 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: 1763778452199018900 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 | 12 ++++++++++++ src/conf/device_conf.h | 1 + src/conf/schemas/basictypes.rng | 5 +++++ src/qemu/qemu_command.c | 19 +++++++++++++++++++ 5 files changed, 45 insertions(+) diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst index 160e7ad9c7..dcb24b1b23 100644 --- a/docs/formatdomain.rst +++ b/docs/formatdomain.rst @@ -4862,6 +4862,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 @@ -4902,6 +4903,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 VFIO alone. 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..7682236d65 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; + driver->iommufd =3D iommufd; + driver->model =3D virXMLPropString(node, "model"); return 0; } @@ -93,6 +99,12 @@ virDeviceHostdevPCIDriverInfoFormat(virBuffer *buf, =20 virBufferEscapeString(&driverAttrBuf, " model=3D'%s'", driver->model); =20 + if (driver->iommufd =3D=3D VIR_TRISTATE_BOOL_YES) { + virBufferAddLit(&driverAttrBuf, " iommufd=3D'yes'"); + } else if (driver->iommufd =3D=3D VIR_TRISTATE_BOOL_NO) { + virBufferAddLit(&driverAttrBuf, " iommufd=3D'no'"); + } + virXMLFormatElement(buf, "driver", &driverAttrBuf, NULL); return 0; } diff --git a/src/conf/device_conf.h b/src/conf/device_conf.h index e570f51824..116b959143 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; + virTristateBool 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 5a834ef842..95d1c2ee98 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -4753,6 +4753,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 @@ -4786,6 +4787,9 @@ qemuBuildPCIHostdevDevProps(const virDomainDef *def, teaming->persistent) failover_pair_id =3D teaming->persistent; =20 + if (pcisrc->driver.iommufd =3D=3D VIR_TRISTATE_BOOL_YES) + iommufdId =3D "iommufd0"; + if (virJSONValueObjectAdd(&props, "s:driver", driver, "s:host", host, @@ -4794,6 +4798,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 @@ -5210,6 +5215,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]; @@ -5238,6 +5246,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 =3D=3D VIR_TRISTATE_BOOL_YES = && 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