From nobody Sat Feb 7 23:59:57 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 17661112825981007.7836187612967; Thu, 18 Dec 2025 18:28:02 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 993) id A660341A4C; Thu, 18 Dec 2025 21:28:01 -0500 (EST) Received: from [172.19.199.83] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id DEF7843E35; Thu, 18 Dec 2025 21:20:03 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 993) id 37045419E5; Thu, 18 Dec 2025 21:19:42 -0500 (EST) Received: from CH1PR05CU001.outbound.protection.outlook.com (mail-northcentralusazon11010067.outbound.protection.outlook.com [52.101.193.67]) (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 E544541862 for ; Thu, 18 Dec 2025 21:19:35 -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:31 +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:31 +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=SwcCtd+C8jiSgL9gjnLtZuWflucGnmQAJxTgP5WL5u/gT9B1ylBiP5pl2I20Mm9orKLCh2KnPcTUuU9Mv5EJ7lecaNTqyBsjRv8DUnTAd4CS92GJPzIEC2Efv4pwluUEgG8lfbGaJ0/gyZd+eg+RGU8aDnhdzItWoElIpPCJVmntK5KSN2CH7unFjUMZUN7qqRWDt/K8l+rHzaBrkfP+7d23HWUz7i0lkz5Oci0vjrC+bj1IXX9gN5xHVXJarsf7QNTmVTluKeb1qVqbE8x/AZi6iuQTfANB0q08RdgjqZrzmro/rPj9YutWrY5DV6MIlLi8nFDGCu53h0oXb9zwXw== 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=hKlPFblDqq+/EYqr6xFizQ7wyHJX9IB0+f+ZZedorf0=; b=ho/GYyi+jvZW1T/1ou6CyIp2tMZvtz2boUuXTJDUY+P0w3EcgiD24BQst8WGXbx4MEMWYlvnI4I4QOhQpetneQvJ0PqaqmpKwQiLyhirlcEJ75qoOJjD580V1c3C+vZcbT5BoN1YDwbG27/k95GQuGP8m+IumEtghFhGdq75TrBm1MNSlHSlwIJRztDigCAkvRUqNWvviUeA1V+7hMt/EcxPEw2blGWsZflaXphTGd7JrCMmSkgpBV8WSmVWt3/CgOcrBdqrAIw0SYvivcf/zIB/QVSYRybs0TwyhV82Em7I3suWqVAddrDaVG8LqkdLsK47PQjR07tvyH3BiVkWQg== 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=hKlPFblDqq+/EYqr6xFizQ7wyHJX9IB0+f+ZZedorf0=; b=mNyh7GiLhv8r0FJUQ2mWdG9KsTHVtyRVZWYk/Km1FHVSnO8L2OaNMpZxT0f58aXd8KccqSvM9HRWfs/DdJQaMUk7tytoHT7oVk8CbQq2dEW/xERTDvSj0+dtCTbUsDBs3St0VKxEGqiDZ3ZYd3Bd7bYTSaMWeeAatm27ID5AVSpfDrmG5CzEkl28galZlJPInT1t8dG6fSH0m/sS6/UxQZ9MFvq75AgVTRzgXT0nqvsgPq0SyTpQekUwD+gvSSEoF18d5i7k/+hQlZDp1mccvOVPyQ4YfIgS/9tUyGShxQoNnLQjHQqeofINxr7o22edKr8XwCTMK1VCe1Z2wwBcLg== 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 4/7] qemu: open iommufd FD from libvirt backend Date: Thu, 18 Dec 2025 18:19:22 -0800 Message-ID: <20251219021925.1864433-5-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: BYAPR04CA0019.namprd04.prod.outlook.com (2603:10b6:a03:40::32) 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: a4d9556b-444a-411c-3afe-08de3ea50b1d 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?UlZUU2MraDZabS9uZ0lEMWlkWTVxUjlKNWlYZ0RML0I1eFZESEFmZzRJSGxB?= =?utf-8?B?Z3FHUkxwU3NMQzFrQlBVRDhGdkNSanpXdys4SnJBV0E3MzBpaVRuUFdEYUFi?= =?utf-8?B?cWxBU214cDV1aWtDNU9rQ1ZrMFhYdzhzZW4wcmZiRSttcWZjZFlSU2xEbzFZ?= =?utf-8?B?UnFUNG4zSU1EMXNsTG4wQ3pNRFdYYjBRSWhMZVdNeVNSdGZMOHFFSS9TL1NE?= =?utf-8?B?Yi96MEtnZkpaSmpzTkgwWElET2VDdUx4eTRJb01FTG43WUpzdGZKLzFBd2Zt?= =?utf-8?B?WWxWVHhOeGhhQ0UwbkxGVkkvc204cGdLYzBzSWFHcTU5a1lFa3FIbWdrSWhx?= =?utf-8?B?eGYyRkUrcmNoaTVGN0htdmg2VWowVUZ6a29sY281M2dCK1VEcUJmVWhtWlRY?= =?utf-8?B?RDFYSms1bkY4ei9hR3dWN3NQUTNZdHB5aWRZZEpnaE04WDNaVUdGb1ZhckRh?= =?utf-8?B?SHUrQVd5L0RtM2pJMUdQeUpSUUh4bGJTSThGTWdOSytRNjA3L2lCZUFuRW10?= =?utf-8?B?cTkvUGsvaEhJNHVwd0I4bnA2UkhNM0dTMHpSdS9vODl1NmVGZzBOT0xyd3ZK?= =?utf-8?B?Tnhha1RCV1JtRFpsb3ZLQ1JVRVVKV2UzQmt1eWE4Wkx4SzdEV2dibjNVTDZi?= =?utf-8?B?OFpQLzBJcGdvNmdMWUZCV2RVWWVOYmFVWms1WnQ0SithL0xrVXlVdEc5WjND?= =?utf-8?B?ZHE2emtWQ1RsWk1XbmNoSlNLYjRTSHA4MFM4bm1veElwUDVvMldWMGhiL2xk?= =?utf-8?B?L2w4bWdnaXU1VnNMSmFjbWlPdGF5S1BNV3dMZGZKNzNpRFJ0c1RyQ1pxaXJN?= =?utf-8?B?NDVDdFhGUjBPdEwvT3V0OFRUemgreHdXQ3AxRGJwdWN6RGorSEh5UW9BbUJ1?= =?utf-8?B?aUU5Z2JNTEcxNmR2dldUbkZMR3RlZnN4TENnZzJxck9rOEhHY2JJaGlOb3I4?= =?utf-8?B?N0NUbHgxTHdpTDBxUnVndnY5ajJMOVFGeStHemNzcVpQVmdVcG0xZ3lXNFhS?= =?utf-8?B?S29HSTZYb3ZjSC9nL2Jld0VEcHE5ZTZXUWFiLzZwY1NmdHRzUXRVNXpDVnRK?= =?utf-8?B?R1FZVGN2aEtPRzhnYlFvV2ZWaXlLOXYvb1VwWWVMUVppMzhQd2h5V0s3YXpl?= =?utf-8?B?eUVPVUltS2U1NnRTeVlOUkJYaWlTS3doVC9OSVFoKzgwVnVGZkJhL25EeWNB?= =?utf-8?B?MWRNaDZ3L0hrN3U2eGowNzJpRVVNelFtb21JYmgyM09BWUoxOWZrNTNHUkNK?= =?utf-8?B?N2JWOTdWYTFSOGYwTWN3ZG5FR3JBUUZkdlVHWmNOQjBjblRqWm9heDEyL3lm?= =?utf-8?B?ZS9XRkUyajNCaTlWa3hwTEErTU01bVZObVpwUC80OXNVTDh4YU1zOVF4MnRZ?= =?utf-8?B?K1Z1ZGd1SEZkMkcvdXJRRTRuUVcvYlRudXlmK3REQWtUdE5NU0VCYyt2OW50?= =?utf-8?B?TmJmR2hTSW81WW5tTHRQRWdBcHJPK2UwbndJVm92NFF4ekIvU2hZcVlEQlNr?= =?utf-8?B?T3lUVnJyUEs1WUk4cTJWbUdVQU1rbFhvK3MxSExERWNkSkZLWWdFSi9SSmZi?= =?utf-8?B?c0FMSU54U1QxU2lEczMzdkd1MEdyZU9Eai8rbzdMRHlNQmpsSEFKUGFZWmZn?= =?utf-8?B?NWtFVVExZkpUOWh4VU90Q0pFL2RhUS96Z0xpckxsRHRYaFVTM2p3TjFoS2to?= =?utf-8?B?YjFIOUZlQUdFdWJIbGV6azFVM1cwQnFZcTBQZDNDSHRuY3B2eTRYWHd1QzdU?= =?utf-8?B?WThDd2xFK0RBNTAwZzRXR0ZrWVpCY29IQ2xaeDY4MkV2bjVJMDlGQlcyZnZ3?= =?utf-8?B?QWxMNUNRQXZtRUZYYUE3dFVlZ2xkODBvUTZyKzRRS2ZMSnVDa3hvdmVvcnRh?= =?utf-8?B?WVMzWmFBU2R2a0lqUG9ka3FVMDF4QXd6eXl2UWhDYUFsOXR2RXBGanFBRmd3?= =?utf-8?Q?n5FzP2Y7+b+Nf70O+5D9KatmPSAdt9jx?= 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?VkN1c1J3Tm9SSVBmbDFTMmZxMGNXMFBNRVpHZWxDckptZjRNRDI0aEV5SDcy?= =?utf-8?B?SFlIOHlsc25OaHo2dVM0a2lWVkIvQXowWG1mZVlYS2RIVWlNaVpmbHQvTzk3?= =?utf-8?B?NkJjZEVWRGxpQUFpYkprZzFhcjBadE9nNTdhYUlaRDVDMWNFd0gxa3JjckVs?= =?utf-8?B?OS9JOFJZUDBYaVlLbWNTa2h3Sk1LQTNFVnlUVTkxUElJS1BhTFZEdVZVcXl1?= =?utf-8?B?QlRMMExHd3VEVmsvZ3NHUi91eVR1N1hIRXRmN1NkZWNmc1V2YllueCtJdTZ0?= =?utf-8?B?TXBRVHVyb1dXN2orejVYaklEbzd0c2toVDR3SFdWVDREMnBpMXlMM0xKcjJn?= =?utf-8?B?OHh3c05rM1k3aE5VVmo4ckxCWmkrZUEwVFlxTkgvZy9FUHJLRkNLaEV2QnlW?= =?utf-8?B?NFY4NmFJSk5PYlFoMHUzMVBTQWxvT1R1MGhNS3ZOU1ZFRUZ3T0lVREZ0dm1m?= =?utf-8?B?dUdZRXBkU3Jwc0IwUUMzOWdTb2I2WDlRc0VhWnR0N3gzbm8vMmFmZjNVdG1q?= =?utf-8?B?QUZIdExPSlh0M0l6T3VQYVM2VDVHcVpJbGROTERta1dvSzJSUXdYaWVtMWJW?= =?utf-8?B?Rk5aRFdPVzRKWTlSdjVqQVM0Y3hDYlJCbVgvUW1IbVdvcWtoS2dsVWlyQWd5?= =?utf-8?B?SFlPQ1ZKbFV6YkhKUUVZZC9ueDRMUE1mOTBBVWtTYWo3dzZxa1krbGpLZ091?= =?utf-8?B?SFdiVFdYdFB4UkJTL1pmVTRBUFB2TGZYK1NiMkdJaitaakl3K3dxNGRrcEts?= =?utf-8?B?MWk0dHE4MVB2L1BDM2JIT29UeUdhbkgwZTdzUXZzMmhTZ1JZMWZMRW14S1kz?= =?utf-8?B?T0FMQXUrbTVHWmlOeFpZZmdrTCtGUlBwUWpvOUs1K2FnNEVrZi81clV5c1Y1?= =?utf-8?B?ak5QODMySWQ3d1Jjb0R6WWZLTDF1aktGaWpBbHhEU1E2dzN2OHJLNlh1bEZ3?= =?utf-8?B?N2Z6TVFtVXpIS2JkdFpZVVlCeEhzUmUzYkxXVEpzRHNTQmFSOS9lNFJuVFNS?= =?utf-8?B?eHZYWUJaNTIrMlZKNzdWNkhZaVptczdqTXVHYTRoZmd1RkMxcjl0cTQ0QW9N?= =?utf-8?B?T2hvbHFGV1ZDS2M3bnMybkxkWk9hb0ZSYkc1bHptUGtXcFRQM2xKV1ZnZU1l?= =?utf-8?B?ZWxrQ3J2aWtSaVRYVzl6NWF0SjlWM2tvMlVoTVFEYm9pL2M3dkUzcjFQNnlH?= =?utf-8?B?TWpTcXJkNlpoS3BZc2U4KzVScVJUZUE4OGRNM2dPMzNFR1o3b2tiSmdXN1Yv?= =?utf-8?B?YXVXbWRnZnI1dHlGblU0Ylk0by8zaHI1djg2cU9RWmVSbHN3Tmt5dFg0R2hS?= =?utf-8?B?SEhnakI2QjV0R2JmSzNXS0M1RDJPN0lYeGN3WXMrMHNCdlNjbi9EQ2NrUTB3?= =?utf-8?B?aEd0UXA4bFRHU1Vjc1YvSE5rbGZvSEF3RDJ1YTY4aGoya1I3TCtzd2JBL3pw?= =?utf-8?B?NU54S3VDZnI0WTM1SzNzUks1YWpBOVRWR3oybklrTlNnRytVZkMrVnd5RmxO?= =?utf-8?B?aExEanhGdjJ1NFpQellvczBnVVBvQ1o0eWR5cHB5QXZmQmNraTVuL1ZpTEcw?= =?utf-8?B?T2NhSy9ucGNaZ3RteklaVEFOSkFEQklyOXpKOXV1cXZoRVZyQ1BaVm9aM0hW?= =?utf-8?B?elZDb1g0UlFZcXlaWE9MV29MSUVFZjYrYmIwMEN6WVp2dTZiZjB1d3ZGd0Rs?= =?utf-8?B?S0tuUTh5NWlOdHdLMXhERCtETlNWMFZzL2hSWmRzWUx1Q2szUkoyc2lxblZX?= =?utf-8?B?bWFwdTQ5Q0dVT1JoSWZrYStXQ1Y1WmhQQlVObUFhTU91VDB5L2JKS2pCbm4z?= =?utf-8?B?RGthM1RIbXlDZ2Z5Z29XbnQ5TXVSOUlVaFhPeU91N1ArTFl5RVUraktPZ2FL?= =?utf-8?B?c2xpd0lRZFpmU3hRNlFRSi85YVU5RFBaRlZYRUF2TFlRanBZWUJtZDNMcDVH?= =?utf-8?B?ek40dEhqdVNNOCtFb0I3WjJJUXA1dVVacFBldzk4YmRyR2FpS0cwU1VJb0tz?= =?utf-8?B?OGt1VG1iZUtsZ0UrYnMwaGtPR0JwcDVwUnVyQWM1NU5rNmdNaFJCeEZwc2k0?= =?utf-8?B?YTZyQUE2TWJ3RVNNRGo5QUpVNTEvUmkwWTdkYmpzQVlPMWZiMWNlMVExdGpT?= =?utf-8?Q?KygoQts4Ye8Z3K50hZduunQyH?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: a4d9556b-444a-411c-3afe-08de3ea50b1d 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:31.1130 (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: ut1T7XKK4eDU19sp7F0RxdyEzUewNVmn2odeTzEKyy4Tjv8EuDCQdBC39IZWZhhY39RFQjGTlzfRT90tHLDMlg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH1PPFC908D89D1 Message-ID-Hash: PWLGWW7JNDKUUW7IOEEV5CNC5WN6L2UV X-Message-ID-Hash: PWLGWW7JNDKUUW7IOEEV5CNC5WN6L2UV 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: 1766111283798158500 From: Nathan Chen Open iommufd FD from libvirt backend without exposing these FDs to XML users, i.e. one per domain for /dev/iommu, and pass the FD to qemu command line. Suggested-by: J=C3=A1n Tomko Signed-off-by: Nathan Chen --- src/qemu/qemu_command.c | 11 +++++++++-- src/qemu/qemu_domain.c | 1 + src/qemu/qemu_domain.h | 2 ++ src/qemu/qemu_process.c | 40 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 52 insertions(+), 2 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 2a16f9df63..8053f9b453 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -5348,9 +5348,13 @@ qemuBuildHostdevCommandLine(virCommand *cmd, =20 static int qemuBuildIOMMUFDCommandLine(virCommand *cmd, - const virDomainDef *def) + const virDomainDef *def, + virDomainObj *vm) { size_t i; + qemuDomainObjPrivate *priv =3D vm->privateData; + g_autofree char *fdstr =3D g_strdup_printf("%d", priv->iommufd); + =20 for (i =3D 0; i < def->nhostdevs; i++) { virDomainHostdevDef *hostdev =3D def->hostdevs[i]; @@ -5369,8 +5373,11 @@ qemuBuildIOMMUFDCommandLine(virCommand *cmd, if (subsys->u.pci.driver.iommufd !=3D VIR_TRISTATE_BOOL_YES) continue; =20 + virCommandPassFD(cmd, priv->iommufd, VIR_COMMAND_PASS_FD_CLOSE_PAR= ENT); + if (qemuMonitorCreateObjectProps(&props, "iommufd", "iommufd0", + "S:fd", fdstr, NULL) < 0) return -1; =20 @@ -10996,7 +11003,7 @@ qemuBuildCommandLine(virDomainObj *vm, if (qemuBuildRedirdevCommandLine(cmd, def, qemuCaps) < 0) return NULL; =20 - if (qemuBuildIOMMUFDCommandLine(cmd, def) < 0) + if (qemuBuildIOMMUFDCommandLine(cmd, def, vm) < 0) return NULL; =20 if (qemuBuildHostdevCommandLine(cmd, def, qemuCaps) < 0) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 85eea1801f..c5e1cd5279 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -2042,6 +2042,7 @@ qemuDomainObjPrivateAlloc(void *opaque) priv->blockjobs =3D virHashNew(virObjectUnref); priv->fds =3D virHashNew(g_object_unref); =20 + priv->iommufd =3D -1; priv->pidMonitored =3D -1; =20 /* agent commands block by default, user can choose different behavior= */ diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index e91435c062..18ced7ebba 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -264,6 +264,8 @@ struct _qemuDomainObjPrivate { /* named file descriptor groups associated with the VM */ GHashTable *fds; =20 + int iommufd; + char *memoryBackingDir; }; =20 diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index ab88a6bf62..8863be2cb6 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -10365,6 +10365,37 @@ qemuProcessHandleNbdkitExit(qemuNbdkitProcess *nbd= kit, virObjectUnlock(vm); } =20 +/** + * qemuProcessOpenIommuFd: + * @vm: domain object + * @iommuFd: returned file descriptor + * + * Opens /dev/iommu file descriptor for the VM. + * + * Returns: FD on success, -1 on failure + */ +static int +qemuProcessOpenIommuFd(virDomainObj *vm) +{ + int fd =3D -1; + + VIR_DEBUG("Opening IOMMU FD for domain %s", vm->def->name); + + if ((fd =3D open("/dev/iommu", O_RDWR | O_CLOEXEC)) < 0) { + if (errno =3D=3D ENOENT) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("IOMMU FD support requires /dev/iommu device"= )); + } else { + virReportSystemError(errno, "%s", + _("cannot open /dev/iommu")); + } + return -1; + } + + VIR_DEBUG("Opened IOMMU FD %d for domain %s", fd, vm->def->name); + return fd; +} + /** * qemuProcessOpenVfioDeviceFd: * @hostdev: host device definition @@ -10419,6 +10450,7 @@ qemuProcessOpenVfioDeviceFd(virDomainHostdevDef *ho= stdev) int qemuProcessOpenVfioFds(virDomainObj *vm) { + qemuDomainObjPrivate *priv =3D vm->privateData; size_t i; =20 /* Check if we have any hostdevs that need VFIO FDs */ @@ -10430,10 +10462,18 @@ qemuProcessOpenVfioFds(virDomainObj *vm) hostdev->source.subsys.type =3D=3D VIR_DOMAIN_HOSTDEV_SUBSYS_T= YPE_PCI && hostdev->source.subsys.u.pci.driver.name =3D=3D VIR_DEVICE_HOS= TDEV_PCI_DRIVER_NAME_VFIO && hostdev->source.subsys.u.pci.driver.iommufd =3D=3D VIR_TRISTAT= E_BOOL_YES) { + /* Open VFIO device FD */ hostdevPriv->vfioDeviceFd =3D qemuProcessOpenVfioDeviceFd(host= dev); if (hostdevPriv->vfioDeviceFd =3D=3D -1) return -1; + + /* Open IOMMU FD */ + if (priv->iommufd =3D=3D -1) { + priv->iommufd =3D qemuProcessOpenIommuFd(vm); + if (priv->iommufd =3D=3D -1) + return -1; + } } } =20 --=20 2.43.0