From nobody Mon Feb 2 07:28:47 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; 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 1769799955613958.1486649397682; Fri, 30 Jan 2026 11:05:55 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 993) id C398C3F316; Fri, 30 Jan 2026 14:05:54 -0500 (EST) Received: from [172.19.199.6] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id C692843E81; Fri, 30 Jan 2026 13:59:44 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 993) id 4FF523F878; Fri, 30 Jan 2026 13:59:31 -0500 (EST) Received: from MW6PR02CU001.outbound.protection.outlook.com (mail-westus2azon11012050.outbound.protection.outlook.com [52.101.48.50]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (prime256v1) server-signature RSA-PSS (3072 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id F162B3F878 for ; Fri, 30 Jan 2026 13:59:29 -0500 (EST) Received: from DS2PR12MB9567.namprd12.prod.outlook.com (2603:10b6:8:27c::8) by SN7PR12MB7106.namprd12.prod.outlook.com (2603:10b6:806:2a1::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.7; Fri, 30 Jan 2026 18:59:26 +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.9564.008; Fri, 30 Jan 2026 18:59:26 +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=LprIMnwm1sCG1d5AtRwg0Wv+szs1lj/BMF/6d3QvUeh8GLGjNC6SdBpsrujY/xIICkCd/LryV6W53wQ4J0euB5muYBXqzfNvm31V+i4kwNM9IJhwdFnbU59wJK14bdzALftDlkYItiuATB8EJxCnZpOd+0wwY2swy6mZ7yuOLTAKU5MB8Zik9pzi3AsmJdTcoRpNOH+ldoz0rIBv/6KMV+bzFgXDJKJqRgjIyvW/QAgAqBPnlslx2d/qFaULx+BKJXvi4WK4MrgMjJrTZLIKZ3hglEcLbK5QJ8sSZkBJTNfq/FUZAKZx2vzrlEG/g22asmBJEyJh2XZP0X9FrbVXjw== 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=cpzXwYuLKRMpyXKBMtXdqjlLWp9iNhaftzphHxNkWDg=; b=hIWZipoBqblSSMdfM3q6c0ACcF/j/7fxQe/epZmN0BkOmfKkyutR/kBjUTw372NQh7SekomYTeVyPOwTAAk7mWiFuVwXIKiC5YrD8T0qEzYyci5OJcmkhAg9j8SAOgn5vnaZME40zv8ArWAbjx0za4ny5ZX770Ckifo0lleKc4lwjE4hUnINlfBlhVVsIfO0hF7GDPgYgx7PPr3je9ryY2rMRiQIe3oWzhMSWKx7z2B1C6/H2VKpPReQhs0Btmv6XvchMwTt+DeA8venN1wrYP8itiGKsjfowmpeudRGKaZQUDxlRwMT9UajikuiMNjTNKCSzyAk4laVIl8o+SpdEQ== 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=cpzXwYuLKRMpyXKBMtXdqjlLWp9iNhaftzphHxNkWDg=; b=h68bWsKA8gdKuiwdVJttd4CnLc0sYIbc6eOX12yqtEKWxV577SxWcilTZbiSUGlrrLj8ko0baz6XfDZB8fMHyI1JCUTNNuKU+e7ECkFQJ5ReWXZvkESMIlMZOu+xl9LDVhVjZElETWQB0ehuLyfCmEL1mt0OSDav9pkF5yC+heVi34hD0B2kKRa6G9NlyY3IfKAomMbmrfVUKCm3UuAYgmh6HhOEg0AutVCGq5Qls86lsZNpo/q7G6XeCh7ekkh4OCD2sbEtWJjMNUrR6RwB28gigJs3/P1enKjfLKXSUxDdx9V3tYcaw9cJznjYR+JBiYeO+e1aAHltiAgTsfmLNA== 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 v6 5/7] qemu: open iommufd FD from libvirt backend Date: Fri, 30 Jan 2026 10:59:16 -0800 Message-ID: <20260130185918.4154310-6-nathanc@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260130185918.4154310-1-nathanc@nvidia.com> References: <20260130185918.4154310-1-nathanc@nvidia.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR05CA0079.namprd05.prod.outlook.com (2603:10b6:a03:332::24) To DS2PR12MB9567.namprd12.prod.outlook.com (2603:10b6:8:27c::8) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS2PR12MB9567:EE_|SN7PR12MB7106:EE_ X-MS-Office365-Filtering-Correlation-Id: 12e96034-9a17-4aaa-43f0-08de6031b074 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?aE1qMUpyQU90Y3NseEhkd3pPN0RZemtVTU9MeUMydWVIYmFBRGc2dnd4TkdL?= =?utf-8?B?ZWtONXYvaUpqZSszZmRabnZqcW5KODhNd2lIMDd2dTNDVG52bGdESm5FKzNK?= =?utf-8?B?ckg4YWpRemRJQmg1UldlUGM4eUl0NnlJTFBNTWZKMGtwUWlPYjlIbUpUQmRn?= =?utf-8?B?NzUzUXhnL2lsU2hoekhYc0JjT2ZIRHgvMnZpNlNEZXEzYVFzVncxNmN4UTV3?= =?utf-8?B?QUZkVUVxWmJyOUwzM2pGNU01MnhhNW9hZFdHUnRzZk54NXo0a2pCM1BTaVRI?= =?utf-8?B?Qlg4WmJ4TS90T1BKRmI5WW5oNGNJc0l4VmkxSENlQ2pER0JNYkh4THFWdXhw?= =?utf-8?B?UGtKQmZaRll5UVY2ODBRQUJhWWoxV0ZKKzZxL1E0OE5uLzhMdjZYekl2a2Fp?= =?utf-8?B?NlNoaDhVMEtqcHBRMHBFN3lKbm85V2ljYkpsZExPUW02RlB6VGtiNzU4ZE1L?= =?utf-8?B?TWFGWjBCUHdFWFF0Y2VGRVhmK3lURXV5R3U4NDlBRGZ4SWVrZFRhKzFiVGQz?= =?utf-8?B?QklDTW1iUWZ1VzdqdlNhR2Nxckw2SkMvaCtDZzdxTCs3Zzd1VlRhQUlYWjMx?= =?utf-8?B?dUlGWm5QL3NmN1ZGY0lBTEZham1NY09PN2dEWSs2WkFlcFp5WGNKZ1N1VkE1?= =?utf-8?B?K0U0cGx6UGlkUDFJV2x0RjdSekF6VDlKbXVYdUpUVzBHR0h6M2RROFRQMnh6?= =?utf-8?B?ek52UFdldThJZEplMTEzSUtSRUVRZVVsdDM0Um5jSlhJcGhpa2pnODdlQVl4?= =?utf-8?B?SEhJcWpaRy9uTEljRjZOc0hjYk82VStuOG9nRUFHMFhxZ29keGxVMlVDSXFO?= =?utf-8?B?TElLd3NKWUtreHN6blEzRXhXYW5ZcXljSXdUMGZnWi9va3owOFlvN2VSTHpR?= =?utf-8?B?T01sTW9OamtlbFl1T0lKVWZRU2hodTdvdXlXMG5XdkJ3M1RuajRGK3g4dzBz?= =?utf-8?B?eCttZkoydzFtRHd3LzhaeGQxOFpacndYT1d3NWlPak83MjR2amovVlJoZTY4?= =?utf-8?B?ZGk1VXl1bDV2L2hjeFpSaW5lWm9vNHpNTmhzWWtFY1E4eksycG1oNDZZcW9p?= =?utf-8?B?MkJHU2ErTUcwZ09KVVBqa2oxNEdzck1XdExXKzJzblZ5RTZhUk15YU4zckJW?= =?utf-8?B?L1A1TmU1MmFqNGgrblBaQWdDSkZ2WGZFVTk3MXV5RjZYOFNBb3NLYTI2SVAr?= =?utf-8?B?M2VQNVhDSGxON1JCQXg3ODJjS2NsbTBzRVA1Q2FwaURDODNnVGRxOWpXcnVP?= =?utf-8?B?bTZtSENOQkxqMmI0a1h4aU9XY0V5eTBaalBldnRyV1hjZU4xeFJOU2lqOWhs?= =?utf-8?B?ZGMyNDd5UDZ1OTlJVmEzdlJibXVuUUlmUHhqL25XTkx1M1RkcmVOd3RjdndX?= =?utf-8?B?c3kxbDkwRERkMVN6bE9sQ0ZKSE0vUTlqVHNMR3BTV3pjQ2I5bEYyL1F0a0I5?= =?utf-8?B?TXMwdnVHenNOYjMySmpBY1R5SkhXOXJLY3FVLzIvL1VvZ014Y0tGcExERExk?= =?utf-8?B?SHpDMlJvUEJWOVQxOXpQRUhycWFNcFVDc0Rrd2gvbDBzZkF4YityV0VZckFI?= =?utf-8?B?Und4cEVHUjVtd2RRVXcyc1NLeUR5cjF0VEFuV1JBNjZnRXFMYmh6QXU5dGln?= =?utf-8?B?bXdqR2poOSs0R0Q3bzNVZWRNV3UzRzBlNEpLTEdhWW5IYzhuRFcwRDJMMURa?= =?utf-8?B?YjhPUzFqdllENGxpdExNSHNIOWZvQ0h5cTFGcVlYVVhheHZkU0pGS3ZBQUNC?= =?utf-8?B?QWJkS2RFM3NVS3JPMWQ3cXlpV1dPOGsxYk1odk1YNXdSQzZPUlgvSXVYa09y?= =?utf-8?B?bE1oeDEyQU8zMlhtUzRYblVBZXZwVFhMSUdsRmZ2OVpZaEUxMzFBRXIrWE51?= =?utf-8?B?eVlETnRtanFrRzFuem9jQVhvcFhZVW5zVmNUblJ3SGh3V3JWdkNQZzhhWkVX?= =?utf-8?B?Y3lvOWoveHF5V2hpbkhhMGdqQldFYWVUY3FnY3BtUmEzUFhnWEIzKzlvRnhR?= =?utf-8?B?Y0s1YVNTM21NMmN3OWcwcUJXUWV1aTRqL2dlc1pBcGJwWVBjRzVCVFVCbTJ1?= =?utf-8?B?RVI3dk9tUkZ0MTBxbXJhN3BaQW9xei9UcEpOZ3diK1pKRHRoaFUrM2lJVi9S?= =?utf-8?Q?0LVk=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)(366016)(1800799024)(376014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?RDVyZTc4cHNtWGJtR29MOXpNK3htbFpFRzJLYmxtTkZxSDAvRFlPVXFuNFhr?= =?utf-8?B?WG43bENHMlRMOUdMUXlaa1lPamdDSUFrN1R5SG9aWTUrUC9HU2Urd0ZvbVpM?= =?utf-8?B?cGJHOFg0a254RS9EZ09lK0VOTmVpcERMOEtNTEZOYXpId254Q2hIbk1BTzAv?= =?utf-8?B?NkxVYUNIZjd2TFMzTzNydUtLa3dObFpkYzNHdXZvOUdnaHhNdzU2N0lKYXFL?= =?utf-8?B?U0lzcFArUFBhU2lySXU2MDU1c3YwR0p3cCt1bVlqSmVzQTYwNnN4T0E5WUVm?= =?utf-8?B?MjFhZGZDNngrSXY0K001YnJLbW14TTh0KzEzZ3dvVVhMdkVMTUdPYjZpbmM1?= =?utf-8?B?UmRic1dKRStrcXF2VS9VcC92Y0JpNGxORmZpR0hybWxqREhDT0ZwL0xsUnpG?= =?utf-8?B?dlRKRHQ5M1U5eWd0Q25VV0VGQ0hqbEhDQ2E3bmFyWGNFT0JzV1lmYzVQc3RT?= =?utf-8?B?eHMzN1V3RENCL1daOU84TGZxYTBWc3NsYUVNMXIwNVdwdVJVaWVmNUxpWlV6?= =?utf-8?B?c0NzL2lNYkY4SSsxNWlCMXJMbW1tOSsySi9IUUJvMG5Dc3duZFhlZG5EbXNC?= =?utf-8?B?VG5LM1FnSmFDckNGcnhENG9yZDNTTGNPbXBGNHAzRnlHR0NQTjE2NTk3MFJp?= =?utf-8?B?VWJ6L0M2MTM2N1BwK3pMV0VGc3EvNkFNZ3pySWkwRUIzRGRETU9LS2pMN1Jo?= =?utf-8?B?dUZGQWt3SW9FdUd3N0VFaHN0N0REKzd6b3R5M0FycldkaHNWN2hhZTR2by91?= =?utf-8?B?MXhVcmtGK0xnTWpXaCs1TWJNQzFRMjlYbExHQnNSbyt3eHA0RjJCZ2wyZmdR?= =?utf-8?B?ejMrVDM2L05wNkRyQm9HYXBhNHdmbWozZ25wWXVSVUZvQlRPeEhTZUJ3T0l0?= =?utf-8?B?V0paK1hIQTBXQzZOblM2clQxeitkTU5qOXJJdHlLMDJPcm1uOHRlZnFieTNo?= =?utf-8?B?blpRNjBxMVpkN2ZiaUxlSEtYZUg0MGR1bXZjMGl5ZnB1K0tSdHE2N1JOOVF5?= =?utf-8?B?SUlLT1RiTldHbUFIaGJEVjQ0RWNjc1AxbWlBRXREY21GalIwUEJ6aWRNN3Qr?= =?utf-8?B?anpIVy9NRmUwUHpxcUlrdGVHejEzR1FtOWF6T0paMXVHZHdpZGRRTnhqZEk2?= =?utf-8?B?Tlg1Z25nWlU0RHhGR2o0WW8zMFUvQnVab3VrWUl1eXdSWnNDcGUrWGx0bkd3?= =?utf-8?B?b0V1dk5IK2Fvd2c3K05pMnl1djNkZFc4cFBTeWhOUDMydjdKUWo4TFg0TWxI?= =?utf-8?B?TkxheE1PQTIvMkttRVRHYVIwTmRldDUvclpGaElJVHEwQjB2NCtUd1BIdzRS?= =?utf-8?B?d3dLZ0VQcmVTMmZ3eDA5TDBDV2JUc3dPaVFmSmhFRjEzK1FtMGV0aXFWdVdw?= =?utf-8?B?a1BwRUJXY21WcHJHQldYY1ZZbzJiSnBjOFRMbUliTSt4bGxiVDJ3TEo0bjdJ?= =?utf-8?B?Z1ZvY1B3TGdRdmIzVm43V2pBcmEvMTFMa0tURDg0M2h2OG1yVmtKM2piVW8r?= =?utf-8?B?dTBoN2RHZGs4MXkvdzV0QUhnSXY1Q3JMcTcvTUlRVnlnckFuYUpiTy9WNmNI?= =?utf-8?B?MlRFekhpWC9nWmdqNk9mYUM3SnVvSUw1bUtDa0M0UUVuK2JqeDlYUkY3NUxS?= =?utf-8?B?bHV6N0tOVXgwSmsrcm1CMXMzWWk5Tkh4anJ6cXM3YlJUTHg1UTR4c1owU1dQ?= =?utf-8?B?TXZQMHVEY1NOVVNybXFhMGU2OG5UbU4wUUZkOFhuYi84NHBuWDdrUWJGMDJ3?= =?utf-8?B?eGtGRFkwTXdMdWpSMXBvakQ2Z2p4R1hhMnVKd01LVWtGRmJsckJCdkVDL2tx?= =?utf-8?B?VW9qcmFZZEZRV3gzaUx0QTNEK0tKVHhlZVVJWDNnQUNCMzhwTlZKbzdyaEVY?= =?utf-8?B?WUVlb2h5SWlCYTBzNytiUSt3cGthNGh3MDB1Ni9mVXZtNDFsOTZ5SWVmQm1Z?= =?utf-8?B?RG9Fd0xyZkI3dUJjS2E2MDhJK05zR29BcFZ5S2lBajJKeTgwYXRmREVxMkxM?= =?utf-8?B?dTAxQUh0VHJTVnpxQUV3R2NNZDhXc1BhRWxNKzBaM1NpL3M0NENURy9WREhY?= =?utf-8?B?eWtqQ25NZXcrd2luMkVyYUl6NmxxQUR5Y0x0QVdTVzYrUUVuU3E4cG1lTDNw?= =?utf-8?B?U2I0dUxrK0RKeHQ4SThnWDcvc2E0N0IxeVZwaTVOQWtYanBpdlRnaW5BTm9a?= =?utf-8?B?NVo0aTRGeUdCWU94SWMzSkFqQ0xJYlNtWG9DN2p1WEVvVEhoaFJnOGhlVFVq?= =?utf-8?B?YWMzQ2lnL0ZyNS9PYkFNWHpleExSZFVIMElKYml0WndxWFRtaTFOMnRPR29s?= =?utf-8?B?L2Z0MU55bFVPTTVyUkhFS1JPRHNCRzlIQ0huNXUrZEdDNlRoYTNCZz09?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 12e96034-9a17-4aaa-43f0-08de6031b074 X-MS-Exchange-CrossTenant-AuthSource: DS2PR12MB9567.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Jan 2026 18:59:26.4427 (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: cpjaAEbxbbFCcctZQ2dpsgXtCHB9L12DWbtGYfnjoSvdAR83FMDK3sGl1Ztahimihae5w2DVeaLecEtqLQxChg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN7PR12MB7106 Message-ID-Hash: CB2LN7EGBNRYMRSH2AXCU7QI7DALGOT7 X-Message-ID-Hash: CB2LN7EGBNRYMRSH2AXCU7QI7DALGOT7 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: 1769799956919158500 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 db5712721e..7f96eb1a01 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 3366214677..8e1ebe7799 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 88c8416aa4..3361e97315 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