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 175936610736494.29245197913053; Wed, 1 Oct 2025 17:48:27 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 332CC417EE; Wed, 1 Oct 2025 20:48:26 -0400 (EDT) Received: from [172.19.199.14] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id B4235441D0; Wed, 1 Oct 2025 20:39:28 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id ECAE24412B; Wed, 1 Oct 2025 20:39:09 -0400 (EDT) Received: from CH5PR02CU005.outbound.protection.outlook.com (mail-northcentralusazon11012038.outbound.protection.outlook.com [40.107.200.38]) (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 826AB44049 for ; Wed, 1 Oct 2025 20:38:58 -0400 (EDT) Received: from PH7PR12MB6834.namprd12.prod.outlook.com (2603:10b6:510:1b4::18) by SN7PR12MB7299.namprd12.prod.outlook.com (2603:10b6:806:2af::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9160.18; Thu, 2 Oct 2025 00:38:49 +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.9160.015; Thu, 2 Oct 2025 00:38:49 +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=Vg4lSkpk6rewo06CzCuQCp+paTYKCLYrMyHx7TlTlzH7L7I/MC5pxQN660Wlydwot/RKX1RQud4vOXBRE+ygw/AdnGDqmCs+k4jMuHK/CiF8646HySmTjroYiSrfp5CLU6g7SuXxfhl05C28OTJNM2eBteTLixMHqLIrfxr1o7KDDd9DuqtBzdYNTWFx4GLFSSZoJoE2iC+3lo1jfS7p3CHp98+cwqIvr4J+1MwoFJYKtGsRfBXxvzJC0uzX3v1D/VcMWaI1W/HcCdUfxPLBBNlbhZK7oK8/NIJ4vKNTdyo7tCBvvmYEHoXl/+mq5DWvUzo3p7371krg6Eaaedyx5Q== 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=ns7sTtUmtI+p/Vkh9EzE9lcZvRU5U9FYnseOdzchXRE=; b=WYiqgg8vVExtRVvJ2iKqRbSxXtBNBS4LGYRecHUQrpd/VHimJxD0hrEeVxxolSKSYLVpZIW7/upoAY93I7tLWzy0aMI94bckKTLbF2Cm1MrnoGx10JFwcVFfNPOQZMbp/QuMA9+C9slbO6z6CGgDvtT4RPCOX0EBWyh0NyrXeLIh/h6hp8BKvKeMtefJ4b5xxbkqIh4FvNwBUduUeIwhHYWby7mPfLpiX/V1yx11VGPh1qfe92GCkvcc8tU62zFdtLuZ8AKklWJqB8P7JlCeyJ1/rJYlkPylAZO9pmafl3Vxli8J11JXcenIhO8Rk0bKKeP912pj9XffUg4B9X28Tw== 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=ns7sTtUmtI+p/Vkh9EzE9lcZvRU5U9FYnseOdzchXRE=; b=VL/YLItAfTuI0Z2hQN3QZue4Q8C+ONzqrYPDT7us3asMWnuCEoh+kZWDqTFAuHja3Sk1yHOvzpZlZuWuc4ugQp8rwX56u69FgsuPsgonoh9h+a5GZIXLuOhzRw5lMFg7K13UztyeBhKuRaDVRmG9ihsEZBgFpiq3QRLr9D8vzv8bue4nzHFItXwdpPaIOx2KPXf3RIzHyWzcaBwmvIewcvG0j85MLL+1us5JbfH+fzYQ3q7NE67lJXt4lakM5pnTGko8RbOiWAS6zfr6iw3wKebfxmhK+US75esGCSA/ilQp0+h2r/aUCOKFM5KA6Qmh93xm6E4brC2P6VUcWaWS1g== 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 v5 4/7] qemu: Implement support for associating iommufd to hostdev Date: Wed, 1 Oct 2025 17:38:34 -0700 Message-ID: <20251002003837.1546646-5-nathanc@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251002003837.1546646-1-nathanc@nvidia.com> References: <20251002003837.1546646-1-nathanc@nvidia.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BYAPR01CA0013.prod.exchangelabs.com (2603:10b6:a02:80::26) To PH7PR12MB6834.namprd12.prod.outlook.com (2603:10b6:510:1b4::18) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PH7PR12MB6834:EE_|SN7PR12MB7299:EE_ X-MS-Office365-Filtering-Correlation-Id: f322c813-551e-488d-8224-08de014c0da8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|366016|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?E0Z0Hc1uEjwGdxfuydd2AVXbyZpIE9twvHn5gzoMcAPqdIFXGJ9hzS/E+ulc?= =?us-ascii?Q?MNk58DxaCZdqApjuGKrxxUE38v+b01pMr0pUaLYe8uw134dvHYzz3mTAB28t?= =?us-ascii?Q?0AvfojCSyP4Gfouj18B91bwLgciOoFLYm2Ut9olvLM2RBCdvMNO6llI/iNM1?= =?us-ascii?Q?YjbFYung4B07tjo8Evt3ZffV/GYs4Uu4AQsu9msBrxYeSU+zuUQ3Re6Rllmm?= =?us-ascii?Q?m/st7QgBFYFOILek2NMlWoxjlmmW/1FAMrmS3rDB9RrHvingma5on7JeXNMq?= =?us-ascii?Q?WNvt1G78FQj6ZnMdFk9DTtjBgLptC04SD8ZOePlNQSjK1TbrMhxU3HIH9RKC?= =?us-ascii?Q?H+f1ZnJtwIFq+Ljx+ZYCoIvoEGjxSjiOytoaaom39adLCYTCsBpzUfvLuAcD?= =?us-ascii?Q?6KAgExd5+8SnfzJWaA5/WHPFMaBafuZiJYuekOvicFK7RQZQBNcXkZjnPDSe?= =?us-ascii?Q?XRC88ay4S3v+XNWV5DwAFRpA1DMy33jrWvnZtPe3gRtpqXMilvefE8Z7QQ1G?= =?us-ascii?Q?GzEhTmf+OSjbBJJiNG5Y8Rt0nqwE//ua7aNelFQ7jtn55jrEMpyNX4EKmp/T?= =?us-ascii?Q?QKla8d/I4FG3zftUCSPTEF+Pfq1f9POnL1sPRikiTuuA//Q0NpNQWy+yo8WM?= =?us-ascii?Q?YZOrW5FmKWsf3BOFjLi53gbyhdKzx53ursRPog1a0NOcX/U7CVJPaaIrFAja?= =?us-ascii?Q?SSyPYzhrze1eNwM3MNJuvTXn5mQmZmx/N0GiwVQhEqyU6ha0WIh5Q5CpDcfq?= =?us-ascii?Q?51CKH/Aqud2spvB6hEzf4lCoEfuW+2pADKYUdhk3s2muvGFxXSV0ZArTBS6T?= =?us-ascii?Q?+QigcWk0pBEhI0WvprJQ/77bXFoA6JWpwL6YbYnSXQ1J9Hu+VvvpTAr7eXCn?= =?us-ascii?Q?N1h5mAd4Aio2ocTfsYIXuQoyMGDsIepHppGl2wWdVh0OFyx+mxD71bX1vsJg?= =?us-ascii?Q?9tYn2LwqXJPXFVVE5+xmZCUeoGwse5UIGv/R427pYWWOqz19hOY2YUrIE74F?= =?us-ascii?Q?VHguodDVpKObBy+Sp9asQFbtcCR+wiR6ZwYf/MUXlFSFaV41KpKNQzrSNOV4?= =?us-ascii?Q?mIzXepwiFAo07fwH15FcWS5PULpVQ33JIhnB7HxQVBAjgAhrovJEnEvEGyTj?= =?us-ascii?Q?6A2ubEE92DOCFE0JdM/R2bvQfVR2Ub2sbLABVgV/CwVP26jMybbyFBqqdbBd?= =?us-ascii?Q?uqtqXXOc3rxyTQUypPb2u16lglNPZlGHkpr80qzjcrL0tTTkgxwbJVJBPVFE?= =?us-ascii?Q?KNrVHFzye5/WRxD2ZgQZVKPRyetoPv9lMlH3UB3/ZUI0pptXiR4lerUb38On?= =?us-ascii?Q?wVnye59jgKyTEtyzU6K0IvBNvvhiaC3b5u+qcTSJoasjyg+RcwwrZis6Dk60?= =?us-ascii?Q?4/BAk/RUwVOqITJYTk6mRCPEKm1Q1pJ/FYDTwyc4rMNH9mUTwMkIGrn2Fi/N?= =?us-ascii?Q?F21zaMb+U6JQfv/oKCFDZ263UDHzkx+m?= 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)(366016)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?C+fU7sSNuqqRUYXovRajSMpVlHaReED73bZu/yzir4JnBS5y8e8vEs93aohf?= =?us-ascii?Q?niuNHZ7ViegSbqQug3Mq83bts54R8iuv1Q8OUYWtcocK147s5tb52lUsPTkO?= =?us-ascii?Q?7m3Iw3WuKgAFiPKl9xBgfQFhx/49R2ky7mk1CpAykqD6/ZtUydIKHYjXzHqB?= =?us-ascii?Q?qvbwPdKsdFmh1R7DW/JSVHVnt+5yIRWVH08VFa5EjhyaDv8oyEfYYQC13OyF?= =?us-ascii?Q?sQAs0NRdNV7uKO58WP9ykCj301ix1Y6mkkRWRZM/U/1+6oBFObD6gyzKMtaR?= =?us-ascii?Q?EjfdB1IwefwcUJLd7sLkZx7lfSl9up0LuHA/Aj/zVcaThyqBWaGSCE8C1+gm?= =?us-ascii?Q?okmHcnXUD3Um13lvQH26dVIadfQ+lF+6jWhi1oNhZUUcGePPm0Tgg1i2H7KG?= =?us-ascii?Q?12RYDigYfJxQldVC+cqYCyn2I47NcrOyIhkEGCMwmE7/sCUu9BpjoTjTsKWu?= =?us-ascii?Q?A3knpBioFHcKlfWIICAs6BZiB3Qvt+7KkCPxSBUbPpAnhdpu+K0goP1ckOCU?= =?us-ascii?Q?zXdH7kznzUNWMkjgAzJA4SaA/mnwdf//touRNPtc5BgjN0SfO3jKui0nEZiP?= =?us-ascii?Q?dqIGe1g3JufIO7pIKRrnzOmKxWenXf06ZzyuGYWP4l+HzK9ewNLrmjCi8rNO?= =?us-ascii?Q?oZ3JCeJf2F7psQyvgQvy+pQ502HyMtdtydzRfmL40lspgxRhMS4bXX0T4gNA?= =?us-ascii?Q?vFBnSDD21KhjdtA64GvEyTJhvO4wQgjyTft/eK1wGJDsijicH/XdLii727b0?= =?us-ascii?Q?DAo2vUP11FhxmPsRRa3Y35MQG+FEqy1pxznFSAqCLxi3Iczy+TPffm+1cxTV?= =?us-ascii?Q?WpULYpHDTm+j4rqQ9Z2wdEXI1YQ7714zZoLFDV5ePoSLJdvq5reWAdG/9tx3?= =?us-ascii?Q?2L4TgYtt1V7XQuN68MRlWGY2sxY3eVgMkA/6UgrFXINJ9hlasycHpm1COZVJ?= =?us-ascii?Q?GrR0RrEMM1IBL+s2Kvpl3w7JmRaKcohBLq0BZmbUvnEvUA+lrm1JUbSbbxYH?= =?us-ascii?Q?TJVuG/nhjyduvDljdbqW7e+TQXQL1XZnqKmJbqF2vyqqBMlIvxi9rmDJbvAq?= =?us-ascii?Q?ysMROcffMF0p7tIZbvq53ll6jqJlWmAfs1CjyZmu1Yc2TgGsEGTamzVaWO16?= =?us-ascii?Q?F84EH1YVbAFRP3kpMqUURBEcymFitFwoNyPXJnXdvdRrTnf/agf7Zg7r9e3c?= =?us-ascii?Q?SfKIkWjzsP8Wrb24GdHSlF/lPptgCXXQEhOm9ALqWplU5xQ/Va+/nW5ZeVAk?= =?us-ascii?Q?+vy1zXhkF7AhDR3ceFouCsQsBUf8ZHLwxs9E+L9K/GHYAiLXDuIBtil7cDXk?= =?us-ascii?Q?6qDn0pvR7cQPUOaF5s2JJY8bTXAtpJPq6FdgCBSET5pRFHiUjpgIf1FUITfK?= =?us-ascii?Q?wZSC7r2ELLWq9cTukMcsgV0gwopp6icmLZwPAyvFfs8ZdDxCDrP/NydxvVVe?= =?us-ascii?Q?UKBDEvwSgHDo+IMiM/xmlIYe1DT65NyqirCBbFXIEiWtE2pHKHVyhcwKzb15?= =?us-ascii?Q?Dx4o1lYuxbrNoUuFDeahGJHHn2yP8Mrn1uyETSr2K3MZLBkxrDlOkRaUgSc9?= =?us-ascii?Q?uR0LKdZP6oBmKbVXJ/Pfs+6AU8n2eLk+GsdwSaRv?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: f322c813-551e-488d-8224-08de014c0da8 X-MS-Exchange-CrossTenant-AuthSource: PH7PR12MB6834.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Oct 2025 00:38:49.2981 (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: knHCTHGLAA8mjMYpd/dQBC0KKT/oSSQbDpY+t0UhM/9qBy2rre3zuik+EtnQgT2GfEDC+PFFR+c8qgJv3jpwfA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN7PR12MB7299 Message-ID-Hash: L4KD3I2MIVTO3AH5DG4YAHYUDRT73ORW X-Message-ID-Hash: L4KD3I2MIVTO3AH5DG4YAHYUDRT73ORW 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: 1759366108561116600 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 972493e62c..221bb22f3a 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 9f98a18695..38dab98dee 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