From nobody Sat Jan 10 02:54:27 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 17677547848961003.6367073341178; Tue, 6 Jan 2026 18:59:44 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 993) id 0958043E52; Tue, 6 Jan 2026 21:59:44 -0500 (EST) Received: from [172.19.199.83] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id CB8CC43FB5; Tue, 6 Jan 2026 21:50:46 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 993) id C610D41B72; Tue, 6 Jan 2026 21:49:52 -0500 (EST) Received: from SN4PR2101CU001.outbound.protection.outlook.com (mail-southcentralusazon11012061.outbound.protection.outlook.com [40.93.195.61]) (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 B01FA41BA1 for ; Tue, 6 Jan 2026 21:49:46 -0500 (EST) Received: from SN7PR12MB6838.namprd12.prod.outlook.com (2603:10b6:806:266::18) by SN7PR12MB7977.namprd12.prod.outlook.com (2603:10b6:806:340::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9478.4; Wed, 7 Jan 2026 02:49:44 +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.9499.002; Wed, 7 Jan 2026 02:49:44 +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=ItMNGKhliHrUcKUtX6Nmh35AUJtn1d8BmcAgtQXhNjUGHXeTjxvZ1UUe1wSVW/nivgYN+XY3WiVGEiaxQNQCqXhOkdbhAoLQn+/9yd4oWRJgPoEkvJyQrlG4btG0lv8dAnbb/3mPYG8pxOXwPYVA5aek6lRNPDEktXSl8j+Z20gStAC/eWKCEwoxKnvN7REAdVTdltSmFE3QhsKtv9kldznjo40DjNrmSMwbwTcPT5G/dBbqGnb7Yy/eJFvGwXJMRP/zfESYRH1J3jWR+7ZUaPfRNXxcKyaXA3OYAurC09mlnNY9aCqfb82zd6bV/a7uMQyyJiUwxPtFpFBC5qxyUQ== 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=9T/cWSaDjeTNzmFAS5Wgm1BRIsilegAxN6kzMSPc3jE=; b=yaFi3mBK9Z4Hq1R2NdJjDTVzuPoaBhf3N+YA3akD5rew8GaUl0EszzOyK/ev8BKPfNw85eoENnsQ8HMlhPDq1H50qlY/62NiUqo/o0F3Itvk0JBXrlFw7PTYxJB4nnSjwcrzIiqJWiTKX40IK3I0bdgOPAEQG/AVJha3yETC7MOMSbw2RSiLHCrF13jzbOL7KnPfsxWRdLSiiALOw+ODaxArFOveghDCDlDUyzHBhqKuXox68p19BCa8kHjqb4no+5fWzDzvnOEtE6/AK6pVuDEGsxkb+eT+XfcLbhhjAI3Fh5E8eQXwL0IUVasrUhiW2QCF3qsaQYSy8PjlQ563NA== 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=9T/cWSaDjeTNzmFAS5Wgm1BRIsilegAxN6kzMSPc3jE=; b=lInRIRSGad1K990ohA2OxCC6WEYEyAbvHi7zWhWJQfcS7xNNQ9h5ltMan4ekBiY0VlaMVMJHVLMNlZd3b20CSDisffRFEAmymOCP8/QlYkrwWoV9wLc8cjD+TNMurIqzjAXl3r9Q4SbZ+SB55MN95ZL4xGIv4rboYqfzm/Gu0H3Nc6ysay35SbuCqQKy9rpfiyARmaohLoZgqwaJ6nKs7BjKANxK6wKXMRznvb699IfH9zvIZuTz46DZZuGLFSiwTP9pKdspP9pC1W0aARLDTaEEQK61Rm4O35EP+4YXW4699fG3AJUMpvP75WJjKnUao+/go38iS1IGny3RcK4EHQ== 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 v4 5/7] qemu: open iommufd FD from libvirt backend Date: Tue, 6 Jan 2026 18:49:36 -0800 Message-ID: <20260107024938.461794-6-nathanc@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260107024938.461794-1-nathanc@nvidia.com> References: <20260107024938.461794-1-nathanc@nvidia.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BY5PR13CA0006.namprd13.prod.outlook.com (2603:10b6:a03:180::19) To SN7PR12MB6838.namprd12.prod.outlook.com (2603:10b6:806:266::18) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN7PR12MB6838:EE_|SN7PR12MB7977:EE_ X-MS-Office365-Filtering-Correlation-Id: 55c04259-4ba7-410d-c442-08de4d9769e6 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?ZEJObU96TFBDV2VsaElzdnkrRFZ3VkprWE01QlBtMFVGeGxZSk5Qd0taTlNh?= =?utf-8?B?WjVVWE9rL2J4eGNoYW8yeDc1eEtkbGhodFpGMFdJM3BKZFNLSzQyM1Jlbkwv?= =?utf-8?B?NGRxNlJ0ZmdveXVPV1NkeExYSldkTDlRWWEzRkROTGdRRXh3Sjd5SzJiU2xV?= =?utf-8?B?bzI3bFoxNlREcmNhNFB4Zm9VT3VFRFZuWjBtVFdPaHhKeHA0eUtxeWZIT0pz?= =?utf-8?B?aC9YMHBwVHZjWXo4cFA5QlFtakRYb1FSRVlwdG9CZGdxSGZIMzkyd1NnaTVk?= =?utf-8?B?OFJxcG42V3FRK0Fham82L01HWUNOU3JkcG9vZ29yMkRsOGJBaWI2V3hvQ1NE?= =?utf-8?B?eFJtdHRQL29ZMEtxL08zd3cxbjZjQXVUR2pxc0oxUDgvTHg5c1grck5xdkRN?= =?utf-8?B?WDkwaW8yeXZVY0F6dHM1am9DTTlyUTBDb0tlaklnVTRsb2J6cUF4RzJXT3RL?= =?utf-8?B?OWswSHdMaVo5RVdIN1F5T3NNZDIzNjNLM2dwdGpYaHBNdmJFS2xOd3pBRUhX?= =?utf-8?B?eGlOTFRKMml2K2txQ1NqRzg1cVdoei9HQ2RaMGphVmJhVlZDTXdSMEk1L0xm?= =?utf-8?B?NzArbWQ4SWV4UEUwVTVjTWV0aEpKWDllMmtzNGJ3RURFQjAyWllwNUJNb25O?= =?utf-8?B?bHo2bUZtUnJxUDRhQk82RUU4ZzNPdmZpQXJGUVZkQzhTNjdIdWpwRGpDOUJC?= =?utf-8?B?bmMwL1VKSXN2cFZNejIrTjZEOThGeFlNZWxLOUNCTk9TRWRObTB4cmVYcE1P?= =?utf-8?B?d3dNcHF0ZHUrNHlpQUFSR0tBZnFES3MxZ0hxOUZaQnMrMTA1S09HYW0zK1FJ?= =?utf-8?B?VHYwSnZ1ZVNnL3JMZnJRdktuYklYS1krU2JBalpIVVNvQVAxS29jNndRQ0Fa?= =?utf-8?B?clVsdTVlMENIajJrSzBEbS9JV2ZqVitFQVk2Zkp0SmI0SnZ5d3hMbXVnL1dU?= =?utf-8?B?bGtsK1hraHoybG1MUVMwUjI1WWR2UkRWeXp6bVBHMzRtdkxSUHlsdWIyU2RJ?= =?utf-8?B?YmJmMTFzTzJMTWphbHNaaEIwdFEvQkdMQUFVeFBzaUNWVHFiRDlrM25WSDFE?= =?utf-8?B?Zy9WQjk2TXM2N3hDTm1MZGthQXp0QVhlSCtydXU3VmluVXY3c1VlWStiVzVI?= =?utf-8?B?azgybElQemVOcDVaWldlWE9IUzYrWS9CNVRhOUN2VnExL2ZQeXZYRi9SZmtt?= =?utf-8?B?djgxcEVOYUVsY1c0ZXY2R1dGWE5hRERLaVJNSGdoYmJXSFU4WDhJalJWZHNU?= =?utf-8?B?THNxNk1NZEFMTDdLc2RhdEUvTGR0SElBUGRWbmpWNEJKTC9YZmFONng0aGlZ?= =?utf-8?B?VWFYMHRVbWVqQ3c2TkdvbU5qOVNZNk1QSHhyTTlVNjNrKzRvdVFYa21iNEc0?= =?utf-8?B?VnZDMS9uMEcxVVZzYUZweExvWnBDdmRVQm9DNVY0NDIralQ5THhlMmJaR3Za?= =?utf-8?B?UERxYmlMektnQU1PRnh3R2REeVMwaEhucGJjWEpjbmVwSlJ2ci80ZXRpeTh5?= =?utf-8?B?bW9xdzJKcGdSRDJCWTNsb0pxT084bmVRc0VxeHc1cGhoYlRtZ25ORTNrckNt?= =?utf-8?B?cldiVWhaRERwNiszUzIxTlYrNzR5MEdKbGxaN1djcGFFUmYzTlJZaVpQK0xR?= =?utf-8?B?Zi9oTmQ2dUdnYnAxaXFEWWcxK0NCM2hMQ2JDbExvTnd5SWNmNzZHVlBkcndZ?= =?utf-8?B?U2sxMW9lUkRDUjNMaXNyOUVoU3BoU2pGYkhVM050V25hLzY0SGQ4aEtnMnBF?= =?utf-8?B?Nlg1ZW15YzRaNUk5UWVMbSttN3orSnArMmRSRzh2aW5ZWlltR0FzQ1NnYUNs?= =?utf-8?B?ZDd5dCt6R2RpQ2FRdjk5VlZxbVJQRU82ODFLL1FzL09JN0lOd203QTZKWUFm?= =?utf-8?B?OWtDdlhZUXZrUnFYWUJIaG4vRTV6YXBBTU1nTHlyeWQyMk1MREFpUkk5cTgy?= =?utf-8?Q?8BgGbkF/eTYXlaQgXuMIxTs1nSmDByWh?= 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: =?utf-8?B?WjJiUHJLN3J1aFFwbGdYSCsrTERTVG81NmpSelE5bk5KWEprOVZSdWlBRmZB?= =?utf-8?B?YnhXQzJXdXFnY2NsUk5mUjIrN3ZOdnZVMDhHQTNuRzNHdG5JUjNHTDBHYU9o?= =?utf-8?B?aG1oMGFqSnJ4dTNlWmE3VWxLTDk1dWFTNnNRc0VGNlJBVEVZa3pUeDJSd2hW?= =?utf-8?B?aGh6aFhTcEhYVzlMbS94SFJobGk0RGh2SEtHeFZRY20weHFOZElzcER1RmhZ?= =?utf-8?B?QWZoSDV5dXk5Z2l1YlZaQ0dxV1hlUVdhZ01rcFhMbjVvY1MvZnM0R1VkUkdX?= =?utf-8?B?eEVJSTJWVGM4Z2Q2V2Z3U0ZxYjlOUzhXWWhYcEgzYUtBUGlRVTlkWFpGRVcz?= =?utf-8?B?ZXR6cTRkZ0cybFZwbzMxZ09xb0dIOHlUWlJBUHRWT0dESzNqWHJOd1JhZVdr?= =?utf-8?B?SmJNeG9xOWRYemF1TmdUODVjK1BWVTBKQng3bEljUElNSlcvWCtNRCs0TUNo?= =?utf-8?B?VWlZeE1rZHNZeHJ2b3ZBT2E2NmV4UGFYNysvSEdPbnlPQm9sZ3RLWWFWNWJ1?= =?utf-8?B?Qy9qTXFQTXE2RG1LN3hOUVJ5aEVxQVNwMnd0K2haalh4UlFqWW4vMzJxZ28w?= =?utf-8?B?bS8zWmZadlVtL0dhbnRqS2I5SC9mdTdqNno2QXliT21QWE1lSUcwanRQb0lp?= =?utf-8?B?ajBDQ3FtNi9GN2JlWGlVaU1HZUJqMURSWU5LSzVwYSs0NDhjT09nY0dBbGcv?= =?utf-8?B?d1lOMzVZVmdnSnlRelNpUnQrK1pTNHFRNk5SWEZjb2N2LzhRQnRzNVBYRW1M?= =?utf-8?B?SERrazRHNnBIU3c4dEh3clVkQmVjUUNKYkEzR1dyTXl1aVJlV0pucUxaV1JE?= =?utf-8?B?NG1iS0wrMll0S2VoY04vamdsVUtXTDBEL0lsdEQ0UVkrTmNVNVZQRElHaGh0?= =?utf-8?B?RkI4UmY3YTZ6eXp0bVM4MEZ2ZHlpZU9kdDVOekpnQnpXRTgxQlpsb1I1UlJ4?= =?utf-8?B?dVIyQVUyU01ySWxLRzZvWlQwMHQ4cVRiTUluVGNsNC9tR2JZbzRuTFIrSUNV?= =?utf-8?B?dk9uK3pOeUhwaysrci9vUjB3cG91UTUxSTBVa2l0ckRHZXhPcnZxN1YycHVT?= =?utf-8?B?TzZSSHRRS1FPT1NRSXBYa0phNzdRWGZMV1hqdmVWZ3hMdXk0WUR5S256M0FT?= =?utf-8?B?emJaOGFwTzVvZ1JOUUptMEw3YWUyYWFXU2FsQWUwaS9EUSswUXIrUVpKV3RK?= =?utf-8?B?YW5mQnYzOWk4SENRYXF1eEZGMTdJN25tS1JYUmorNU1FRmh1c29TMmI5VVJx?= =?utf-8?B?blgwVmxwQndBUk0vOXU3Z1VVc3lQSUJRc2ZDamRJMlNJSVhhNjdDS2xkZWZV?= =?utf-8?B?NGdiM3ZBMHhEY1ArRldtbEJkL2I4dDJqWHFjR25YMkxFL0h2eTRzdExHckN4?= =?utf-8?B?Vmd4M2o4ZGNPNnpOS0FsZ0tjL0kwNDRYSi9VUCs2Mlh2QmlMamwyUDYwV0VJ?= =?utf-8?B?dUFoMW9vT085ZjdOcFJndnd3bDJzZ3p3Y1B5ZVl1TjhlZ2J4Qis2eUlDem9G?= =?utf-8?B?eXArUUlIUWM0UHlRYUlMdTViL0Q4MHZ6ZjdBVnFUTEs0Rm1RcVI4SndLUnFP?= =?utf-8?B?cWlVZU5YYitBYkJkZDlrQm5uUTFHeTF4MTNpZEJzZVRjM3MxSVZzdm5aSnhX?= =?utf-8?B?QUc2Rlg2T1JrSHE4THdONVR0QU9wOTVCUXgxYW04aG1ZZG8xbzJHK0ZBeFhB?= =?utf-8?B?dmR0RlBWZUt5cUlKTzZiRHRWck1hV1h6aVpkU0grY3BMTFpxRDBLR3Zoa2hE?= =?utf-8?B?VkxqbW5lLzd1S3IreU9nNTBETGsxdkJVaHdtajc1K0Z1bEU0ZXBWeVlKdVo0?= =?utf-8?B?b1lZdkZpTnVGMy95TUZ4VXB1L1hrUkpOaExlVGdiU0xMNDcvYzJFcTQ3eWpL?= =?utf-8?B?ZlNBVGlTNFlTbTJSYlFsRW95VlY1VkVYWVVBamw4WUVibDRTek4wVWFURnJ1?= =?utf-8?B?K1BDNzhURVRwejFyWjJucTluMHh4Z3ZYMnZqdXVDellzQTJSU004cUMzUzd1?= =?utf-8?B?enNNWTluZ1ZpUHJBNWtvR3hEVVd2eVRJeW1QbTdvMVppMlZKdWF6RkVBSTJI?= =?utf-8?B?anMxZUJTeUFXaGNtdTdnRTFjcFZITzFpNjB0Y0N2UENHNE83Zm1KL24xeG9M?= =?utf-8?B?dU5KY3hyanl3S1RZZFNZTmgzY2dEVnVYVlBsU2RvT2hhcmZOeExlRUcvODBQ?= =?utf-8?B?MzBNQlFrbVRwUDBBcnprNSs5dTVqVkdJaEpzK2tXaWFnS1dweldYdkNnTFhi?= =?utf-8?B?SEtmZWk1cXEwUUZJc0dlbFpXQkxKSjNhbk90Y3F2RWdsRm8vN2lUcHg4MHFv?= =?utf-8?B?OW5wNjdQWVFlV2lTbE85bzYvYXM4clNzeEJlb2FlRGpVQU1mK2h6QT09?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 55c04259-4ba7-410d-c442-08de4d9769e6 X-MS-Exchange-CrossTenant-AuthSource: SN7PR12MB6838.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jan 2026 02:49:44.6032 (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: Kh7aL9KsIXn+Tw5yAyRigHmPdqb8N3K6d3gDi1XQULs1bRRTmVVezot/qIvR9mx2I9FtiGPsidbKgLWftySUig== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN7PR12MB7977 Message-ID-Hash: P5IVTVV6AQPQ2ZE5B2TB4K5KPJ7RQES6 X-Message-ID-Hash: P5IVTVV6AQPQ2ZE5B2TB4K5KPJ7RQES6 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: 1767754786887158500 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 | 13 +++++++++++-- src/qemu/qemu_domain.c | 1 + src/qemu/qemu_domain.h | 2 ++ src/qemu/qemu_process.c | 39 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 53 insertions(+), 2 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 2a16f9df63..5916283651 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,13 @@ 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); + + priv->iommufd =3D -1; + if (qemuMonitorCreateObjectProps(&props, "iommufd", "iommufd0", + "S:fd", fdstr, NULL) < 0) return -1; =20 @@ -10996,7 +11005,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..0ef46e4880 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -104,6 +104,7 @@ #include "backup_conf.h" #include "storage_file_probe.h" #include "virpci.h" +#include "viriommufd.h" =20 #include "logging/log_manager.h" #include "logging/log_protocol.h" @@ -10365,6 +10366,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(VIR_IOMMU_DEV_PATH, 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 +10451,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 +10463,16 @@ 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 */ + priv->iommufd =3D qemuProcessOpenIommuFd(vm); + if (priv->iommufd =3D=3D -1) + return -1; } } =20 --=20 2.43.0