From nobody Mon Feb 2 07:29:09 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 1768614063395656.9220192693895; Fri, 16 Jan 2026 17:41:03 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 993) id 35E5E41C5F; Fri, 16 Jan 2026 20:41:02 -0500 (EST) Received: from [172.19.199.3] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id 82E2D43DD1; Fri, 16 Jan 2026 20:39:52 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 993) id ECDE241BA1; Fri, 16 Jan 2026 20:39:46 -0500 (EST) Received: from CH1PR05CU001.outbound.protection.outlook.com (mail-northcentralusazon11010059.outbound.protection.outlook.com [52.101.193.59]) (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 478B241B54 for ; Fri, 16 Jan 2026 20:39:44 -0500 (EST) Received: from DS2PR12MB9567.namprd12.prod.outlook.com (2603:10b6:8:27c::8) by LV2PR12MB999097.namprd12.prod.outlook.com (2603:10b6:408:353::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.6; Sat, 17 Jan 2026 01:39:40 +0000 Received: from DS2PR12MB9567.namprd12.prod.outlook.com ([fe80::636:1b52:24ca:d7e5]) by DS2PR12MB9567.namprd12.prod.outlook.com ([fe80::636:1b52:24ca:d7e5%3]) with mapi id 15.20.9520.005; Sat, 17 Jan 2026 01:39:40 +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.4 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIM_INVALID,DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_LOW, 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=fLCFFs/C6kHcDK1lzAj0J2b5F7F6VNtqPIdzjt9e8iyD7U4v472/dXGS7i8C+fq5gfuunyCEM/EJl/uzQBJRUrPXOqNjywFEJy4OaL6oFmb28mdugUxVzVTtCdXtYjOhdP9akNvryb7NQSzDzVL3OScvx+lyRXnTok1qDHjqINbboZ5SP5xM9w/Uny7bWc3zjZzgBnU/XTp9EsxnABGLGKQAOL9KmJN0M5OMjF4Zlv5H1oq9MyFbXT0bbg5fRQAvc3XdXP1sp71Vjca4BVX+7Y2gdRC4b0QWP18yLa6XJB8ggNXzTI3jD5NvwqesdgXA8wv7oX4K5H1+WjgIO2uA7A== 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=xhic2OxaxQd933e4TqTGhmC6VNUaZ/2UEQYOHX+0c3s=; b=rcaYcv7lEMiYEh4GBtQ52UC84KJ8+a653ZCoZuGugdwkBDDEU1zatB6StUKMX9OcWKP8BnO5PLQcejmxRh+lvSIYTes7IUvTAQd1lcceuXcH6l4+lXyC0CXAq3zaHJu6Tyfw4SQ+gq5GKL7kjxkFFe3+o+j/reYnYGXPtMEyGlmovV9MSsCyki87OcnkcNV3VqA77grz0K7v2vmEB/CEkyFwYnaanv47eb2eGVYjeU7p3dRi5Nu7KPav5XWxhK6FhsXNZIG2GHmGH75VD4WTxWXUGt60J+CjdxcgkDdZ9JfVfeuTXg5e3STTGi5goX1evoqcVvm7baYkwMu53Vw7kA== 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=xhic2OxaxQd933e4TqTGhmC6VNUaZ/2UEQYOHX+0c3s=; b=RgsyHTSJeMBCeb5WHGHcwR1ENLG4igxnCmX7bkOUXd908ZFStHl/XEi15uCb0YYsTwZ7WJ1xlDFZHBf2JUrda4zqdYnNuDVnEqsE3t5zuZxVUpMHr2tds7oOQONfadyfVVXew5KE5gKjnRQ1DkoAXZ+30dLDpXeRfkkEOYlx1fQpJ2jJUUKf7nZObgJ0QY0Q5h9gF25MklLeqPHerJ2tIb3U8r3915aFrILpJ09kLh+kTkrdCWfA3LTv0anSQkts2vNoBV7R8Sk6tzDNPze8liKm48NcQjSNRLJSw4SZ9RnfDC8tuuAYVXPyu7VAKmk6wrON+eIcbHoMfD2sgkHuEw== 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 v5 1/7] qemu: Implement support for associating iommufd to hostdev Date: Fri, 16 Jan 2026 17:39:31 -0800 Message-ID: <20260117013937.3803457-2-nathanc@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260117013937.3803457-1-nathanc@nvidia.com> References: <20260117013937.3803457-1-nathanc@nvidia.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BYAPR11CA0073.namprd11.prod.outlook.com (2603:10b6:a03:f4::14) To DS2PR12MB9567.namprd12.prod.outlook.com (2603:10b6:8:27c::8) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS2PR12MB9567:EE_|LV2PR12MB999097:EE_ X-MS-Office365-Filtering-Correlation-Id: d75c682f-e2b6-442d-e1a0-08de5569480d 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: =?utf-8?B?eU11dzFPMXhCWFJGWnowWHp3bXlwQXBxcUlsQ1BjYVZGblZYdEVnREZJVllO?= =?utf-8?B?b3JOQWlZd215NGk5QXJhNDVZTzdBRG1HT29KNlpDVTN0cDJZZHVNak1JTHhz?= =?utf-8?B?MnVxYWVacU5ENFZDNHlBZWU2WWF1Vy9maS9xYUQyUHZUMUNwM29KQmk1WFBC?= =?utf-8?B?R0NXcFJKRkRqMk9SZVZGVkpUUEwyMDFqMk4yZ0luUEcyZUtTbEFwQkFQSDU2?= =?utf-8?B?TTlZZEQrL1FMaUhtcU1oY2gxSFBLR0orU2tFUDdQT05udHhmTWJxRGlDakRW?= =?utf-8?B?ZWo4NXJOUkt2MVZGL1NWREJXY1hkSWJzNjJSeUFmNkRKdFh6UVRzT3RNSXdw?= =?utf-8?B?RGVUTFBhVS84TDJ4RTBWTnpaOU1GME5rZ3kwaWw1Q3JnZG1acVlNNkVyQ0w1?= =?utf-8?B?dTQweU41VzBUWXNQS2RIMnZxcm1rVWo3WUNqeVBsVWszUmd2UHZlUE8wRTVW?= =?utf-8?B?TVRqMW9kbDk0VHE2NDUxRWRSc3BDcTRRL3I0Rk5KS1FCYlBma2ZqSXY0TExY?= =?utf-8?B?U3VmY2dpWU84N0ZaY1VtWFFtZnAxajhHOTdNNEx2L2U5TlNtbFN5Rkl5cFBC?= =?utf-8?B?UHFXMUhTbzNENTZLVzJDdmkvWEw4S29QZk1aV2k1V0tBTFdEd3ZXbFI2VlFC?= =?utf-8?B?b0xKRXprMWI1c1JpOXdlY2JSMHNtNzRWcHlVM2xRbC9MMmdCdnJzbjNVU3JT?= =?utf-8?B?NkNpRGtJYTNROHRpdXQ3bCtnQ0Q1TVFLN2g2bXFQL0xtVk5lVzd0bmZ6R0Fl?= =?utf-8?B?bWhzUFpLejZzeHpJMnkzcEphVlBXSVhmbjNtUHBzVlErNFFlUU5UaVdUQWp2?= =?utf-8?B?bGlIZk5FSjRya0trc1Fxd1NuUnY2WmNMV1duaXlqTjVhcWZiNVBrdm80aXlr?= =?utf-8?B?ZUhhRmlRRWZMZmJORUlGdmNMTExFV3ltRXAzekJFSVlpdXVZSjU4c2tDOUFF?= =?utf-8?B?L2I4SjhvV1RJcTU1YkRUdHhvbXl5RVYwUExsaVI1a1p2SkYwMkdOZ0JFYUt6?= =?utf-8?B?VmR3Vnd1cVluczAzWXJielVjekhqOU5hcSs4VU0xVEcrVE5za3pGSlh6TE1x?= =?utf-8?B?RkZXeGlWU2dzNU9TaGJaZUZWNXNtWForUS8zZm90eThodmpsenltWVFCWUpS?= =?utf-8?B?ckZtOE9DSndtV3IycWJmekhLVXplbjJtWThkSzFCdngwUXY4RkVsM3NGTkVP?= =?utf-8?B?NFVTSEsvMndlOGpSVFI4MDREVHNsZ2JXc1htcUFYT0tKMDJRWXhyQnhENnN0?= =?utf-8?B?bnZ4UlRzS2hpN0NYNllLcWFKV3ltMW9YbzlwWThCcGlLcDFva1BoMmtuVkQ1?= =?utf-8?B?SUE5d2gydk94K0kzWFcvMURJM3dqcHFLYWhSUHNTN1pCRE04bUd1MDlpNkdN?= =?utf-8?B?V3hUTURkRCszWExNakJVM3B1OFl4UUxybHg1V3gvazRmV3ZxRVpLVFhLRWVF?= =?utf-8?B?SHpUR2lPZzhmZ210NWJKT0Y1MWpxZTVROVAwQjVvMnNXZzNlTlB1Rk1udXRm?= =?utf-8?B?Mnc5ekZ5UzlBUFVwM1dFOEIxRndXNHlPakliY0E4aDdoZmRFWEx0SUs0QjI0?= =?utf-8?B?T0ovdlpkOVZET2JMUCtOY2NMMDViNXhUbngzd1dGZEcyaG5LQSsyVEFFdkJh?= =?utf-8?B?dFA3dDM1R3g5Snk4N2JwY056Ym9rbG5GUis1SUEwbXlqMXZTTCswUEJyTytH?= =?utf-8?B?MWdRdmRjZlZKNG9PM3I3bERDSVc1c0o1UUNqUDhiRmdVM2NHSXVVRFRJZm1N?= =?utf-8?B?aCt0TnhOTE83eEhMeHFRUFl6U3F1MVNGWXFUeEM2VW9hUDE4dno1dXk1L0J2?= =?utf-8?B?TmwyZFlBdTFOTk1KamRydWZMcEgwYldCdVhWTHhwck1qNS9TVVh1ejBacXJw?= =?utf-8?B?ZHJjTHFvZHhnV1I4QXY3dXhNY3BZMjlNZ2hpVlVvQ0pmWlJtanFHYk1CRXIz?= =?utf-8?B?YTU3Qkc3TTdlWWNFSFBMNlNDK29maDAwMENuZVhXRVdpeDRRcndtamtWcFBM?= =?utf-8?B?TEN0eFI4T05sdWhnV29Tb1p6SVF3aUtIUDdDNnFFVlB4U3RwVGxOODlGbTJo?= =?utf-8?B?WC9NdFlKOWZIcXV4bjZ6ZnpDRGlOS3BkU05KMENVcTkyeHBZa2NhSTdzUUFM?= =?utf-8?Q?rX3Y=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS2PR12MB9567.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: =?utf-8?B?Z29UaDQzaXo5MDBzNWJSQnd4VEE2TEUvWVJoTXpvRnZhZEpLdnloclIzWTdB?= =?utf-8?B?NGxEUjgwYkowWUpURG1HR2VCTmpXYXVXOTJTNUJZdGwySmNCcnFMUkUzWHI4?= =?utf-8?B?ckxyR3hZZ2IwQjFJV3BEdUFxSFJvaXUzR0w2Y2x5amZlb0hPSzhDNXp5a2Fy?= =?utf-8?B?WHAzS0hUdFNqcS9sb3B0WWJlRW12SzR5L3huR2xjaEF5UURnMWNzNUJCaS9r?= =?utf-8?B?QjNkM2ZnWWdyVWNNSzdoR3hqR3AzTEVoWHJOc1NrYXU1WjF2VnZieHpxS0Jv?= =?utf-8?B?Wjl5eDVYczVZVUg4V1czVWdPcjM5cGFWeGVKNTZNazN0SUJ4d3prY1pEYUtM?= =?utf-8?B?MFhLcnNtcmhrTTJZZGI0eDlSbStLcXdBamt1TXB0NFF4R2QxZlNrT0NDVy9J?= =?utf-8?B?NTVxZjFHbWk3eVF3bHR1QUdSR1I3VFdvU2ViWjUyM0tlOUErczJCNGN2NW42?= =?utf-8?B?dXlVYmlvWHVlSkRuWXFjVFRUV05kQm9mVmt3TXB6SHJGY0JQWUdscHRIT0hM?= =?utf-8?B?TlpDTGw5MVlpYWpqbExhVlBwM0lJTm4zSkVHTXYwZElxUEJEK0FRNmJkZGpr?= =?utf-8?B?enRxZHZ4MXRVYWFNZlEyYnBWYU9GRi9LcWFiRHI4KzhaTmxmbnZma0p0OU5x?= =?utf-8?B?b2lQenArZGtyYmkyR1hoOHptMGNLblRMd0g5alFmLzREYUtMdm5TcS9PV0Yv?= =?utf-8?B?VDNYUmNBVkd4MmVMa3FZS3grUFNIRE00SXFVTVJsZUZ5V2RCRlZyWVBwZEcv?= =?utf-8?B?SVVtUHROdmRqSmNyTG1BM2lic3QydnBVWEVtRUdlSzV6b1dNV1ZGTndDc3pt?= =?utf-8?B?NjB0Q1BRRjl0UlVHVkNsNlZBYXhRMnVSaW96cHkwZUF5MmF3dW1QQXo4aDlz?= =?utf-8?B?T3MyTEZUcGZCZTlKTVlLejh5akRwWnUvSklRMEdOSTM3VS9QWitWMmhRcElC?= =?utf-8?B?NTFGRjh3WnN3SkYyTEphYXFadDRiNlRlKzZOU0pQU2M4Ukc5UjJkYTYvZnJo?= =?utf-8?B?NmpzaXM5YVpOWk1YK3BYUEZSTDFZWUZDUitLZ3c5eHNaVmJNTG9kUlpyTzk2?= =?utf-8?B?Q0lvWE93MmVieHZPVjVrVGh6V1QvckgxUGtQT2hGWGdqMzI2OWFjQXAzRG9v?= =?utf-8?B?cGxaS2tKWFFza0ptNGFocGM2NnQ4czZITXhUT0N4UTI0QmhkZG5FQmp4ZnFr?= =?utf-8?B?cW1nRFUxS2g1Y1FmRFlFcTF6MS9iVGJhRDhUWm1lQUZkenVVTkIreUFsYVNr?= =?utf-8?B?aWFueUd6VGc5eXN0by95NnNFUStJUFJpY0hDQk9tL21yTmp4QzN6RGFDN0Ex?= =?utf-8?B?NXNzaGc1UlE1S0VxV3hzREo3WlpQM3E3MGE5RktOeVc0QjZrZmgrOWYranBz?= =?utf-8?B?Rnd4bng4REFOUFBBNkFPQ1JrMC85QXVtSitvZmRwb1ozTStFYXBpTmJUL1ZX?= =?utf-8?B?QVRDUUZsYnZ3d2Ywd3V1dlhCRkxZRy9DWm5BeDMzNWxpZW53a1E3SnJ2QnJQ?= =?utf-8?B?dWJqcjBKZ3BDNGx2bCtEa2thVnRPZzFRQ3d0cEJ3ZnFXM0t2WTZWUktlbWpT?= =?utf-8?B?VXFjTlhpanZKWjVpTm5Mc0tLVE9DRlFVaHBMZ015aTM0emIvWUFQUGVxV3Zj?= =?utf-8?B?RkdkelYwdEJTbmFuemU3VHY0Z09MSHhURDhtNlg0V0JPNWo1NTlLR3hlWmkv?= =?utf-8?B?a091dDVISjdHNVd0QXNMUDRlRm5ISGRGRERoNnhxdFZMWWRqUHFqR2RhZGd2?= =?utf-8?B?YTZSVEU3OTAvN3pDOXI3M1BpWEJtaFN1TXBxMXNmblJXT2ttbDR3T201cThC?= =?utf-8?B?RXpOTE1jeWU1aW9STmxaOGR4RnV1VDZXd1lncGNIYjRTQUtZajB3SlBUUUlI?= =?utf-8?B?WEczZ25VZXJRYXlWSC83MzdrcDhReHlVSlEvWGlhSmQxMVNhcHJ2blBCaTY5?= =?utf-8?B?aDNsL3Avd21xbUxDbjI1V21UbXo5MU8rVWxQYXpxR1RsbEg1dlViMGcwY1hC?= =?utf-8?B?eTVoWlpoejF1bm9vVExEYnVYaFJwL1ZNRHRFU3RHeXRVOFZHdjcxVFRUWjhI?= =?utf-8?B?SkM1VlNPSzh3aFZOT2EvcWJUcVd2ZU5lMWFtYjk0enNybmhYY3VqNTRuKzM1?= =?utf-8?B?L2lubDVCY2VBRnJuR25GRTZVZDRoeGd6OFlSa2RzQXczL0VTNTdtU2h6Qm5L?= =?utf-8?B?RFdrbE9ZclBrUUJ5V25HZnlGd1ZBV21ncTV3UEw3dmY4UEc1dThoT3FPbmJx?= =?utf-8?B?VkZVTThHUzFFMHlEUVNvdEhhajR0YWVmd0JSOVBFclZCZlhFYmY0dUZabUZ5?= =?utf-8?B?T0NUNW1Ya0FPYzN6Q2VhWERpZ1BlUGZRWERidkl0L24yRTZmbE9OZz09?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: d75c682f-e2b6-442d-e1a0-08de5569480d X-MS-Exchange-CrossTenant-AuthSource: DS2PR12MB9567.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jan 2026 01:39:40.3181 (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: 3uLmjddVV8J4au+n96mblFtekvZGjo5ZT2CJ51k9F/OvaaSQWkA6UF9rVM/7vRpmy3Icm/x5VvQziMDOdfqTRg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV2PR12MB999097 Message-ID-Hash: HFTXXPENAQ5ODVNTK72CNDHNECSEE4FR X-Message-ID-Hash: HFTXXPENAQ5ODVNTK72CNDHNECSEE4FR 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: 1768614067784158500 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 04ef319a73..08fc3f3944 100644 --- a/docs/formatdomain.rst +++ b/docs/formatdomain.rst @@ -4920,6 +4920,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 0de0a79b46..5274b33d17 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -4761,6 +4761,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 @@ -4794,6 +4795,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, @@ -4802,6 +4806,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 @@ -5321,6 +5326,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) @@ -10933,6 +10976,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