From nobody Fri Jan 9 08:29:32 2026 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; 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 1766110974870938.6768629670636; Thu, 18 Dec 2025 18:22:54 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 993) id D27ED419A5; Thu, 18 Dec 2025 21:22:53 -0500 (EST) Received: from [172.19.199.83] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id 3285B41B20; Thu, 18 Dec 2025 21:19:50 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 993) id 5D42B41853; Thu, 18 Dec 2025 21:19:32 -0500 (EST) Received: from BN1PR04CU002.outbound.protection.outlook.com (mail-eastus2azon11010055.outbound.protection.outlook.com [52.101.56.55]) (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 BCE4E41853 for ; Thu, 18 Dec 2025 21:19:30 -0500 (EST) Received: from SN7PR12MB6838.namprd12.prod.outlook.com (2603:10b6:806:266::18) by CH1PPFC908D89D1.namprd12.prod.outlook.com (2603:10b6:61f:fc00::623) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9434.8; Fri, 19 Dec 2025 02:19:27 +0000 Received: from SN7PR12MB6838.namprd12.prod.outlook.com ([fe80::69ae:2df4:372b:6fbc]) by SN7PR12MB6838.namprd12.prod.outlook.com ([fe80::69ae:2df4:372b:6fbc%7]) with mapi id 15.20.9434.001; Fri, 19 Dec 2025 02:19:27 +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=miJCxX9EmSZdjq9S3W3Z8CSf3wqt3Xh/Bdx1sK5MTPU/CfdhrPqQ/VsWhiNQjgXRB8j5iVpjZ3NXso1HdMdbabjspEfdo/cAPc6BneYePjXUeymjqR0iEapbumkERW3FaNhmQoIFtu4XJpO/vTmiqxfnYeNPTeXdv8n59Rc0F6f5UfUAHA+H+l9rvkyymvQ8z8p0fRnyD8M9YCPfWfNT66d0S6303vJvrRmheQ8TgNBtKm3b85U1b8R0aUreXM2h2eePwVecgvlw9AnCIWingsY1efB/fH4GDw3UxHRlQwAjvup4dfeT2msHhNTpaV/nORzfbQVeMgja8v4Xu3zk7g== 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=3wTtO2ZA/pOH9zJ39JBubt/USt+35sAkxzBAJQmccJQ=; b=bOeX7tjkektS/Zxnc7GTAsUZJGVXTRFZu767SI1pT3DBjJRRH5OWM+0eVX8xqugi2Yo0w+I0WJjS8qrfClUp6OpuikplV60ovbrtJxKtVJ7w9FehqHDjMr1GAM1NdWCboEoZLWhb7G1Ned9j8SzNeH6TPbe0Ohk/lUC3kREA8NeMef3Xr3OgMepu+kJRanbmxYyir+AvqTyyq1s9EHUQg/ASdgP8l09TdTD8DOnCsCHaB9eJteoCziiIp8sc4Z/Cr2UOkvMuhjpu8wydHkCoNFX/CmyUKVTeKDLbYCpNFGJ/0XfAq1JFF77XUNrAWWjv+rfisq+bPdG+i439ixZeSQ== 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=3wTtO2ZA/pOH9zJ39JBubt/USt+35sAkxzBAJQmccJQ=; b=MOjqgHokBB8Aj7h2VEvjrFy4VxfcAyoBDzzpdH/e1BzkYk6EYCx4Rqd0pLWhnGb1ps7gxvXaNSmu8u2sZ24h4G31+gp6hQM5RFCGNQn090oruIq1UHiQ4aRHoPRheH+BJvjfQajcIyByze5irmaQcFdpot8vLLp/ZCeAxuwe42Qe1SOvbmaWa5Rm2aQ5GJkasU1bgiAL0QWat+o3akiQecmkZ3hPc3ZBio1IiRs2GJg8FhqGXfzcDDhBHKsobQAkf5ErDgNcaqUwvKrV99dCjZD8uKTMaUhecZdh0QujLfDfxnpZg5ezq1nnXcIUVYWhEiYLtshxSdlEQzDPKR7/vw== 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 v3 1/7] qemu: Implement support for associating iommufd to hostdev Date: Thu, 18 Dec 2025 18:19:19 -0800 Message-ID: <20251219021925.1864433-2-nathanc@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251219021925.1864433-1-nathanc@nvidia.com> References: <20251219021925.1864433-1-nathanc@nvidia.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BY3PR03CA0004.namprd03.prod.outlook.com (2603:10b6:a03:39a::9) To SN7PR12MB6838.namprd12.prod.outlook.com (2603:10b6:806:266::18) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN7PR12MB6838:EE_|CH1PPFC908D89D1:EE_ X-MS-Office365-Filtering-Correlation-Id: c6bc7476-57d6-4335-580c-08de3ea50905 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?TUplNGhyZFp2aVBQNVhTTWhuN0xXdDF2SlpFOEhsYW15MXVsNk85NVAyV3kv?= =?utf-8?B?RFkwMHBWeVZpY3dZbEdLWTdwWExtS0h0QTBwS09zTGpUQWtGSzBpU05FWlBP?= =?utf-8?B?aVY1eGpMeW1zeklGMGM2T0Flazc4c3Z4U2kvc1lVL3IxUkxGR29iTDlvODNJ?= =?utf-8?B?YmYrcFNpRTZ2Y1hMS1Jpd3Nnc21zVkRtN1BLeEpzU3gvcmNpY0Q0MVRadDY0?= =?utf-8?B?QmkyT3hRWEpFNk1vVTlHb2dTMUsvVzdxS0hKZm1SakJCUUo3Z3lLMG5Yblc4?= =?utf-8?B?dmJxMUZybDV3K2xMUmJvcnZ3aHBqS1FWZUQ4bzBBOHlOWXdGdW1xQkN5dHBh?= =?utf-8?B?M2prbURab2dtQXV5QVNxQUZuZ0xMaXJnMU9nem9wY0xIcloxWUozMElWcDNm?= =?utf-8?B?dUY4WDBtejlnWWk2Lys0citnQjZsTWFZRm9qL2JLY3M3THpMVWdLUllsMFBT?= =?utf-8?B?c2FvWU1jYng5UGUybnBEd1QzdkR3U1lhSG9heWtoeGxSZm93bmhvZUt4M0pD?= =?utf-8?B?SXZZb2JhMVhMWGVlYk8yZjdidGlBVS9oNnpPSExtQ01Ic0tqbTg0M2dmV0hD?= =?utf-8?B?Vm0xd2h6S2s0bEkyQm5mMXc5c0dpNkpQelo0TE9mTTdCbHp5S2FCdXlyTFkz?= =?utf-8?B?clMyZGRCYXg0SEJlN0MwcjNKSXhTa2FmSU5wcExDZWRQTHlEYmN2R21WTllS?= =?utf-8?B?ZEdHNkI5T291NVN4bDdJZVFwWWsrUm9BczRIZ2ErQjJyOUMydG9QcjRueUZ4?= =?utf-8?B?VzE3dDNNWXU5N3MwTm9JQTRwNmJONnNYV1duK1pZTDJPeUF1b3VCa2lUQUVr?= =?utf-8?B?Q3VSTVJ1QnVpcmRDTzBaMGhBTkhUbkYrbGVWSXlRV2Npc29jQkhMMVNXZnZn?= =?utf-8?B?eG44dnl2THJJVkwvZ0c4TXg5NHlKVFN3Ry9nR04zT0hxTE0wS2lRWU56ZEs1?= =?utf-8?B?OC9vQ254K0NtS0VXNjlZQmJlZmdTdENvZytRcWdJd2h6U1ErY0tCQTlUZXBx?= =?utf-8?B?VGJnYzE0OWlZUjVZSS80Vy9mTnhrRlA3UDdkcFBpQzB6MWNUV2E4MUJxT3Rk?= =?utf-8?B?cUo5V1hTcFVyT2pveldnanRPTzJOeEIvanhDcURMUVRvaEJXbGYvTGdhUkVx?= =?utf-8?B?OU14ZTVaUWppZEplNXROZitJRldpY2JtZ3ZHNXRlMjR5UjhFRVMraVl6SERP?= =?utf-8?B?K2JlWWVkT1haMjIzOVJTUGdoNjBZVzdoanhkaU5RUitmdzlNTGVYVGpUUHUz?= =?utf-8?B?RFZmZ09NNWtuc2oxcUpubyt4QTZqQ21WY0Q5VjQrY2FmTTVHMnEzVE16bEpn?= =?utf-8?B?aW0xWUFlLzgzYWhiN3U3YUJXUFNZdkpwTUZ6akF4dHpoWmlvQnZWaGlCKy90?= =?utf-8?B?d1FJaE1EYURRazhyeHhZMGFnSmFTc2hrQ1ZwK2VSbUwxZW5FRE4zUEpBc0c4?= =?utf-8?B?NFppVDd6ZUtoTkFtUm9YM0RzbzI2UVFiVGplaERiT2VYYUpIVHA4cWZFTHhI?= =?utf-8?B?ektleGh2dzVyL0g0T1hDcHlxK01jalFWVVgvYnJhcnphZldpQW5JRGh0Z0V5?= =?utf-8?B?UE5XSEp3Z1pPUFhUMW1kYWpuajViT3hNeG84RFlTVE5xNG55LzFzMGorNG1j?= =?utf-8?B?RUs5WExEVXJOTnJYR3VqbnNEajduM25DUDdqeDhCbEVIU1NPSEZtN1JGdHVL?= =?utf-8?B?QTE1L0xlRlVMN0x1ZkxyWnpOdTJaa2dhOFFsRU9uenc4dFdyL2orSkhkMWp1?= =?utf-8?B?MFFzMm1hUDFTK3pSQjdXSEZadGpTTHp2MkkrbnFHaUc0cEw1clozQmRaN1F5?= =?utf-8?B?emVLVml6YnJGUjJ3ZnE5QlZ3NG96VzhPd0VQditNOVF1SEdVSmI0cU9IS0Nj?= =?utf-8?B?VjREV1E4SVNxU2Y4TnliQ0Vac2R5Vk93aW9scDZPUERQSnNuYmVvTCtnUTJF?= =?utf-8?Q?3v/tqLu+q+dXhhmV0tJ2DMBjuYCPYysG?= 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)(1800799024)(366016)(376014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?YlEyOGszNXU2SDNJVWpWVXpLb1lvTFVkSWtrTTg5TkN0YUlIcGI2Z1VqemNR?= =?utf-8?B?WHNkbW1uMzEzV1piN1lFTzBZQi9OdHBGVm9SMU1OdTFaeHkrT2FPQWFDQkIz?= =?utf-8?B?cWltSGQrZTBKV0Z5VGk5NXVQQ2wvUFlRL2VUNFV1dmNEM0hZTWIyOGFZZTBZ?= =?utf-8?B?cllxMG1sekhDa0hzdVZuckNKazNiUU94UndYU2dXbnZMdkhwY1FqWHVTSDZy?= =?utf-8?B?UnVSQXVxaTFYWWtGb3NPZTB3NlE4ZHkvbmpjUHBSWkdCVU1hdkdWNmVuSENz?= =?utf-8?B?SGF5WFlxNkYwTkcvL0tIaFpMWk41VlN6UHZUbkNCdmFMZHN4NHZjTE9HaCtD?= =?utf-8?B?N1BJcC9ZUlVwQXViY1B4N3JTM1N4MjJVYTQ4clRFeTRKNDdIOEdGVGhTWWJV?= =?utf-8?B?YmQwZ3dYMGZEWW1zUWJMOFdBZXdlRGpWQ3Zkam5KdTdsU1JnTjFqU01ERUFv?= =?utf-8?B?Q2htQ2Q1c0pUMEUzbzFMSm04Sm0wOS9hTXFIYytTMm1acDZDbHh6SFk0U0s1?= =?utf-8?B?VU5hVjZndW1UV1VRNitkUmRvVS9GWDR0YkVrZHFSZHd2Qkh4K1pTRkh3ejRU?= =?utf-8?B?cHBEeUppWlBhRkhURzEycTl0dVAwOVRHMnVFZC9YSGZxbVpIUUpRUHNjQVlT?= =?utf-8?B?YisvSW9VRkl1VzJXamlISzdjTWZtTTV2SXU4R0J3bExZRjdDQ0VxOWZEOExU?= =?utf-8?B?TzFPYXkxcVhzY1ZjbnhidTVHYnR1ZjFFSEJ0akNKMWlhS21obFJwS09JcnBL?= =?utf-8?B?bWIxaVBuTVAyZkxyL1A5NXpjSndiV2J3Qm56QnpRck0wd0NHTk15bVVNVnRJ?= =?utf-8?B?cENVL2xucVpBcXdGaXliSi9RMUlsUzBkUFNVdTBhaE9XNEVJVkZ2SzVnZThF?= =?utf-8?B?bHhKSUJSRjc2OFNnVmQrdzNKVnVKZVVOL21pdlF1UUZLdm9wUEx1SktiNGV3?= =?utf-8?B?RTBPeUJhZXlTUzVjYTNpMkFLNCtMUHdobzRtVmVURXJqYlQ1Si8rSVJSQTVY?= =?utf-8?B?TlJQZFp2Rmprdkh5cDFCWGRXaTV6djBWT0luamlsaHBtdDg5ekRZVmExMmVL?= =?utf-8?B?QzVnYkZDbnZtUEM5T0JDMUpRbU1oakRrdm9CTmtmNDRYejJXTzhHV0l3TXFO?= =?utf-8?B?MXRFTFJaZkZUUkdzNlh1OWpZK1luTVFQeG8yTVF1N01pNk9yWmdlL2d3UjBj?= =?utf-8?B?M0w1Sk5TekFwampSRTdNQjUxK2kxYVRXU1ZRUHFDNndSaU5FWnFDR2dyb0NS?= =?utf-8?B?V3R1Z000M29Jd2ttSG5lMTNpMElzbzVoUUNVOXhYV0NPdGxEcXdYaVFwMFl5?= =?utf-8?B?cWRma3c5NnEvTE9qdlREdGE0UktIREdrczRwREFnMmVsazlDZXNzMUdTZk9p?= =?utf-8?B?T01QTTFVVHlyaFNySWR6WFNpV0lXUjYzaHBpa0FxbFMwWUxoVFRJRFlFVzc5?= =?utf-8?B?L3h5eStiSURFdjRneXVmRTRYaXhUcldoSzcvbVdMSFF1Ni90a0Y5aWRhK1Zo?= =?utf-8?B?am1YREEvMEJCOUlvNVBVNDlxbHN3LzB1ZmwzOXZ0Ym1tWWwzMnF6WWJvK1g0?= =?utf-8?B?elZTZ3dWOE5MZFh1THI2bERjWDRzTHZBeFdzbWxleU5BR1pFbnBFamR3R0Qv?= =?utf-8?B?MFNXanptVUI5dEs3WUQ5UmJWYnZLaXdEemhjUzByNjNpeGpNNmMzS0dlUmI1?= =?utf-8?B?OUJPK2tZZWRvajdTdUJ3MUtTWTlUeVdOZ21BZ3RmeEtLVUxjY1l5V2IwbnFE?= =?utf-8?B?QkhWcjcyby91bTYvQXVaZ29iRlZEeFUrZzYxVklxRkRJRy9vbWJ4V29TTUtm?= =?utf-8?B?Qkc4U2hwTkg0MSs0czBqbnVEWmVwalUxTlZHRUdkQ0prV0Q0NjVxMUpuNFEr?= =?utf-8?B?VFdNODFiYUROQi9wSThxcCtMMU1EYmlxSUJMclVYdm9tTStnbm9QcnczSnJX?= =?utf-8?B?V2Q2Zk1tRVBOazFucVRqaCtyMUZyaDJKOC9hdHRQL2hEcUI0UTJmZGlBTklC?= =?utf-8?B?SnFzV0haYzdWSXUzLzdhWHdGNW9tLzI2aDlTbmV3eTlWV0JOeVdxWlZjVVZT?= =?utf-8?B?WTBxanRpaHdYWW1ycithVzZwMmR5a29XbnE3czVVZEtPbHlqWXg3ckc4VElB?= =?utf-8?Q?oHwDUMU4y/JTQAL++Cs2t3iOT?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: c6bc7476-57d6-4335-580c-08de3ea50905 X-MS-Exchange-CrossTenant-AuthSource: SN7PR12MB6838.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Dec 2025 02:19:27.5931 (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: 87KQWt5PUMPb6NkHYH9O3tleecUVXE6PGWUYEB97JiNTbLg+SbaLwuSzUEA5o4fss5dh88goQwuXeFxgDoEDmA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH1PPFC908D89D1 Message-ID-Hash: ZRUWOEN2ZURO24U35ODYYYWXBLSBW2FG X-Message-ID-Hash: ZRUWOEN2ZURO24U35ODYYYWXBLSBW2FG 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: 1766110976932158500 From: Nathan Chen 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: J=C3=A1n Tomko Signed-off-by: Nathan Chen --- docs/formatdomain.rst | 7 +++++ src/conf/device_conf.c | 11 ++++++++ src/conf/device_conf.h | 1 + src/conf/schemas/basictypes.rng | 5 ++++ src/qemu/qemu_command.c | 46 +++++++++++++++++++++++++++++++++ 5 files changed, 70 insertions(+) diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst index 1467fc7e10..c8f827d460 100644 --- a/docs/formatdomain.rst +++ b/docs/formatdomain.rst @@ -4907,6 +4907,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..d68232a4f4 100644 --- a/src/conf/device_conf.c +++ b/src/conf/device_conf.c @@ -67,6 +67,11 @@ virDeviceHostdevPCIDriverInfoParseXML(xmlNodePtr node, return -1; } =20 + if (virXMLPropTristateBool(node, "iommufd", + VIR_XML_PROP_NONE, + &driver->iommufd) < 0) + return -1; + driver->model =3D virXMLPropString(node, "model"); return 0; } @@ -93,6 +98,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 5689170fad..381e0ac24f 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 98229d7cf9..98e4469c25 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -4760,6 +4760,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 @@ -4793,6 +4794,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, @@ -4801,6 +4805,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 @@ -5320,6 +5325,44 @@ qemuBuildHostdevCommandLine(virCommand *cmd, } =20 =20 +static int +qemuBuildIOMMUFDCommandLine(virCommand *cmd, + const virDomainDef *def) +{ + size_t i; + + for (i =3D 0; i < def->nhostdevs; i++) { + virDomainHostdevDef *hostdev =3D def->hostdevs[i]; + virDomainHostdevSubsys *subsys =3D &hostdev->source.subsys; + g_autoptr(virJSONValue) props =3D NULL; + + if (hostdev->mode !=3D VIR_DOMAIN_HOSTDEV_MODE_SUBSYS) + continue; + + if (subsys->type !=3D VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI) + continue; + + if (hostdev->info->type =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_UNAS= SIGNED) + continue; + + if (subsys->u.pci.driver.iommufd !=3D VIR_TRISTATE_BOOL_YES) + continue; + + if (qemuMonitorCreateObjectProps(&props, "iommufd", + "iommufd0", + NULL) < 0) + return -1; + + if (qemuBuildObjectCommandlineFromJSON(cmd, props) < 0) + return -1; + + break; + } + + return 0; +} + + static int qemuBuildMonitorCommandLine(virCommand *cmd, qemuDomainObjPrivate *priv) @@ -10932,6 +10975,9 @@ qemuBuildCommandLine(virDomainObj *vm, if (qemuBuildRedirdevCommandLine(cmd, def, qemuCaps) < 0) return NULL; =20 + if (qemuBuildIOMMUFDCommandLine(cmd, def) < 0) + return NULL; + if (qemuBuildHostdevCommandLine(cmd, def, qemuCaps) < 0) return NULL; =20 --=20 2.43.0