From nobody Mon Feb 2 07:30:16 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 1768614364791144.52739117039948; Fri, 16 Jan 2026 17:46:04 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 993) id E38B341C17; Fri, 16 Jan 2026 20:46:03 -0500 (EST) Received: from [172.19.199.3] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id BD07343FFE; Fri, 16 Jan 2026 20:40:05 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 993) id 6A77941B4F; Fri, 16 Jan 2026 20:39:50 -0500 (EST) Received: from CH1PR05CU001.outbound.protection.outlook.com (mail-northcentralusazon11010042.outbound.protection.outlook.com [52.101.193.42]) (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 2D33741B4F for ; Fri, 16 Jan 2026 20:39:47 -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:45 +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:45 +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=Ql4ZOAkte1U/PP/QBv//RgvPJ2iw+zH8NL/g4mXZ/Y+4slIr45OjO6nAdtd3eZkcGYyLnzc5GbcKnfi6E1aPjey7OlrDY/xA+MRqZjnbJzy2EMRkT4EBffdoryuu/WE4thEQOMZqCESkk1OwS12tkzQ0tPBz9o9yOQV4XBZhuL4fko0MAkoNX3NWkzuNW81ZOzcnbmaYIyysHgE2cghKU3Fh5qI/rQ2b42GMg0oac23R+SuDprC79c3aR3MjBhHl82cadrNB/uSD0MndDoAbGRzQD/T6nDGIo57Oc82HArSCGv0k9xHVVVBz7oZLP2lYz4i0x0CidNnp5C0OvGJMBA== 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=UtHRTa/+b7wbTjqV4Ket7/e68DPOkgeg9Kb3tbMhFks=; b=yC0X27o/CCONdy8B2p48BIpkZAyGYujhDIkGkGmhbVEIRMioo8xWsaT3oBlDLNvObB9/2vCcON4Ez14WtEE7NtoXU5LtL09LcG5X7GhlnNlEnppZnbnCmfodwmNNv5pTXHZr8fcqlg34zo/7C+ygyshOjcayojkkrpy0W1BtX3K8wXxfpzq7HbhBI0e2V2EPTExaSbndBkqN1j10lmfMSYXG1nk97q6cloYDqJzuMrGjPlc8GfS75omNKP8Jh6Nqa/evrq14mb1XQb+4Q2lpXOFysMgMsoYgBoYLNqGYjHZ0mAayP1F+TG10XHlpnO5Z2e9EP8T9AujVjSgslD7FAg== 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=UtHRTa/+b7wbTjqV4Ket7/e68DPOkgeg9Kb3tbMhFks=; b=swUqCf5ovRVvI+gli5cZPIXQv2mntiP3ylff/RqyGD2ouV8Kqbx3I3ldCjLyD0bV5d6IwGzfA8nTQbO8yPBlGBD9nCZk72UZxJnWEkeNG9MreSu+RDTTW7CdzA81XCXeljB7w/hl/fBy7cZFs4gbpZbSfZzVqosG73CWd2Zcs0FPl5wO4DSYP37VgPH+qXACYE0Lhdeo7U74IPWojrpPqzZbJuVbmj2gH0ENr3jA7TuLl4FpUxqaXbEV/0KU642ixGuSwzg6+DQEG7idqqXyRWG+lokDS1pgfl3J53+UQN5fgAKGoJ66+uURzA59KBuL4iUynEbZsvTpvnyahjIdXg== 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 5/7] qemu: open iommufd FD from libvirt backend Date: Fri, 16 Jan 2026 17:39:35 -0800 Message-ID: <20260117013937.3803457-6-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: SJ0PR13CA0170.namprd13.prod.outlook.com (2603:10b6:a03:2c7::25) 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: e08214ea-b0c5-44c8-a83e-08de55694b31 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?ZXYvZFJiMittYmtWV0tRR1RhWFRESDRtQTRZYjQvT1JIMEFrTjBudVBsZ1Vm?= =?utf-8?B?TU14UFpsSlFuaTNWZXFDUVh3Wk1OQUF6SXBjcXBPUjdjaCsySVQvQU9kWFF4?= =?utf-8?B?VHBsQkx5QkxweEh2TjJ5a2swVGlIcHk4bkc4UDMvWnYrN3NnUmZ4anRiNFNX?= =?utf-8?B?NGFrdWV2ZlZpZGxubWJ4SUFzSEExUTRDVUdTcjdIUStONExna0x1MWJCZ05X?= =?utf-8?B?TlNTVHhva2t3b3hrUVVvbXdaRVZnUXhvMERKbkpKWEFqbUJtWU5ET1pHdEtZ?= =?utf-8?B?endMM2VVYUdLcS9RTjZuajA3VjJTaFdCb0M1REdGSTVuaG1wVVVkbjlKT3N3?= =?utf-8?B?VVAwdGhWQmNFZW9Kd2NBUHN6aXRpSzZtZnhIdTVtWTZQOHdaTlMxRDh1OVRT?= =?utf-8?B?RnZCU3NaTkJUL3ROZmZXUzVWVlpoWWROSW1hRUlMVVA5WGhQUTFlY1JHc21j?= =?utf-8?B?bDg1dmZTR0JiT0tPM0t0MU9iaCtyNDYwVGlaRGU3ZWNTL2JNUXVvSHVQV0pG?= =?utf-8?B?Z0hKVzY2NkZZSHJvNXNZemw4RlUrbnNiaXpXdG1qUVlteWlXWkM1NWpTbSt0?= =?utf-8?B?STdxRStGMWlZemtSbXpsQXRPR0w4RS9HQ1hmckNYUUhaQ2d3ZXdRNXd0ejla?= =?utf-8?B?SE14QUsxUHNsVjdJa0kyRllOS1QyRVFmdk13OWFwL1Zsd1o5RDkwUXAwYU0x?= =?utf-8?B?RkpYaDEvWDVQWVdycjFJNUpFa3F6N1diL2hndW03aXF0M2FxR3V5OVg1VFJ3?= =?utf-8?B?VUtzQ0hHMmEva3NtUkEyUGJyWndGSXltejgrTUNFWFUxRWM2bVpZbnpEa2RL?= =?utf-8?B?eTcvREZwYUkrU1NFay8reDFOejFxRk04REROL0Fvdm9jeHhYTTRGQmRlUjNm?= =?utf-8?B?R2JkN1VtRndsSU5sYU8xRzJFNG1Jdlkxc2wxbytNc2RhaUJRb2pvUGF2YWEx?= =?utf-8?B?dmhEZlZaaTkyTHZVdU5PdHNqaFpuWVVOWTFZbWtZQWxXM2dLdE43aU50azVj?= =?utf-8?B?RlREV1BiaXpzVjVrYnJXSGNQZGZWMGR2cVVodHpvVm8vSnl1WjA1S2pFQjdD?= =?utf-8?B?WkZpVkZ3MXBIRnhWemV2d1VPaU1BY0QrWXRiMThpeGwwa3B2MCt3a2hKV1hS?= =?utf-8?B?Y0JKdmIrVjZIN093RkdEWTkrN1BnVHZNdmVLaTNCcm5oY1pFSGE2czI1Z2pl?= =?utf-8?B?OEZtcndBZmNuYmpxa2UyYjJPamliU0lQekJpSUZSeTNUVmxWWU82cTBTZTda?= =?utf-8?B?elNDZVphak9Sei9WK0pXTzVWSkdnV00xVUdJZzlnZjdSZndrVytOODZkeWp0?= =?utf-8?B?VVFyNXNGTExyUU1oOXA3aE1xa2lWRVRaR25DVnZHV09VUGgwOGU3aUR6T25x?= =?utf-8?B?S3J2amFGdWFRb3JtZW9mK2xTeldlZlBSNEhZempBdnNYbkdqTlB0YUh4aGNm?= =?utf-8?B?MUgvK2s1dVZOT2JLb3hhSDZFZDJpbS9pM3FjUFViY1MzRldJellRR0ZsNEk3?= =?utf-8?B?dzNiY3dKU3ZsZnRsMkJtV1JhYlUzM1ZQeEF2eG4ySGxQajhDVncyZVhIQWxM?= =?utf-8?B?L2xjZEpFWVJRWEtueFlwaFNXZ0tza3lvdnA0a2Q1TjRlSkhqUWU3NkRjV2tX?= =?utf-8?B?d2JHVzVDaXAzUWhIeXcvT2NkbWRpR1JrWlRXK1FWU1hBSnBuVkhLWHpUUmlJ?= =?utf-8?B?MUVrSitHNG5TTC9aRURQMEFmSXNoQ2t6Tk5wNGdFaHZibEdDZEdZV3JwQmRB?= =?utf-8?B?UEFPQjFrbTN2T1g3Sy9VcEJDSDBqYXNpQzZDMkpqZkNrSnBuaGZYV2hGTGdG?= =?utf-8?B?OWZRSWRWOHhnV2c2NEc5NHg4NHJKdWxyNXZFSW5FY2RpenhsOVA1TlJ1aFlF?= =?utf-8?B?QnowS2NoRVNwbDd0cUt0MUtMTXZ1N1NqZHgxNUMxNlFYb1l5V2V2cml5c1dJ?= =?utf-8?B?cktpK3JyOS84emhZYlVKa1VpeW9IRE5Sd3VTc3BoeWdoS2s4OXVNUWQxUGJo?= =?utf-8?B?NnduZ0xheENNekFKOHFFY0xzS3hOc21KSTJIMzFkek9tbTEzeXljSWx6WlVX?= =?utf-8?B?clFOV0loTmYvdi95bUdCSUFJTWFkajNBWTZhU2k2S1RQTWhWM2ZjSDFBNWw5?= =?utf-8?Q?mH9o=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?bWdGMHJWbE01VHBLMzcyUEY1OEVnUFI3QUFYYzV5SXlRdGROanU4RXVOcE5q?= =?utf-8?B?QVRyNGlEVnRlZDNqU1ZSMFQ5NkpSL0JvcmJtSFJtVmJ1SkFMTnJiSWd2Ukkw?= =?utf-8?B?OS8yYnQ3b1lJN3d2U1RYOHpKSUhraXIvbmoyVzBKd2srQXFTdzRqRWQ0MFZy?= =?utf-8?B?MnNBc09UUVd1VUdDUVpmSXJFRGl4ZmYzeG9SZGZmazdHZmxIZmxNZTVjclVz?= =?utf-8?B?MitqVk1DRmJ4Ykt4QlRlclE3a1Q5T2w5ZWtCWlZWU2R5NjRvZ3RJOHFTdHFF?= =?utf-8?B?TGVkVnBKelp1MXF3czRiYUxIaE5IcStXTHliQUprOU9ETWVhNnROZ3NiZ3hC?= =?utf-8?B?TXR2ZFh3eVh6cUpjUi9pb0srVWozNEFnOXNOUjJNRnNuM09BK0NYa0YwZVJO?= =?utf-8?B?Z2NkTWx0UytFS2VOeWhoMTFqZEZRWU00OUxqOVlsZFZxa3F1eFRVY3djWkQ2?= =?utf-8?B?U1lsK0EwY3ppRmxEZDNrdEhUUzJXUEtjbWozQlFOWTNlQXEzaG1rYnZUOFJS?= =?utf-8?B?d2w0ZzhWZWlqUGpjK1hDdUxCaTdKZkM0TW5Pc0tCditielFuVFpxSFZBbFk5?= =?utf-8?B?ZHlxMXZzR3NaaC91S1I1ejNja2lsMlpDQnI2dlYrd2FrQWwxQjRQMmdxbWs1?= =?utf-8?B?eGFJcjhhSlpMblA5UG4rZFU0TmYwMlBqQWRsaHc3L3ZKTlprZFBNa013bnNI?= =?utf-8?B?RDlyY2E1MXVxVW40RHZrWHFQZTJWSFYvaS8yVVF6V2piT1VoV3Y2MXh6bTRU?= =?utf-8?B?NC85TUR3V0RRYmJ0Ym5MaEZJeGYxcU1uMGlFR2JtNlhLWXVNNUt0YTVrYUlI?= =?utf-8?B?eDNRRkg1c3NFd3hUU0dJMnJvc2N1b0ZKMGcySWovN0hlU1o4Ujd4bHROUGR1?= =?utf-8?B?Y3o1a3ZZRlg1UmRXMG1EeVNlN3FqMmFlWG1BRFB5am02cWZFZktYNWNTb2ox?= =?utf-8?B?L25FSXc1bDdWazdBd3JjVzVHamdPajVuQU02V3lBTER4eElQMVFnN2VZV1Ja?= =?utf-8?B?Z0pNS1BXU21xQnBRZHJYMU1wNk1uVDlOS1dCWHZFeWkxVCtZVkRtVGFlOFNo?= =?utf-8?B?dW1NalZiRDVDbGFhVWI1NGpIU3VHRTNwcmdwUkU0NktOaFh4R21Nb3F3NWQr?= =?utf-8?B?MjJRMmRqamV6ckZIZE9XZ201OUVsSGZGZ1hJdkJzUHhqOUxLQUZlbkR1WTdk?= =?utf-8?B?MjlYRzZQR0lER0RSSlBlVHdNTjZudFhYMThxTHlacXRuVG4xNVlKT2x0ZElx?= =?utf-8?B?aG1ySnkyMCtxeWpaL2JjNUNYOHBWbi9XR2Z4K2grbVJSN2pCVmh4clpHczJ5?= =?utf-8?B?THVkT0JKRzVtNFBXaVlYdHJQaGZHYU1PSGd2eWRrSThDcGZlNndkUUgwWGhz?= =?utf-8?B?L0REcUphc3hLY2RwdE5xdnVEeVVnS0k5L3lmWlEzR0VHV1NrY05Ya3pEM0hK?= =?utf-8?B?UWhmN1lNTDZlZDdBNVMyMGJwZUw1NHJQcWhGV0dXZjRGZ0NxVjJIVVFnSW1P?= =?utf-8?B?OFhQcXA2dHV5UFovSlZHVlJUTkNkbkpmQ2xjd3VFR3p0Y0ZSM284Mjhzbzgr?= =?utf-8?B?Zm9wKytoZ3F0ZitJQStyR0MxK29wd1NoVjBuYnVUeFMzVXpBQW84OUxXTVVI?= =?utf-8?B?NXA1emU1SGdGU3VqWE0vdnc0OG5JU08xV3YxU3BBazdYN1M2R01TUG4xaDhn?= =?utf-8?B?TGZYYkFEUXlaQjE5Nk1LSGpTUkRxejVqN3Q4aUh1NS9KeFdWYXVrTlBmV2RT?= =?utf-8?B?ZlJURThLU2VnMU5MOHp0bXlTZmN2UkhoZVhCamhzM0lXNTI4d3JDUnVzbmJB?= =?utf-8?B?b0RzRnRQeStDbDc0UmRvNHhldTl4RFlQdUErRGpodm03K3NJR1BLRGZkK3lR?= =?utf-8?B?WElpS3BtbDJUVFNGOVZXeVdaeTlUNWNwKy9uOFlKeElOdTdFa3BxYTZkcTlN?= =?utf-8?B?bzMzUmJ5QUtrZkhxc1NQNXlBZXhtb3Y2QTJDMVFBRDFiR1M4OHRzVndvQXVN?= =?utf-8?B?eTRHTldFK3NpdWdzV2tUdlIyb0wvaUZjRE5YaHMxL3l5dzVFMDEwaUlSYXFY?= =?utf-8?B?Vk1hU1gyY3dDTFlHUWhoZGpJcklESjArZjJ5dEFYR3htUlZwUXdGVUluWE9U?= =?utf-8?B?b20vOVZIc3J2eUpxMkgwRFRiUDVSdkRyMXRYMFdSTzVEb1dpNnV5QjFMS0xn?= =?utf-8?B?UHM1TlNuYTdwZmE0Q0hISG11Um8yMDVjZytpa0lYU1FTdnBVZ2ovZUtEWEQv?= =?utf-8?B?WWN3OWRVa1RRbG51cmQwVk9xL2kwK0lYR0FGRUxjS0JaM3VqcE1DSFJaTVlU?= =?utf-8?B?eHY2MWtmWDN6K29QN2JoTmQ0aGx6QnhIS2pVK3FvM2lWNlB3eWpOUT09?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: e08214ea-b0c5-44c8-a83e-08de55694b31 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:45.6075 (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: h4DnDEgMIwqXUMc+6SlFLFf/lErGJG+eXL5gYZwL6wSG0CRbFOhtlqJgFVFfdILF0KRlNe2Sr88MDB3hJWTFFw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV2PR12MB999097 Message-ID-Hash: 7HEFZK7Q5TDTPJ6NEIHX2MDCERU4UZJI X-Message-ID-Hash: 7HEFZK7Q5TDTPJ6NEIHX2MDCERU4UZJI 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: 1768614365667158500 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. Set per-process memory accounting for iommufd instead of the default per-user memory accounting. 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 | 43 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 57 insertions(+), 2 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 406f14831c..85c368f0f9 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -5349,9 +5349,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]; @@ -5370,8 +5374,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 @@ -10997,7 +11006,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 3aac743875..fabfe265bf 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 2841856454..c5b2a5fda8 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" @@ -7671,6 +7672,42 @@ qemuProcessPrepareHostBackendChardevHotplug(virDomai= nObj *vm, return 0; } =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; + } + + if (virIOMMUFDSetRLimitMode(fd, true) < 0) { + VIR_FORCE_CLOSE(fd); + return -1; + } + + VIR_DEBUG("Opened IOMMU FD %d for domain %s", fd, vm->def->name); + return fd; +} + /** * qemuProcessOpenVfioDeviceFd: * @hostdev: host device definition @@ -7725,6 +7762,7 @@ qemuProcessOpenVfioDeviceFd(virDomainHostdevDef *host= dev) static int qemuProcessOpenVfioFds(virDomainObj *vm) { + qemuDomainObjPrivate *priv =3D vm->privateData; size_t i; =20 /* Check if we have any hostdevs that need VFIO FDs */ @@ -7740,6 +7778,11 @@ qemuProcessOpenVfioFds(virDomainObj *vm) 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