From nobody Fri Dec 19 18:43:43 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 (BodyHash is different from the expected one); 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 1747341540689418.89820374088856; Thu, 15 May 2025 13:39:00 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id AE3711474; Thu, 15 May 2025 16:38:59 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 4E1C214EF; Thu, 15 May 2025 16:37:31 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id C377913B4; Thu, 15 May 2025 16:37:22 -0400 (EDT) Received: from NAM11-BN8-obe.outbound.protection.outlook.com (mail-bn8nam11on2066.outbound.protection.outlook.com [40.107.236.66]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id CBC70148C for ; Thu, 15 May 2025 16:37:06 -0400 (EDT) Received: from SN7PR12MB6838.namprd12.prod.outlook.com (2603:10b6:806:266::18) by SJ2PR12MB8135.namprd12.prod.outlook.com (2603:10b6:a03:4f3::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8722.32; Thu, 15 May 2025 20:37:03 +0000 Received: from SN7PR12MB6838.namprd12.prod.outlook.com ([fe80::529d:478:bc5d:b400]) by SN7PR12MB6838.namprd12.prod.outlook.com ([fe80::529d:478:bc5d:b400%3]) with mapi id 15.20.8722.027; Thu, 15 May 2025 20:37:03 +0000 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=0.2 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, FORGED_SPF_HELO,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_PASS autolearn=no autolearn_force=no version=3.4.4 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=qDsyXP2X5xgFeVXGfEjZcn9mbikRowWW9DeBa84718mq4DuMxOBbqlqIJxpsEJ3zI0DihxQs5LXXjv1zm8vodSvQfnDlL20GVeHMT89uu5ZlwRRdSYV2Qjjtbb2T4O8E7PKnmPMRZPQJTRAGPzQzCofekR2uLDvEPNtG/pUrDORnWzWP3RDHpyVTXjUinC7PWBMQqKTfZK9yxhyOH9cMz8i4vV1/PaB8ZBJeOFDZbA2L16vME8ipjptfKfaqePLM6n5glIRkXWymRSGhqwmuab8VTbGI125RmR6aSDlSVX/j6fiGWovGsUX809uaqUyl51abykUG1dtyhk0UN0q21w== 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=tHSKHaQQB2U2vRBEbnH1KZB/J0ildrx8SmWYgjFcQpQ=; b=JrkX9SNr6fVwdVz5H3QU03DONMeAkWeNRlbFb7ASHxQSLYk7geYJkFuCloGp2dIQHJ6ARw/P7Nsj4JBGYiPvg+mp1pqtnbKMiv4q1noKJOTfxMDZ6YH9uz+Agw63olC+wUcP1CzrfV98iWy8VkVoBFnzqIOkyk6jnqgOr9V5mZeYYOhAnW6JQfKlkNWlxEPAw0u3RU8AcaccDNxAs9OzxLSZzl+2s3AF1iY94vUXlng/rUn8KQQ2fExLD+/k/3xY1tSoClpRKrWgbT2s29ZhxJAq5/6ABgWIhKqXGCsEDrG1kaYJcF7TYXPMPCKs9PI5iOo4BsrCPHfBLZofxhQP1A== 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=tHSKHaQQB2U2vRBEbnH1KZB/J0ildrx8SmWYgjFcQpQ=; b=TzMs/RtZyaibAU0S87I+hPnHW4K1PiNXPyqPN48Qq2XpPteOGxNIbHk5Yzo5iz6PYs2XbH4igE8IdjqukNuMfJaF84uNRNl2/bOmXbcyRvzgNSIQWX5izcBD7WxTUeql69CnzeJYAc0oIZci3vVaE4z6bMW8jEXVKIDucjUvcJlRi4JiAngjJR3hEyRrGWVgPf7OcMZ3gFkNy0YCkcAp5I8Mj2cPfIaVvWpsGMfLfUqOBF/BfelTMc5imuLYLATriolNhv4u23zuDukaS72EgMgUfvphwx2E9PO7+o/+O5l8FTMdTYPh//+25W4wZOhKXuswlsnkG3LwQAEzjbr1cA== 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 3/5] qemu: Implement support for associating iommufd to hostdev Date: Thu, 15 May 2025 13:36:41 -0700 Message-ID: <20250515203643.21109-4-nathanc@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250515203643.21109-1-nathanc@nvidia.com> References: <20250515203643.21109-1-nathanc@nvidia.com> X-ClientProxiedBy: SJ0P220CA0029.NAMP220.PROD.OUTLOOK.COM (2603:10b6:a03:41b::13) To SN7PR12MB6838.namprd12.prod.outlook.com (2603:10b6:806:266::18) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN7PR12MB6838:EE_|SJ2PR12MB8135:EE_ X-MS-Office365-Filtering-Correlation-Id: d8409fd3-7af6-4d30-67c1-08dd93f04021 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?DP152ReOtWjjVY1IiArDI/Pa4NbFVGLcQbwf6T/G5Lf8JD6hlM689xz8BWu+?= =?us-ascii?Q?BLHPm+XlcF8wU4IfIPh9GwAO2oNTHUZsWvHu3SG7+0uoIK1/eLJqHcN1Zb/k?= =?us-ascii?Q?3UDXZ5LIPWzAi/zgUh5TgJy/Iif3vIhvWQ+trRCK3FUxRoJq03LQwKtLaKJI?= =?us-ascii?Q?WrSoqJv4DCgoOlhmLJKyUc/dk6odQLeWmFqYdKsMt121tPozSs4j5X3Wh/pC?= =?us-ascii?Q?Sa+riYcTY+3PUhN7A0aWCfpmql0RP7P5CKQYhuxo3gp25rwpFBIVMSaUuafp?= =?us-ascii?Q?YCp/7Rre0brhhVTtPqIagOemU2YTNAEO6J9s2BNa5GYuwS/WlYu5BNYN9cRi?= =?us-ascii?Q?UBURvFpv3xg0+de0bM/Ovx2U9eAoPBW/ea3qRjfptkml2d10g2pQxo4jOFhF?= =?us-ascii?Q?f4bxSM3HSy9l0RajCJzTD4eJR1coMp5dfuzJQswIvTqbVin+OEPumueEy+1J?= =?us-ascii?Q?kKhoGY9Y/89/CtWOPUJKdzs2MqRnvugi9hWBX0ckNAH8Lh3PGkBJlA30RV4q?= =?us-ascii?Q?S3fwO+m/akcJfmzKCV4zRpdKn+EcgWJxipQkbc8Ylll8OsyEqL589HB+ifIN?= =?us-ascii?Q?dmYr+7JB0/3CAhwU+varYEzAU8fC4wW/nSsUAEdLV4zS9tyUvmUrfRMKfiF8?= =?us-ascii?Q?ZrXkMjzLkHUSYgGq5hZIwUuGjkYiLCQAe9Kr2O3wB6ghUtJlEHIC7FIZ+QSq?= =?us-ascii?Q?1ePvG/4Joegwi8SlCR6GpqbbWPdetIVZLykoeFDv+mJjiW47VJfr8fBAB9Pb?= =?us-ascii?Q?f7hefMwaXOeqd3lONQAVpmPKfLIlesy8M1p67wR/c1vpkXnqcozPzs3DdD5h?= =?us-ascii?Q?67pgt4GGcww+LpxufVIP4kuXqqspLru4jMgWT7TiV+RlZAk8zoJgvhQjSNro?= =?us-ascii?Q?cZcaEOvaXbTt05EICo6pkKtpsVEee/9wpnQBpZPi895FEIZ4ww8ulGgyUpTK?= =?us-ascii?Q?X4Qs5+kNMRL/Aa97sagihTnv4geP2qWvz3pBOXZYhyvMP4EOXmBl3pWxiQIU?= =?us-ascii?Q?WmUfXfVLgMKqOxCEFEZ3D/HHHZClaNYpIm/eYeum9/1DJJqL4oa2VDEzXlPn?= =?us-ascii?Q?BsJAl7fGVZ77uXwibVABsBGy5EDc8NRSBS7xYXmVJSiJ1m2O7V1SlQ6zjfhR?= =?us-ascii?Q?yibPQ+WyKap5j2FR4dvbjJOfJ5/1KpnyI/emqIEuEqrUKtsF1sXOQh582Co6?= =?us-ascii?Q?6sxhyXC2YbT1pbmAYuvqxc9Fn1zAguSDeSmJIMYjmEGZFyIQxwomX6arfqkt?= =?us-ascii?Q?thMULO9kQaKixPfgCLlrJogp/b5iezZfmOX17wKEyGqdHQv/HRhS/dxmmghZ?= =?us-ascii?Q?hfpe26TIrBRkZAL3ComLM6q9voMGZ0gT+19sU8SQsfscbVn2Yfz8fynS9/1V?= =?us-ascii?Q?LcLD6MZo4NFrJ0Sj8cbvGhAAn4tYluapJDErSqNhlA/IKTapxQ=3D=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SN7PR12MB6838.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?IJLC11PB8uLF0eKJobqC7b5J/DtqKr4tiBNVOSZT1MRM6pm6t2G5tnj2KaGs?= =?us-ascii?Q?508wvEoxVtlTcsdbF9GVl/ab4BvbrRzseil4WPsiWuAv3DRCvSfXbVGwxwhc?= =?us-ascii?Q?LFpHtUGB53you/jTO7d0m1fZuxb6XdqebUnX9TFOmcwq9tJxyHuy9iTdNyDC?= =?us-ascii?Q?XR2SN0l3PbpQgvOi7fNkastMY2N0jTnGXaOjmuJMDvva8QhJWmFThrz46Xpf?= =?us-ascii?Q?iBIcGk76FWyDs/FBV7eDFjFZJcbfiQAAwMeW1fkQ9e9L69BG0AIDepN0dtGN?= =?us-ascii?Q?MU5HS2/Ovp83sQMF2UgCwOYiJuw/lEW5+lxenIuaI+Of5G+pKFW1fbp42FET?= =?us-ascii?Q?JacxVZ/xDwNq3ZRWKqpaEwuW/Z/CxVQtt5XTQDTQXJgoq/WKx3ytscbOn9WP?= =?us-ascii?Q?dXWK2rtf4ZsUZXXzx523sra82jfcvHNW2RRBQuXC6mTN1ZoU8h1ZXwPkH9Kz?= =?us-ascii?Q?hvll+QU+31WImqZ2a0qiuB+k65A1w43Qfh134gAOkmp/iaZgqptXLhlauSjj?= =?us-ascii?Q?E+v1J6/0gypp2i5jYs4416LHdVWp9Y0g+PJzSeCrNCc8Fcq1iVFFOTZBgQ9p?= =?us-ascii?Q?J/ugJ96EYrrL9DhEDl9108zmhaQFYd7IiCxLNwkZqYdVQd/HlAWBKbnlHtpg?= =?us-ascii?Q?rmldIqm0xw0DHUYa5/bFdhZuD5pvpjCcpfMNys98kJGanbV1w2BU+PkUSfN8?= =?us-ascii?Q?SoYs+XYL2vy8ICQf3CcdotFWpaVpr8mJDVqDitiWODNq3OPyoDeG5/2QWnAf?= =?us-ascii?Q?XujFFggeMlVtUZWtpqLT70NCyRi5ww+fYEzX3djDP3o0pLkxKdzoj1TpbpcX?= =?us-ascii?Q?iA/LJj/OpXT7dqRJV38Eq73hdHGRsxKUK9dD/Jv5+nXA/LCuFqWqj4G2UThj?= =?us-ascii?Q?xeNNiJwtQwkkU2UnmaD+UIyBO1biSZspUHci/z8LdRlTlU8HQyZRGGUc5lsi?= =?us-ascii?Q?ftMRLUxnC+xHc/Nhr/r3GUKYP56b8gDiHCyq6p5jajlSqrYW3f8O22nYLN19?= =?us-ascii?Q?22XtfAr3Utpw/pLVmSV9ge096XxdBAm4Co+KDfILRfOOGl+7y6hWrtmjkCeg?= =?us-ascii?Q?w2ojZmlwK1D74ga0Z9I/JTMgg2k9TtXU3NB6DQB+DjAiNnFROPO0fPqlHhqo?= =?us-ascii?Q?HrW8uMRnMxkIWoRzpNtNFXFG7Pg/N29VeI5zNj9+HvTH7306DZ5oVU6gaWvb?= =?us-ascii?Q?ubJ12jr27iyE1o3DEWu83lwDFAItWvzAa0YYfdozbZLYEkAph2cYAbNhE6L3?= =?us-ascii?Q?TjjkIds/e8uJ4/0p65ZLBmn2ibc1zjHRXjdzsN8/Xr/D0mEk+b1BGoV0TvcA?= =?us-ascii?Q?QqViBKsyIcdi9yPNOCLujczCasLsnZ2/lvbFjyzhBfZySO5xfWQP7uuEyCwv?= =?us-ascii?Q?kOyDOEmgWMMl6pXyew1P7zmhLr74v9EP9qYA16NT5I3OTjRo+ph80skkFzA9?= =?us-ascii?Q?jONOOAVvvd5FZ3Wq1s+Ko1y/th6vb1yyhGDuLdcH+1NqJK8hCcwZzQQ04C/v?= =?us-ascii?Q?sLi3JRKdildfF1UT5N4YlpaRWuy3lTtK++Z50Fu1948SQTjiZhwRPZY2XkLX?= =?us-ascii?Q?ge8tMgcpXx2+FDOqtZkfrQ8mkJoCk+4VIF8mHIyg?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: d8409fd3-7af6-4d30-67c1-08dd93f04021 X-MS-Exchange-CrossTenant-AuthSource: SN7PR12MB6838.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 May 2025 20:37:03.4841 (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: iBiMSmxxjq2IRJVuZkDe0ncTNTOND0eE43tW3cfUWjTKoeaqHl1dfxI4NccxU9s/TROoTrhnvbXUuzCR2Lz6gw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ2PR12MB8135 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: W3CIKMETBCBWAMH2FUWJE7KAX6HSAGMS X-Message-ID-Hash: W3CIKMETBCBWAMH2FUWJE7KAX6HSAGMS X-MailFrom: nathanc@nvidia.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: shameerali.kolothum.thodi@huawei.com, nicolinc@nvidia.com, Nathan Chen X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: 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: 1747341541397116600 Content-Type: text/plain; charset="utf-8" Implement "iommufdId" and "iommufdFd" attributes for "hostdev" devices that can be used to specify associated iommufd object and fd for externally open= ing the /dev/iommu and VFIO cdev, when launching a qemu VM. Signed-off-by: Nathan Chen --- src/conf/domain_conf.c | 31 +++++++++++++++++++++++++++++++ src/conf/domain_conf.h | 2 ++ src/conf/domain_validate.c | 14 ++++++++++++++ src/conf/schemas/domaincommon.rng | 17 +++++++++++++++++ src/qemu/qemu_command.c | 2 ++ 5 files changed, 66 insertions(+) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 9330c47b7a..47b7e9acb1 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -13582,6 +13582,19 @@ virDomainVideoDefParseXML(virDomainXMLOption *xmlo= pt, return g_steal_pointer(&def); } =20 +static void +virDomainHostdevDefIommufdParseXML(xmlXPathContextPtr ctxt, + char** iommufdId, + char** iommufdFd) +{ + g_autofree char *iommufdIdtmp =3D virXPathString("string(./iommufdId)"= , ctxt); + g_autofree char *iommufdFdtmp =3D virXPathString("string(./iommufdFd)"= , ctxt); + if (iommufdIdtmp) + *iommufdId =3D g_steal_pointer(&iommufdIdtmp); + if (iommufdFdtmp) + *iommufdFd =3D g_steal_pointer(&iommufdFdtmp); +} + static virDomainHostdevDef * virDomainHostdevDefParseXML(virDomainXMLOption *xmlopt, xmlNodePtr node, @@ -13656,6 +13669,8 @@ virDomainHostdevDefParseXML(virDomainXMLOption *xml= opt, if (virDomainNetTeamingInfoParseXML(ctxt, &def->teaming) < 0) goto error; =20 + virDomainHostdevDefIommufdParseXML(ctxt, &def->iommufdId, &def->iommuf= dFd); + return def; =20 error: @@ -21193,6 +21208,16 @@ virDomainHostdevDefCheckABIStability(virDomainHost= devDef *src, } } =20 + if (src->iommufdId && dst->iommufdId) { + if (STRNEQ(src->iommufdId, dst->iommufdId)) + return false; + } + + if (src->iommufdFd && dst->iommufdFd) { + if (STRNEQ(src->iommufdFd, dst->iommufdFd)) + return false; + } + if (!virDomainDeviceInfoCheckABIStability(src->info, dst->info)) return false; =20 @@ -27511,6 +27536,12 @@ virDomainHostdevDefFormat(virBuffer *buf, if (def->shareable) virBufferAddLit(buf, "\n"); =20 + if (def->iommufdId) { + virBufferAsprintf(buf, "%s\n", def->iommufd= Id); + if (def->iommufdFd) + virBufferAsprintf(buf, "%s\n", def->iom= mufdFd); + } + virDomainDeviceInfoFormat(buf, def->info, flags | VIR_DOMAIN_DEF_FORMA= T_ALLOW_BOOT | VIR_DOMAIN_DEF_FORMA= T_ALLOW_ROM); =20 diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index ce447e9823..78507d78b7 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -375,6 +375,8 @@ struct _virDomainHostdevDef { virDomainHostdevCaps caps; } source; virDomainNetTeamingInfo *teaming; + char *iommufdId; + char *iommufdFd; virDomainDeviceInfo *info; /* Guest address */ }; =20 diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c index 88649ba0b9..292398b115 100644 --- a/src/conf/domain_validate.c +++ b/src/conf/domain_validate.c @@ -1401,6 +1401,20 @@ virDomainDefHostdevValidate(const virDomainDef *def) ramfbEnabled =3D true; } } + + /* Check for unsupported conditions: + * - A hostdev's iommufd fd number is defined but its iommufd id + * number is not + * - An iommu device is defined, iommufd is not defined, + * but a hostdev's iommufd id or fd are defined */ + if ((!dev->iommufdId && dev->iommufdFd) || + (def->iommu && def->niommus > 0 && + !def->iommu[0]->iommufd && + (dev->iommufdId || dev->iommufdFd))) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("Unsupported hostdev iommufd configuration")); + return -1; + } } =20 return 0; diff --git a/src/conf/schemas/domaincommon.rng b/src/conf/schemas/domaincom= mon.rng index 41db338c71..6c1f901eb4 100644 --- a/src/conf/schemas/domaincommon.rng +++ b/src/conf/schemas/domaincommon.rng @@ -6442,6 +6442,12 @@ + + + + + + @@ -7809,6 +7815,17 @@ =20 + + + + + + + + + + + diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index d683d0eef7..3a8b71a00a 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -4724,6 +4724,8 @@ qemuBuildPCIHostdevDevProps(const virDomainDef *def, "S:failover_pair_id", failover_pair_id, "S:display", qemuOnOffAuto(pcisrc->display), "B:ramfb", ramfb, + "S:iommufd", dev->iommufdId, + "S:fd", dev->iommufdFd, NULL) < 0) return NULL; =20 --=20 2.43.0