From nobody Mon Sep 8 17:08:17 2025 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 (BodyHash is different from the expected one); 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 1753255427848183.55450740885522; Wed, 23 Jul 2025 00:23:47 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id D795D11EE; Wed, 23 Jul 2025 03:23:46 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 3FDD11220; Wed, 23 Jul 2025 03:22:36 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id AEE56BB3; Tue, 22 Jul 2025 16:26:19 -0400 (EDT) Received: from NAM12-DM6-obe.outbound.protection.outlook.com (mail-dm6nam12on2084.outbound.protection.outlook.com [40.107.243.84]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 27F0F11B7 for ; Tue, 22 Jul 2025 16:26:19 -0400 (EDT) Received: from CH0PR12MB5092.namprd12.prod.outlook.com (2603:10b6:610:bf::16) by SA3PR12MB8802.namprd12.prod.outlook.com (2603:10b6:806:314::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8943.30; Tue, 22 Jul 2025 20:26:13 +0000 Received: from CH0PR12MB5092.namprd12.prod.outlook.com ([fe80::969b:49e4:6d48:b058]) by CH0PR12MB5092.namprd12.prod.outlook.com ([fe80::969b:49e4:6d48:b058%5]) with mapi id 15.20.8943.029; Tue, 22 Jul 2025 20:26:13 +0000 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=0.2 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, FORGED_SPF_HELO,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_PASS autolearn=no autolearn_force=no version=3.4.4 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=xgs2U5RBdCHeULcKot1BEpjnuTM3JpFdBB7NeDZBkiN58Fpw3F3oLClLkj1hxFCGAPFAC935nM8+ieD2ZzmOzUijX0wgw8+UYxm2WvDG24RYYQXiM/tgPZPBMXjbm35fEQZDMTMVq8uftwBhhPROaq6PkA4QbHQNjdhVSWS/OqWZi4Vnkg4r/PouihnTVaXQchtzGsmPDFfcfxTBLa8RjMcrW5d2Z8oxw52ile82bBJeVigHhhxoLELbl4mG1pa0KipnBiflnOL6CjgbtD8A35PLA31yF9qTwTqXk9e8/4vzV+0A2tD7e1aYvZdeywfxpG/SOkX3dr40Rm6iLlk1lA== 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=Jb744jlS2iZhDK8sEMkdRnbIzRyQT/Tzk6+7YWLQsx0=; b=fkvFwjIaU3BHOKCyE6qtjgnh1EY/LWfCudQ1JI1ALBoYHBN4kpQJjAnN+2VlKwWHkCtjFjvi8DRXqs1lGQEB7QdetlucFp7ieVrBzFf04Gj01ZpHO4ZhujT/98Oggllh/wWdTsdSbR4jtF3BVgbf5bBuouzE4HVQ9BTWvW5nNp04vwAXbaskONFx6pXe96lPcy9vRdVeFW+UngGTrgcO5ahoWBCXgdAyTsaTQnqb5J9It37+alI9rYMewsFHN57DSjUZ0BZyUSnzTHkU8F5M1CHf/oKSkHWRZaU5YwpC2SxC87nLh7SKTiHRv4JE1fngiWlllTk3rLgL0Zyrmyrofg== 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=Jb744jlS2iZhDK8sEMkdRnbIzRyQT/Tzk6+7YWLQsx0=; b=NIVaXNXM7epAwsHR7ftKJ1qMdpnFCYKwMQ+dr3gQxdDPMHfWLFRaY7C/J3sEL2Q9ZWSxnQZa2Zq9hnM/qrANIbXE60otvWsx0hOZ3/F01jgmzSlGfD5Lfrn1uvRiOqFyPGCD8BQ92x6uhXuhmCFCLVdtF11zhiddJIGrtPbTmp3cB3I2iUj5cZiE+i7gDBYk/VALC/u43yq6PiWffB4odfpFRti3lc+XdjzTOMu+rK68CVgYc2CYYgydH3y6GI489YayxSJiMtLbarnpkh/jD1b2DK4DoQXQT/OScm8r3UQjRgmrBvYOo2YUqGRWAxlKGBqGh+a/2DoGlzn61V85yg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; To: devel@lists.libvirt.org Subject: [RFC PATCH 1/8] conf: Add schema definition for ACPI EGM memory device Date: Tue, 22 Jul 2025 15:26:01 -0500 Message-ID: <20250722202609.1823658-2-ianm@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250722202609.1823658-1-ianm@nvidia.com> References: <20250722202609.1823658-1-ianm@nvidia.com> X-ClientProxiedBy: SA9PR13CA0121.namprd13.prod.outlook.com (2603:10b6:806:27::6) To CH0PR12MB5092.namprd12.prod.outlook.com (2603:10b6:610:bf::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH0PR12MB5092:EE_|SA3PR12MB8802:EE_ X-MS-Office365-Filtering-Correlation-Id: ec6cabb4-e3a2-4042-9780-08ddc95e00b0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?ltSwk18tzVOxXmYVDH+XwoUemwUD/vsTSeYtjDpO1J4ZJXwP+m46RCXnMwtW?= =?us-ascii?Q?y3WUMZF6YMiolPLDENxIXBEhf46K3Nc8+GLOy+aFGeBbwPzsnvQpOSGwU9kP?= =?us-ascii?Q?RQyDdtPLWfiMn/ltZy1qWbsJMWlaGHqEJaEUh+TX+guWwBH1J2d1JLbC2bfg?= =?us-ascii?Q?aCt/RtTMKnyC3+P76wJqOwWIl2S2ly/ILTxEJQ/1L+hFY79IeHGlSOv8PcJ4?= =?us-ascii?Q?0v6Nj+4Jx3WUVg4LB9qB0h7KoiH1Bdmf9Yda2jLEwr3bYIoQjJ/hAfpJViZ9?= =?us-ascii?Q?p4pIN9EU/rekhOYhGlNLvQHTbv9+dy1ZwqknP2enz3+KP6Hqkaht2h2LhtjS?= =?us-ascii?Q?lH0qhdYu2eBGsq3X878G+y6wc+dSzrz3GA2XPxaxyRX5aErHgjbGleYzKj1J?= =?us-ascii?Q?kEXnW1pGsAZL/UfFe/4lPWCQ3YC7T7gKWeS5h8qMC5eZ46sLCH7l1gsVH7R1?= =?us-ascii?Q?+jw2aOYRLWdSjwsZf5qVFWvjn0G2oNtnfo1PUMKeKtNcrMkS9HGX9jUQbag2?= =?us-ascii?Q?yFiKIfpQsuzGdVEzO5fIfKkSsmOMC1z0irR438Q9GF0zxBqtgIVDJZHOv4D5?= =?us-ascii?Q?R/CC8wqCi/FeWrwszOPTXumvmZMl/RaMOaHmw4boYpP89fokP0Bh2mhdJ28m?= =?us-ascii?Q?pT3qj1Ft3HDuPFyo744sjD5InAB/kngLdjPmpIP3sNjyfJ28Y5BXvU+k+Sb2?= =?us-ascii?Q?82mM/NPhGvXqWEn9rU9+/GJW/RIh5VoB8v2cjomhEig26krqzMqKjYu9HFOs?= =?us-ascii?Q?fhxtx2/8tHOQu7fHory5K/5V/WX5r6TeBE5tq0DNLo71IOeUED+gMaamycUs?= =?us-ascii?Q?2cIWoYkT4bEZd9O6MnbmY1lHzwZPtMk+4/F4PIQbG1Fidphh1tBPPBZvbL7R?= =?us-ascii?Q?tTMAjGh0fM1Jd/cm5kcqpKS202pafFAx9+rEiwMSJfoFXaSwHnIyjGExess7?= =?us-ascii?Q?BgrTp7msvL0xOoqEcqOcUMg3dzENO6vjNWWxenqfwLsjwTHJsnnJkLyuvEvC?= =?us-ascii?Q?WCFCckCTAKUTsmfrgH2vEEAYxUx9dG821T+Twlp4g24gV7poACnHDGxnQQc2?= =?us-ascii?Q?XputkpimRn94Cc6Sxgw7A3hbEoXMgWSU2PGMsCbf3J8glIBMtaGB9Wi110fv?= =?us-ascii?Q?t49PUaVQaYb9Ggsm0YTLxBbeMAO6oVm+mDH9cjD9ME0HpMxOom1YKkbKQs8l?= =?us-ascii?Q?1MHtXLNWmKynutlBuBCsxJkD1v2qVXlA2VIeSouKg6tgW8Bv8lNB63OB9tlG?= =?us-ascii?Q?SNh3f0H16AJAgSezKpHDLQ2D7vXNMKYAgSL+VJkL/jmh1sQ/QvX4FB/269gk?= =?us-ascii?Q?vuIrLNN7KqeYG+JgcvjPjkGz/BQoYt7EmFZ4SGml3XXcnYI7cIE2bmm7768e?= =?us-ascii?Q?F6Wap+ICr5fVwxHmvl15kdvKTo51IAkroVA8Vmy4KEds2XTMcEtt0VVgYmqj?= =?us-ascii?Q?i/Bexnpk+w8=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH0PR12MB5092.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?OSxp+kll0eNkBhHGcYKmW2AvK5lkawNZCgM6klzVxabSCz9o6mt+dymc/uuk?= =?us-ascii?Q?PzvenUh0FjdmyDiZRQBtHpCFaGAXPlIb/071F2UxGhn/j9De50rdIEcL5n3l?= =?us-ascii?Q?erKhcFDxEiABpiMcK4/aeh6Emh/ISwm85p/+YwvOnZ/MeMM77KaN5a4GmmJc?= =?us-ascii?Q?OtA43fTkCCeWEYwD3KoMR9afJK1txD2fsirT2l4saowLRU8oL0JF5FVpl0yL?= =?us-ascii?Q?tBC0qCSZHTbspnDAxOWVHd2W/Pyk5wMRYj1ITXIZjYuekor0FtAYL3+ubLsP?= =?us-ascii?Q?0LpfGeMnZuWloRWtU1j2tgbzHrfQdR0A5H1D77gOZ/siCdfr0mJjYX5Agj9o?= =?us-ascii?Q?CZ79uzX/AaSi9wl/jA1znTRZ7H8UdhmK7Y1WrFl7ff69K5NlSGtwTf1n08QS?= =?us-ascii?Q?sML7WM6YGdPKPVJt1TjVqaGojRspS1wDEHqZpEr2r+nysvuDjXg6CoC7SY+P?= =?us-ascii?Q?OOyQl5eDyM53XsllLgVk6/BgkgPhJ+tS+cLWnnWTCjzzgkX7K4til0GR6WkO?= =?us-ascii?Q?pvslVp1P4EIwBiWuCyubOv0Tic9H5oMKRIOf+DfpFrbgc7t2q762vunCTOR4?= =?us-ascii?Q?1SvbMD9JpkKiFeYbKmnxFk9uOhYpt+4HgGhLbRKU+pRMGNW6Vg9pujrutC6r?= =?us-ascii?Q?xFEpGz41z+Aw02fhyBOomRVGHEe/YlpeDAe6BpF1rNFUr6JNgs7fcRs8tMqG?= =?us-ascii?Q?KsVoQHCU3MbrMNQtcutkBuK2qsi5pC4DB0F9vZxa4XgjS9uCmNoZieLmW3Gl?= =?us-ascii?Q?5gr5E3Or2mcOMFUistSRlzmoLddsChwfXWzjg3NcO3s/YnYveSipjUgVyACK?= =?us-ascii?Q?2I3mKZmXfmMDEOzN6r25rqFwxF/J5S82IM7qvCm5YuPTyfq/qPHaH8h5A/Z+?= =?us-ascii?Q?HXiAfXxNAOA3Zicdxxv+t0xwHLnxobVnYeojGI10crsM4YcUvYrEI2VQZctE?= =?us-ascii?Q?rMBhwfYseaiNRIA0gpCr1x0gj96sHvdBTQiPMQ38R2Jze+mR+GFVZIpyvmuF?= =?us-ascii?Q?REmptz7lKgQfLa43qoAhqWkaSu8F/c5K2HHyQNNk3HxJpvLkjccjo5ZO+/09?= =?us-ascii?Q?OLymJ06vUxQovYy6L1JPx7RmSXhTv+6lZHrLtTsjuZSRYKMqR4WVYNYYtdGt?= =?us-ascii?Q?oTAxXRNu/2j14bvgdOePiriwWDP+sEgRra1lNrG+d/Qvql3j2rcRpX/4WWqV?= =?us-ascii?Q?M6hfI6Qr87U9bNH53ThPg0lpRjNjtoJ1w1Im/YM29R2CZS5rgQB0uAB57uat?= =?us-ascii?Q?eaotd4JyJ9xq7IsyoTlNveE8FVeUY9OVvyZYzeDhxUo46ZLiOZ/gZ43eMo0F?= =?us-ascii?Q?VcRVAzPKBfcUHmHcrk1yLy5xNiIoxTkcYeTIbVzv9K1yVpmhaRxWZe2Oje0J?= =?us-ascii?Q?xEF6YSEBGV3QgveXv7KL7ESguMJP6ZKaeNbCHklXKXCkXYiUeaQnrDQf2pJD?= =?us-ascii?Q?6wizRJjT/PXHG6bBI86vO84e3ea7pjnYZ4q9OngPYLCFvdTdkGGj01tpODzu?= =?us-ascii?Q?CioREeJwTlA/2FeGvEuQ8lOgDfFxIxL+uXG/E/tNdC7FZEYdHYoSNpE/YRSv?= =?us-ascii?Q?oesmx2sUAf2zMjtW3A/KKT6Z5NZPXfNfOnK8J4dV?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: ec6cabb4-e3a2-4042-9780-08ddc95e00b0 X-MS-Exchange-CrossTenant-AuthSource: CH0PR12MB5092.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Jul 2025 20:26:13.3616 (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: Ulv4dhooxqS0l6Y3n0LjSRA9dWWxCpfUuNCJ9hBFtJFBv84Rw1+ecjxDdNQYIoF7 X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA3PR12MB8802 Content-Transfer-Encoding: quoted-printable X-MailFrom: ianm@nvidia.com X-Mailman-Rule-Hits: nonmember-moderation X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0 Message-ID-Hash: 6TIJCNZYW3QXJINO3BEV57UYHN2G4CFK X-Message-ID-Hash: 6TIJCNZYW3QXJINO3BEV57UYHN2G4CFK X-Mailman-Approved-At: Wed, 23 Jul 2025 07:22:29 -0400 CC: ianm@nvidia.com X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Ian May via Devel Reply-To: Ian May X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1753255429867116600 Content-Type: text/plain; charset="utf-8" Add RelaxNG schema definition for the ACPI EGM memory device configuration. This schema defines the XML structure for configuring extended memory access through ACPI tables. The schema includes: - Device alias for unique identification - PCI device reference for memory source - NUMA node assignment for memory placement Signed-off-by: Ian May --- src/conf/schemas/domaincommon.rng | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/conf/schemas/domaincommon.rng b/src/conf/schemas/domaincom= mon.rng index 2d6e15f144..8501419403 100644 --- a/src/conf/schemas/domaincommon.rng +++ b/src/conf/schemas/domaincommon.rng @@ -6429,6 +6429,22 @@ =20 + + + + + + + + + + + + + + + + @@ -6901,6 +6917,9 @@ + + + --=20 2.43.0 From nobody Mon Sep 8 17:08:17 2025 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 (BodyHash is different from the expected one); 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 1753255509855165.88019481566425; Wed, 23 Jul 2025 00:25:09 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id D7015BFA; Wed, 23 Jul 2025 03:25:08 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id AB9881458; Wed, 23 Jul 2025 03:22:40 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 1428D11BA; Tue, 22 Jul 2025 16:26:22 -0400 (EDT) Received: from NAM12-DM6-obe.outbound.protection.outlook.com (mail-dm6nam12on2049.outbound.protection.outlook.com [40.107.243.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 8E91311C2 for ; Tue, 22 Jul 2025 16:26:20 -0400 (EDT) Received: from CH0PR12MB5092.namprd12.prod.outlook.com (2603:10b6:610:bf::16) by SA3PR12MB8802.namprd12.prod.outlook.com (2603:10b6:806:314::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8943.30; Tue, 22 Jul 2025 20:26:15 +0000 Received: from CH0PR12MB5092.namprd12.prod.outlook.com ([fe80::969b:49e4:6d48:b058]) by CH0PR12MB5092.namprd12.prod.outlook.com ([fe80::969b:49e4:6d48:b058%5]) with mapi id 15.20.8943.029; Tue, 22 Jul 2025 20:26:15 +0000 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=0.2 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, FORGED_SPF_HELO,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_PASS autolearn=no autolearn_force=no version=3.4.4 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=RTaES1L9wj0+m18TVRec/2q/zlAWw/hU9uxOLEHWmzKGbt+N1PUHTKsfcqUAo6r2zoJXgT4dNOhD0VL66yeul6EqfE6daOOkk+wNjJGSX/SElrHkyqYOUzvrrLmQS74G9kcQbPlvbiejxef/usGpkr/9EvNwu47BcTKXdku1zUz29G3BTw904SnhEdHuUEoAxF4cqh6C8GImgBmkSjBSWwDQ8NiNNpdE3edSx3ThHIMha936aVvsp9ToMRai8jkq41ySJp9mxV2SlEGyCy0Oj9fStHyA9bM3XrwHZHawxemzzGiwzAI2y+8Q97jOmPe2wba+l0IQVh1W5IeOLFE73Q== 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=I6FcRvToxp8jEvlTsQhyguIRGhdNBwUQkVbkjYSLnFo=; b=PwIyUtgE8EKU9FXoA8bwxJOrDC1NSWs3llX7l0aW9UOobOhFxAAZFx1Px6bNreatZ/jpeJj7YdpLIEH3U+KnTTQsgoyezKbHCbfqpyyEXJx5iV0agqZweQnxCouhIPbBtjdMn5owtLPFI1ei55O7wsEVKZ4Q6y0RqRgtVi0D35wH2e8qC2gqgwlZ3u+Muk9Ie0W0jvol42zVrwyW2J0/GiR7uvJZVtJLi1En84TQ9h68f+uajrj4JOi+2UN8DGziQNcVcVi0ho6VhmqSuH9ri+pT9CgWNiVr8ydx5l+hark3WrVFZZ5xq8MTAfaiva9F89MrUufDCvCpsx7mvdDKtw== 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=I6FcRvToxp8jEvlTsQhyguIRGhdNBwUQkVbkjYSLnFo=; b=UWNvB7K7rc6GfNcBSLIh+4HDYBPo6GiM5NAeE806v5OIi+XcTPVMUsSWOyzFJ0GPICR/ixk3JT0egcAPyQoxaW+e4fUaq4YtlJW5dff1jXyI4REpjyGjSVKll1ml3GWkvKdSF8C2jrP54RmKHQPEZ58Y8mXyXU7JRPj8yUtFGf25/QabRRgBT2m/2DZ7HORmcxxC2iQC8i8z6a9U6+QxBGtMLnUUKOXUUTUmE9xnnHBoRKmy+9N87b30CYo7BNGfgqG69Sep6n36i6+zqKb4TBAkXx9F1e3UHm/7jh+oryUmxb6M5mIL9J+BpeWQvS6UoAgmtDjG6c8JH/O7VqNUdg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; To: devel@lists.libvirt.org Subject: [RFC PATCH 2/8] conf: Add definitions and XML parsing for ACPI EGM memory device Date: Tue, 22 Jul 2025 15:26:02 -0500 Message-ID: <20250722202609.1823658-3-ianm@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250722202609.1823658-1-ianm@nvidia.com> References: <20250722202609.1823658-1-ianm@nvidia.com> X-ClientProxiedBy: SA0PR11CA0135.namprd11.prod.outlook.com (2603:10b6:806:131::20) To CH0PR12MB5092.namprd12.prod.outlook.com (2603:10b6:610:bf::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH0PR12MB5092:EE_|SA3PR12MB8802:EE_ X-MS-Office365-Filtering-Correlation-Id: 5366e3f9-6173-4a0a-87c8-08ddc95e021e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?V70IIUi0TqEWcNGaN1bvh820K2JRiqWa40cAZerKsOqs5CyUZ3WiBWfYuCxS?= =?us-ascii?Q?PE/yYv7jQ/KmAREVZJx/oLWh3oyCe6nX6K77T+z598D337R/o46EotfbElox?= =?us-ascii?Q?/ly2eOz8p+3uW3tJaQcAwXEkEP0wA7/uL8GHcLaMlNA5vaSko9pXR0SPbwhu?= =?us-ascii?Q?985T1kMBtDL+GrxkV5uf4teMqmvQT54KCyTIO6+zrMQCDwOAboJlrtC8iDmN?= =?us-ascii?Q?JNy1UbLc9VpUkbugKFAknut6mAPKoWAwi76qcUYzzzV1xyK4PSM289IqMdPM?= =?us-ascii?Q?Ser1xJpNYKpW0BFmTaMaDsTEA+6GyFIkdncz//b1c3IAW9nm5mXD+PTWkK+c?= =?us-ascii?Q?R4d7stbuuhH6RHRlN26b9O/ZodKNjQQZlWWBQ4GO2wdEkFyieeN7nBj5QAOm?= =?us-ascii?Q?Jr8s1ZPHhcETkKQoXv1Nu/OZzN+EibC9nqYBJBZVKm5EiCBlCMSM8wV69bs5?= =?us-ascii?Q?4GF2Xor7k2la+JFJ/BHg92nvb/J6u3ijk8cGgtMUArZmKv8CTJ6PGoyjAV8C?= =?us-ascii?Q?JUHzELVW0XXbUBviFKB9+wtGCTYH5zZxz0WjrT0tn6EkBJwSQY5sAZTUvdF2?= =?us-ascii?Q?621joGjQaFhNBPsAAu10p51vTy9ub8WfiEcMBS6pTyJVqEuE2HhMJo/7V+wu?= =?us-ascii?Q?PSK1O758JbUoMqV4nEAzPa7JVyb9hdDmH2Do5H8H0CarrodaU+OswSynITzO?= =?us-ascii?Q?kxUE95K6EfVMZYJ7kSvkvZHcOUv2Nx4ibQzwKaLbqHxY1fYI26TD0PamOwLk?= =?us-ascii?Q?yIn7+H/japTl6XiRMFc9DTadevtaMDnD3nxnbedOSApt4SQt+Mxp/aklFlyM?= =?us-ascii?Q?nqmUnVeI7HWwks7WIoKdxiovQtyrv18nIr0onDSBebPspBT8pipwa83A+FAn?= =?us-ascii?Q?Mf1EkxhxkI3GQcoVvpWnhXUOQHXkzhxC15DQWkzM7LPS0DywU1rJ4JLKU5Kj?= =?us-ascii?Q?sv28N4FxIF7mf0vjn08Az+LsRQUjzlxRtoaw8F4LSvZ1vUOSr1CuRww31VBk?= =?us-ascii?Q?RqsOvOYHkUVSB4ovjTKR8U87Hj+LnPVM8W9xJTzPA/RupRj0gzWRk1cTqW6k?= =?us-ascii?Q?9ac8j3+LssQvLtfVXgpjNKLfEilKtb+BhGLFzWVt8G1EwoVYH+TtLDfnRJQk?= =?us-ascii?Q?agCQjqXssqr1g+fzpIIEt1tbgf2zs7B9v8uPKGMCAF2kozC1BvVFnDPbpdvk?= =?us-ascii?Q?6ytfL3Ep7qpzk27fpSTLcXPKueaauZVVZxVmSg3PJratE17bB19t/XgWphKd?= =?us-ascii?Q?I6H9DwzDR2Pd3pjItmBMY6ih2W3NB42J3046GP3dXIJMFKDLiP8wfbcM1yjR?= =?us-ascii?Q?qk1Kbzbf4U1OYS/3z1LTHeWcjd3686mjNXBMMzenQFSCJHximuEHDA56ABtf?= =?us-ascii?Q?gUCkryZ4BQJkY7/sZvKfqggueDYF0jhKz1Lgcbn0mgUHGjfXe0IW/yHnTZOC?= =?us-ascii?Q?fjzzxqg57jg=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH0PR12MB5092.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?3lGDoN5qyqGiZvDRcqsa54cBfjfsK0pFQ01Q3ZJRKFYBCzJqKdAjDR0sWV6u?= =?us-ascii?Q?7hRsdZQI6u5Yc0HI++qyKu6v/R3Auzl5FjwCslWmQfUr+TXMOoDM2aVhZ/PB?= =?us-ascii?Q?LroXBfIoP+QKyahjKBwguEYE8QArtpGETVO+SI+ny1tHXzXFkTbNIXiX6jx9?= =?us-ascii?Q?mTD2ncJ1hIUUVT7ovvSSMgzSAj/UfgilCog0T+FQnFms10jyCqnGlYG+KAhj?= =?us-ascii?Q?lctUDrTHtEaUBF/0fDnvo+7N0jZCnzHRRzs690cL2lSyB9OeIo5hUMKHOQiv?= =?us-ascii?Q?mX/1+Q/IBE5FGfg3wcEZABS4Qfr17Wm9njSnC5Qx/gMwUydglsXx6o4kL5AC?= =?us-ascii?Q?wTIjTVxtntvrtsaQfzCx9lwDHKw8H5Vzh6MpB1eamazW5vLcXqWm4wpwpAdD?= =?us-ascii?Q?6CezdzDXydZ4rQA61797rfUgQs5fC3myu7/uvFfDrJRflCjbjdkK80HBY6kb?= =?us-ascii?Q?IL340FJHrF6L+MIDL+TsmRFcNYR0ILsrL6tTdQGUPNIuQfUj9+ZL6hyH4wOS?= =?us-ascii?Q?qhhWesvd/m/5cv2J9i5dKtK76quCYKnzMzsU1f0OmF7c2dH34eHLHXWH/GRn?= =?us-ascii?Q?mVLGUxOW4/5kU9srFZHn5zkZ6MLH6GF5zfE91Fn1PGRRBwwEmsZFcvKEVnw5?= =?us-ascii?Q?p49M+Fmu+dbQ2RO6g/FFHb4N78wtBbJtngaFbuQm0KCYGvhRva3MOJlY/whs?= =?us-ascii?Q?ndbAs0QtIZSlVAGk9pk65MLncQglTze6kVs0ugkHtVjie4Hu/fvIlP8FmFVy?= =?us-ascii?Q?kILa8VSvWLyFqmfbsPmzNrwKaG/Cho+oUB9TwN2mzz6v9oMYeHtcS2fKyG3s?= =?us-ascii?Q?URBwzAmvQ3Thhca0H+9sK2UrxVnim8vYypqGmgyE7gIIpJ29oKtM3bHJyGZQ?= =?us-ascii?Q?AhyKU6z0ANlGe9E7CzJ/3DB1z4XJN+opo5QSanc/1inEq3RDv3Pzsjrgz5Tn?= =?us-ascii?Q?D0KsfXqUWRsTNbFsaWbEzje0qEEKCPcW4vMGzk0zDBw8QTH+y/InvQCqKjw+?= =?us-ascii?Q?Ms+TwJsxwd+LRl8sYsw6k3VnzRu8Ezk4yLmFUz6wTcsElRlimS8xGtR0ljLC?= =?us-ascii?Q?VG6SAnO5P8cp8myWlpDZi42ZcQYb5skcifg40rccNfSuXYB8MRodvpxTRLfi?= =?us-ascii?Q?sXwXXKxR7SBItBNz+6F7EX1naYwC9vYs8u184Ive3YW3fSYHCD5qtJbF2xKG?= =?us-ascii?Q?B7fsRSUh7uwxAuSNpemdID8AVZuNvqCfH1h/0KN+lppx8n8bgU2RqeqnB6tA?= =?us-ascii?Q?2Rh0+ODvB5ksWWRNTP6OEj4YBs2p5X2MyQw8XJHVYa0US7t3ZLDyv750/Wat?= =?us-ascii?Q?BBEftY1fbCDDKwOkLVqPZGyQNAwGMPR/gZF6K95C3ctwQsM8WuRcQG7BOfY9?= =?us-ascii?Q?XX6/DCYbBlkogB0y+TnbGclqHzqrqOjyAv1yIFjUZ3NJvcv5hh8GGlO93R1Q?= =?us-ascii?Q?l4iQhkppES7h2ESx11wQW4qo4w6jiixXOs2/BQhK+fWbit1enXP639qLLZ2c?= =?us-ascii?Q?O6vFfQR5XoAiSjT+ZlrbxR9wv+gRP+V+MNQ1touhSWJdt96qkEU1uiUyq9aJ?= =?us-ascii?Q?oQFM47CG0M2hS/mYjlFEIbpKq/blTN+MzZsHrdIu?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5366e3f9-6173-4a0a-87c8-08ddc95e021e X-MS-Exchange-CrossTenant-AuthSource: CH0PR12MB5092.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Jul 2025 20:26:15.7881 (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: YhkPv+5GzhPzKUYQTxaTAHYVtfU/1SICxkLHkLxE77AcAxGQJvS4fXKyELTVJ3Hn X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA3PR12MB8802 Content-Transfer-Encoding: quoted-printable X-MailFrom: ianm@nvidia.com X-Mailman-Rule-Hits: nonmember-moderation X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0 Message-ID-Hash: UCUN5XGDGHXKMSPA2ZNF7VDVDRZJPQJW X-Message-ID-Hash: UCUN5XGDGHXKMSPA2ZNF7VDVDRZJPQJW X-Mailman-Approved-At: Wed, 23 Jul 2025 07:22:29 -0400 CC: ianm@nvidia.com X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Ian May via Devel Reply-To: Ian May X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1753255510787116600 Content-Type: text/plain; charset="utf-8" Implement the core data structures and XML parsing for ACPI EGM memory device support. This includes: - New device type VIR_DOMAIN_DEVICE_EGM - Data structure virDomainAcpiEgmDef for device configuration - XML parsing and formatting functions - Integration with existing device handling infrastructure Signed-off-by: Ian May --- src/ch/ch_domain.c | 1 + src/conf/domain_conf.c | 102 +++++++++++++++++++++++++++++++++ src/conf/domain_conf.h | 11 ++++ src/conf/domain_postparse.c | 8 +++ src/conf/domain_validate.c | 1 + src/conf/virconftypes.h | 2 + src/libxl/libxl_driver.c | 6 ++ src/lxc/lxc_driver.c | 6 ++ src/qemu/qemu_domain.c | 2 + src/qemu/qemu_domain_address.c | 2 + src/qemu/qemu_driver.c | 3 + src/qemu/qemu_hotplug.c | 5 ++ src/qemu/qemu_postparse.c | 1 + src/test/test_driver.c | 4 ++ 14 files changed, 154 insertions(+) diff --git a/src/ch/ch_domain.c b/src/ch/ch_domain.c index 7231fdc49f..3c0ad0c513 100644 --- a/src/ch/ch_domain.c +++ b/src/ch/ch_domain.c @@ -185,6 +185,7 @@ chValidateDomainDeviceDef(const virDomainDeviceDef *dev, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_EGM: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("Cloud-Hypervisor doesn't support '%1$s' device"), virDomainDeviceTypeToString(dev->type)); diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index ba0d4a7b12..5f1854d89a 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -342,6 +342,7 @@ VIR_ENUM_IMPL(virDomainDevice, "audio", "crypto", "pstore", + "egm", ); =20 VIR_ENUM_IMPL(virDomainDiskDevice, @@ -3623,6 +3624,17 @@ void virDomainPstoreDefFree(virDomainPstoreDef *def) g_free(def); } =20 +void virDomainAcpiEgmDefFree(virDomainAcpiEgmDef *def) +{ + if (!def) + return; + + g_free(def->alias); + g_free(def->pciDev); + virDomainDeviceInfoClear(&def->info); + g_free(def); +} + void virDomainDeviceDefFree(virDomainDeviceDef *def) { if (!def) @@ -3710,6 +3722,9 @@ void virDomainDeviceDefFree(virDomainDeviceDef *def) case VIR_DOMAIN_DEVICE_PSTORE: virDomainPstoreDefFree(def->data.pstore); break; + case VIR_DOMAIN_DEVICE_EGM: + virDomainAcpiEgmDefFree(def->data.egm); + break; case VIR_DOMAIN_DEVICE_LAST: case VIR_DOMAIN_DEVICE_NONE: break; @@ -4688,6 +4703,8 @@ virDomainDeviceGetInfo(const virDomainDeviceDef *devi= ce) return &device->data.crypto->info; case VIR_DOMAIN_DEVICE_PSTORE: return &device->data.pstore->info; + case VIR_DOMAIN_DEVICE_EGM: + return &device->data.egm->info; =20 /* The following devices do not contain virDomainDeviceInfo */ case VIR_DOMAIN_DEVICE_LEASE: @@ -4796,6 +4813,9 @@ virDomainDeviceSetData(virDomainDeviceDef *device, case VIR_DOMAIN_DEVICE_PSTORE: device->data.pstore =3D devicedata; break; + case VIR_DOMAIN_DEVICE_EGM: + device->data.egm =3D devicedata; + break; case VIR_DOMAIN_DEVICE_NONE: case VIR_DOMAIN_DEVICE_LAST: break; @@ -5021,6 +5041,13 @@ virDomainDeviceInfoIterateFlags(virDomainDef *def, return rc; } =20 + device.type =3D VIR_DOMAIN_DEVICE_EGM; + if (def->egm) { + device.data.egm =3D def->egm; + if ((rc =3D cb(def, &device, &def->egm->info, opaque)) !=3D 0) + return rc; + } + /* If the flag below is set, make sure @cb can handle @info being NULL= */ if (iteratorFlags & DOMAIN_DEVICE_ITERATE_MISSING_INFO) { device.type =3D VIR_DOMAIN_DEVICE_GRAPHICS; @@ -5081,6 +5108,7 @@ virDomainDeviceInfoIterateFlags(virDomainDef *def, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_EGM: break; } #endif @@ -14506,6 +14534,40 @@ virDomainPstoreDefParseXML(virDomainXMLOption *xml= opt, } =20 =20 +static virDomainAcpiEgmDef * +virDomainAcpiEgmDefParseXML(virDomainXMLOption *xmlopt, + xmlNodePtr node, + xmlXPathContextPtr ctxt, + unsigned int flags) +{ + g_autoptr(virDomainAcpiEgmDef) def =3D NULL; + VIR_XPATH_NODE_AUTORESTORE(ctxt) + int rc; + xmlNodePtr alias =3D NULL; + + def =3D g_new0(virDomainAcpiEgmDef, 1); + + ctxt->node =3D node; + + alias =3D virXPathNode("./alias", ctxt); + if (!alias) + return NULL; + def->alias =3D virXMLPropString(alias, "name"); + def->pciDev =3D virXPathString("string(./pciDev)", ctxt); + rc =3D virXPathInt("string(./numaNode)", ctxt, &def->numaNode); + if (rc < 0 || def->numaNode < 0) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("invalid NUMA node in target")); + return NULL; + } + + if (virDomainDeviceInfoParseXML(xmlopt, node, ctxt, &def->info, flags)= < 0) + return NULL; + + return g_steal_pointer(&def); +} + + static int virDomainDeviceDefParseType(const char *typestr, virDomainDeviceType *type) @@ -14691,6 +14753,12 @@ virDomainDeviceDefParse(const char *xmlStr, return NULL; } break; + case VIR_DOMAIN_DEVICE_EGM: + if (!(dev->data.egm =3D virDomainAcpiEgmDefParseXML(xmlopt, node, + ctxt, flags)))= { + return NULL; + } + break; case VIR_DOMAIN_DEVICE_NONE: case VIR_DOMAIN_DEVICE_LAST: break; @@ -20104,6 +20172,22 @@ virDomainDefParseXML(xmlXPathContextPtr ctxt, } VIR_FREE(nodes); =20 + if ((n =3D virXPathNodeSet("./devices/acpiEgmMemory", ctxt, &nodes)) <= 0) + return NULL; + + if (n > 1) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("only a single egm device is supported")); + return NULL; + } + + if (n > 0) { + if (!(def->egm =3D virDomainAcpiEgmDefParseXML(xmlopt, nodes[0], + ctxt, flags))) + return NULL; + } + VIR_FREE(nodes); + /* analysis of the user namespace mapping */ if ((n =3D virXPathNodeSet("./idmap/uid", ctxt, &nodes)) < 0) return NULL; @@ -22576,6 +22660,7 @@ virDomainDefCheckABIStabilityFlags(virDomainDef *sr= c, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_EGM: break; } #endif @@ -28844,6 +28929,19 @@ virDomainPstoreDefFormat(virBuffer *buf, return 0; } =20 +static int +virDomainAcpiEgmDefFormat(virBuffer *buf, + virDomainAcpiEgmDef *egm) +{ + g_auto(virBuffer) childBuf =3D VIR_BUFFER_INIT_CHILD(buf); + + virBufferAsprintf(&childBuf, "\n", egm->alias); + virBufferAsprintf(&childBuf, "%s\n", egm->pciDev); + virBufferAsprintf(&childBuf, "%d\n", egm->numaNod= e); + + virXMLFormatElement(buf, "acpiEgmMemory", NULL, &childBuf); + return 0; +} =20 int virDomainDefFormatInternal(virDomainDef *def, @@ -29328,6 +29426,9 @@ virDomainDefFormatInternalSetRootName(virDomainDef = *def, if (def->pstore) virDomainPstoreDefFormat(buf, def->pstore, flags); =20 + if (def->egm) + virDomainAcpiEgmDefFormat(buf, def->egm); + virBufferAdjustIndent(buf, -2); virBufferAddLit(buf, "\n"); =20 @@ -29488,6 +29589,7 @@ virDomainDeviceIsUSB(virDomainDeviceDef *dev, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_EGM: break; } =20 diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 6008ec66d3..5132c6587b 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -88,6 +88,7 @@ typedef enum { VIR_DOMAIN_DEVICE_AUDIO, VIR_DOMAIN_DEVICE_CRYPTO, VIR_DOMAIN_DEVICE_PSTORE, + VIR_DOMAIN_DEVICE_EGM, =20 VIR_DOMAIN_DEVICE_LAST } virDomainDeviceType; @@ -122,6 +123,7 @@ struct _virDomainDeviceDef { virDomainAudioDef *audio; virDomainCryptoDef *crypto; virDomainPstoreDef *pstore; + virDomainAcpiEgmDef *egm; } data; }; =20 @@ -3100,6 +3102,12 @@ struct _virDomainPstoreDef { virDomainDeviceInfo info; }; =20 +struct _virDomainAcpiEgmDef { + char *alias; + char *pciDev; + int numaNode; + virDomainDeviceInfo info; +}; =20 #define SCSI_SUPER_WIDE_BUS_MAX_CONT_UNIT 64 #define SCSI_WIDE_BUS_MAX_CONT_UNIT 16 @@ -3282,6 +3290,7 @@ struct _virDomainDef { virDomainIOMMUDef *iommu; virDomainVsockDef *vsock; virDomainPstoreDef *pstore; + virDomainAcpiEgmDef *egm; =20 void *namespaceData; virXMLNamespace ns; @@ -3728,6 +3737,8 @@ void virDomainCryptoDefFree(virDomainCryptoDef *def); G_DEFINE_AUTOPTR_CLEANUP_FUNC(virDomainCryptoDef, virDomainCryptoDefFree); void virDomainPstoreDefFree(virDomainPstoreDef *def); G_DEFINE_AUTOPTR_CLEANUP_FUNC(virDomainPstoreDef, virDomainPstoreDefFree); +void virDomainAcpiEgmDefFree(virDomainAcpiEgmDef *def); +G_DEFINE_AUTOPTR_CLEANUP_FUNC(virDomainAcpiEgmDef, virDomainAcpiEgmDefFree= ); void virDomainNetTeamingInfoFree(virDomainNetTeamingInfo *teaming); G_DEFINE_AUTOPTR_CLEANUP_FUNC(virDomainNetTeamingInfo, virDomainNetTeaming= InfoFree); void virDomainNetPortForwardFree(virDomainNetPortForward *pf); diff --git a/src/conf/domain_postparse.c b/src/conf/domain_postparse.c index a07ec8d94e..4933259129 100644 --- a/src/conf/domain_postparse.c +++ b/src/conf/domain_postparse.c @@ -85,6 +85,13 @@ virDomainDefPostParseMemory(virDomainDef *def, return -1; } =20 + /* if we have a Grace EGM device, setup memory backing */ + if (def->egm) { + def->mem.source =3D VIR_DOMAIN_MEMORY_SOURCE_FILE; + def->mem.access =3D VIR_DOMAIN_MEMORY_ACCESS_SHARED; + def->mem.allocation =3D VIR_DOMAIN_MEMORY_ALLOCATION_IMMEDIATE; + } + return 0; } =20 @@ -760,6 +767,7 @@ virDomainDeviceDefPostParseCommon(virDomainDeviceDef *d= ev, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_EGM: ret =3D 0; break; =20 diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c index 8f7259a0e1..88e61fb878 100644 --- a/src/conf/domain_validate.c +++ b/src/conf/domain_validate.c @@ -3317,6 +3317,7 @@ virDomainDeviceDefValidateInternal(const virDomainDev= iceDef *dev, case VIR_DOMAIN_DEVICE_PSTORE: return virDomainPstoreDefValidate(dev->data.pstore); =20 + case VIR_DOMAIN_DEVICE_EGM: case VIR_DOMAIN_DEVICE_LEASE: case VIR_DOMAIN_DEVICE_WATCHDOG: case VIR_DOMAIN_DEVICE_HUB: diff --git a/src/conf/virconftypes.h b/src/conf/virconftypes.h index 8c6fcdbeaa..97ddc3de2a 100644 --- a/src/conf/virconftypes.h +++ b/src/conf/virconftypes.h @@ -268,6 +268,8 @@ typedef struct _virDomainCryptoDef virDomainCryptoDef; =20 typedef struct _virDomainPstoreDef virDomainPstoreDef; =20 +typedef struct _virDomainAcpiEgmDef virDomainAcpiEgmDef; + typedef struct _virDomainWatchdogDef virDomainWatchdogDef; =20 typedef struct _virDomainXMLOption virDomainXMLOption; diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c index 308c0372aa..5e56327439 100644 --- a/src/libxl/libxl_driver.c +++ b/src/libxl/libxl_driver.c @@ -3492,6 +3492,7 @@ libxlDomainAttachDeviceLive(libxlDriverPrivate *drive= r, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_EGM: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("device type '%1$s' cannot be attached"), virDomainDeviceTypeToString(dev->type)); @@ -3596,6 +3597,7 @@ libxlDomainAttachDeviceConfig(virDomainDef *vmdef, vi= rDomainDeviceDef *dev) case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_EGM: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("persistent attach of device is not supported= ")); return -1; @@ -3965,6 +3967,7 @@ libxlDomainDetachDeviceLive(libxlDriverPrivate *drive= r, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_EGM: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("device type '%1$s' cannot be detached"), virDomainDeviceTypeToString(dev->type)); @@ -4056,6 +4059,7 @@ libxlDomainDetachDeviceConfig(virDomainDef *vmdef, vi= rDomainDeviceDef *dev) case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_EGM: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("persistent detach of device is not supported= ")); return -1; @@ -4119,6 +4123,7 @@ libxlDomainUpdateDeviceLive(virDomainObj *vm, virDoma= inDeviceDef *dev) case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_EGM: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("device type '%1$s' cannot be updated"), virDomainDeviceTypeToString(dev->type)); @@ -4182,6 +4187,7 @@ libxlDomainUpdateDeviceConfig(virDomainDef *vmdef, vi= rDomainDeviceDef *dev) case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_EGM: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("persistent update of device is not supported= ")); return -1; diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c index 80cf07d2e5..46f65ef630 100644 --- a/src/lxc/lxc_driver.c +++ b/src/lxc/lxc_driver.c @@ -3020,6 +3020,7 @@ lxcDomainAttachDeviceConfig(virDomainDef *vmdef, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_EGM: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("persistent attach of device is not supported")); break; @@ -3086,6 +3087,7 @@ lxcDomainUpdateDeviceConfig(virDomainDef *vmdef, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_EGM: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("persistent update of device is not supported")); break; @@ -3168,6 +3170,7 @@ lxcDomainDetachDeviceConfig(virDomainDef *vmdef, case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_EGM: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("persistent detach of device is not supported")); break; @@ -3270,6 +3273,7 @@ lxcDomainAttachDeviceMknodHelper(pid_t pid G_GNUC_UNU= SED, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_EGM: virReportError(VIR_ERR_INTERNAL_ERROR, _("Unexpected device type %1$d"), data->def->type); @@ -3946,6 +3950,7 @@ lxcDomainAttachDeviceLive(virLXCDriver *driver, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_EGM: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("device type '%1$s' cannot be attached"), virDomainDeviceTypeToString(dev->type)); @@ -4364,6 +4369,7 @@ lxcDomainDetachDeviceLive(virLXCDriver *driver, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_EGM: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("device type '%1$s' cannot be detached"), virDomainDeviceTypeToString(dev->type)); diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 54eda9e12f..4414fd7289 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -8830,6 +8830,7 @@ qemuDomainPrepareChardevSourceOne(virDomainDeviceDef = *dev, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_EGM: break; } =20 @@ -10720,6 +10721,7 @@ qemuDomainDeviceBackendChardevForeachOne(virDomainD= eviceDef *dev, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_EGM: /* no chardev backend */ break; } diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c index 96a9ca9b14..f204f595d4 100644 --- a/src/qemu/qemu_domain_address.c +++ b/src/qemu/qemu_domain_address.c @@ -471,6 +471,7 @@ qemuDomainDeviceSupportZPCI(virDomainDeviceDef *device) case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_EGM: break; =20 case VIR_DOMAIN_DEVICE_NONE: @@ -1013,6 +1014,7 @@ qemuDomainDeviceCalculatePCIConnectFlags(virDomainDev= iceDef *dev, break; =20 case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_EGM: return pciFlags; =20 /* These devices don't ever connect with PCI */ diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index a0f770b053..a0375a28e0 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -6906,6 +6906,7 @@ qemuDomainAttachDeviceConfig(virDomainDef *vmdef, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_EGM: case VIR_DOMAIN_DEVICE_LAST: virReportError(VIR_ERR_OPERATION_UNSUPPORTED, _("persistent attach of device '%1$s' is not suppo= rted"), @@ -7125,6 +7126,7 @@ qemuDomainDetachDeviceConfig(virDomainDef *vmdef, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_EGM: case VIR_DOMAIN_DEVICE_LAST: virReportError(VIR_ERR_OPERATION_UNSUPPORTED, _("persistent detach of device '%1$s' is not suppor= ted"), @@ -7251,6 +7253,7 @@ qemuDomainUpdateDeviceConfig(virDomainDef *vmdef, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_EGM: case VIR_DOMAIN_DEVICE_LAST: virReportError(VIR_ERR_OPERATION_UNSUPPORTED, _("persistent update of device '%1$s' is not suppor= ted"), diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index e9568af125..e0573d2eaf 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -3563,6 +3563,7 @@ qemuDomainAttachDeviceLive(virDomainObj *vm, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_EGM: case VIR_DOMAIN_DEVICE_LAST: virReportError(VIR_ERR_OPERATION_UNSUPPORTED, _("live attach of device '%1$s' is not supported"), @@ -5533,6 +5534,7 @@ qemuDomainRemoveAuditDevice(virDomainObj *vm, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_EGM: case VIR_DOMAIN_DEVICE_LAST: /* libvirt doesn't yet support detaching these devices */ break; @@ -5638,6 +5640,7 @@ qemuDomainRemoveDevice(virQEMUDriver *driver, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_EGM: case VIR_DOMAIN_DEVICE_LAST: virReportError(VIR_ERR_OPERATION_UNSUPPORTED, _("don't know how to remove a %1$s device"), @@ -6540,6 +6543,7 @@ qemuDomainDetachDeviceLive(virDomainObj *vm, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_EGM: case VIR_DOMAIN_DEVICE_LAST: virReportError(VIR_ERR_OPERATION_UNSUPPORTED, _("live detach of device '%1$s' is not supported"), @@ -7531,6 +7535,7 @@ qemuDomainUpdateDeviceLive(virDomainObj *vm, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_EGM: case VIR_DOMAIN_DEVICE_LAST: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("live update of device '%1$s' is not supported"), diff --git a/src/qemu/qemu_postparse.c b/src/qemu/qemu_postparse.c index 9c2427970d..ae60ca02e8 100644 --- a/src/qemu/qemu_postparse.c +++ b/src/qemu/qemu_postparse.c @@ -959,6 +959,7 @@ qemuDomainDeviceDefPostParse(virDomainDeviceDef *dev, case VIR_DOMAIN_DEVICE_RNG: case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: + case VIR_DOMAIN_DEVICE_EGM: ret =3D 0; break; =20 diff --git a/src/test/test_driver.c b/src/test/test_driver.c index 25335d9002..2e1048686c 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -10460,6 +10460,7 @@ testDomainAttachDeviceLive(virDomainObj *vm, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_EGM: case VIR_DOMAIN_DEVICE_LAST: virReportError(VIR_ERR_OPERATION_UNSUPPORTED, _("live attach of device '%1$s' is not supported"), @@ -10603,6 +10604,7 @@ testDomainUpdateDevice(virDomainDef *vmdef, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_EGM: case VIR_DOMAIN_DEVICE_LAST: virReportError(VIR_ERR_OPERATION_UNSUPPORTED, _("persistent update of device '%1$s' is not suppor= ted"), @@ -10975,6 +10977,7 @@ testDomainRemoveDevice(testDriver *driver, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_EGM: case VIR_DOMAIN_DEVICE_LAST: virReportError(VIR_ERR_OPERATION_UNSUPPORTED, _("live detach of device '%1$s' is not supported"), @@ -11046,6 +11049,7 @@ testDomainDetachDeviceLive(testDriver *driver, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_EGM: case VIR_DOMAIN_DEVICE_LAST: virReportError(VIR_ERR_OPERATION_UNSUPPORTED, _("live detach of device '%1$s' is not supported"), --=20 2.43.0 From nobody Mon Sep 8 17:08:17 2025 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 (BodyHash is different from the expected one); 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 1753255452279293.56430643904923; Wed, 23 Jul 2025 00:24:12 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 5908D10F2; Wed, 23 Jul 2025 03:24:11 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id E6D51C03; Wed, 23 Jul 2025 03:22:37 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id D744F11BD; Tue, 22 Jul 2025 16:26:20 -0400 (EDT) Received: from NAM12-DM6-obe.outbound.protection.outlook.com (mail-dm6nam12on2049.outbound.protection.outlook.com [40.107.243.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 6AD83BB3 for ; Tue, 22 Jul 2025 16:26:20 -0400 (EDT) Received: from CH0PR12MB5092.namprd12.prod.outlook.com (2603:10b6:610:bf::16) by SA3PR12MB8802.namprd12.prod.outlook.com (2603:10b6:806:314::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8943.30; Tue, 22 Jul 2025 20:26:18 +0000 Received: from CH0PR12MB5092.namprd12.prod.outlook.com ([fe80::969b:49e4:6d48:b058]) by CH0PR12MB5092.namprd12.prod.outlook.com ([fe80::969b:49e4:6d48:b058%5]) with mapi id 15.20.8943.029; Tue, 22 Jul 2025 20:26:18 +0000 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=0.2 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, FORGED_SPF_HELO,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_PASS autolearn=no autolearn_force=no version=3.4.4 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=nATFbK/eswzI1NiY6vhpmydf5wAx34GlExswA1UC+9fMRdD2FEHqN4qkIIxRxdvfpqNRyM6NTrwrmWfyzFkJbri8vBlhh9Enz8dcJ5VtWO4JOuetg2aig+9Z+RRJu0TzAC6G3TXTXnMsON02YdSaBIUWW59Fy3+8IY0if8WtavEml8+h2hZ0H7OXMMxgvlM1roabjQXjJgeANKtJP0Ee6+3b+AVCwBbLhQcmkx1JOHEVagfBjoVd3ObZh5Px7l7JQSGhYQbPpq3SP2Id0CzZdHxFIR4N79SKOjRmI4WBMTXvJeS5jbIrroZLhQEfTfG/NLmrFlLH4J40+OSIK4a51A== 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=XQ67CeegrNBQTxVhZQRyJBRbArT0S02dr/YAMSbaT1A=; b=Ue44dLGj91JpIJdBrftStINFqmkCc11QdjmOXtYixUNIShYMNWXvaHaUr0dw3E9hFc6RuTaS+3EvTP98bpRuIwX8BnqqJ8fg4Y3NmzkEpB4Io/d2j0LamIRhicMnyXvvb5knn/Lywuugl+1tupDiG/STpHg/LG6SBqmF8TIUBbOcBQpM8T57MZvZovzvGox2KFL+lVkV9wSS3h40tecA+MHjXdet3VruwM/Rb8oxLa1doBLTrvNK3ZLoFx3tQevpfduJswjLH7PfoUepm0Ek6xXhtXKkt8I/b9ImsD49bRNPidQHauS4B5CnZqRl0yMqz+Pkwojp4icrptjxB27mIg== 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=XQ67CeegrNBQTxVhZQRyJBRbArT0S02dr/YAMSbaT1A=; b=fKItroHIKNlMjQ4n1oaTdPFCymxbuZcOV2h2LP7YYJnYB9XfCAc3LQVeV2LiFfUmsRpzT6gMaNUi7eq+Hm4H1Vz0NQ7jx/T9xEJb0B9jEdGLRzkIqEkZ9mL+WOr3aAq+PzcbHlIa29qrxKy7hrPQPmVPRFOse6DSOoyqv20PlvbOxTbjeb5ndXBQNdetEev1ESiiRatJZcSjZBeNDUxWyiLbA+n+euJa94Evpentt4LkfI3LzguxPp2Gx0/2DAs2qTtPExmKnju1k0L7ZjCwwngcMYeNmbiodsMKq8qRMuVrxMDklp3MAZeoDgret278jMa81UDBimWyPk6zb4tFfQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; To: devel@lists.libvirt.org Subject: [RFC PATCH 3/8] qemu: Add capability detection for ACPI EGM memory device Date: Tue, 22 Jul 2025 15:26:03 -0500 Message-ID: <20250722202609.1823658-4-ianm@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250722202609.1823658-1-ianm@nvidia.com> References: <20250722202609.1823658-1-ianm@nvidia.com> X-ClientProxiedBy: SA0PR11CA0137.namprd11.prod.outlook.com (2603:10b6:806:131::22) To CH0PR12MB5092.namprd12.prod.outlook.com (2603:10b6:610:bf::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH0PR12MB5092:EE_|SA3PR12MB8802:EE_ X-MS-Office365-Filtering-Correlation-Id: 9e741d02-d3aa-4362-098b-08ddc95e037f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?TikGoRk4S90odbtb8rqdJYNpns/270ZbAOjcqRczJ4v8sBaKrVFl1ACjwVrL?= =?us-ascii?Q?uIGSRKlUZSW7QFZ9CUyynu0iwS1khwiyQxp6JzYGn48FZ0ONAKGVcXuBL88V?= =?us-ascii?Q?z0g5nrtSyAmRPiU36qQm1XuPV/JjJsmLNgu+9MPPQOl4Ai99w3FsMZmwKmvw?= =?us-ascii?Q?mfYwSRBnk/jM1lSEj3Z81hf5DngoSo/4Yi4At/AqUM+E2K2/dWYhM4EPaZsJ?= =?us-ascii?Q?xLsnv+yiBixPn26mHG7ub9+WsdXGLYiQeqmSQpSqHrnKlTnimYyR1a0iF/Ke?= =?us-ascii?Q?sHjU5kvzxHVQqBHP0G8ib/kMzivVSPESE2w7khJ2BU9mnqDBo+340JHc+w6c?= =?us-ascii?Q?rTJ/y1L6AuqVXl08qmWBd/3rVGIM/Me0v2Q7AAv9V/BBHuOrk+H0jwnNG6MT?= =?us-ascii?Q?64dfOX8N1+AW17dK9xrjZAFcmcqh/kjDXopxef2ZrwI0Si09qEIjjr1jSQNt?= =?us-ascii?Q?coFVDTvX4P+gGLE5/S4mMgczt77ly38dq2LCtzCoioaDiQ2YXs5Z0Gvcu0UZ?= =?us-ascii?Q?emDhnJv/MyNC/uryIscZYBzaRxy5DiZccpXCvbSD7xl60UUJK5xjmMXc478X?= =?us-ascii?Q?LtNQ7WGGxjH5PaTFR301XS+WOSeeanMyAvNb8tQRFaK+/mLNNgH6sYQKol12?= =?us-ascii?Q?OxCJY3q8TNzsOFkf6Y9ToG2jUvx4E7VkC/D8ySucLQRolx/f4CsNc9Xpm5QD?= =?us-ascii?Q?8eWeJJ1Jz+YVQeBtdF6b0jF+6AzRA0521GpQW7A1bxD77bpPBDg2oB7nHuLv?= =?us-ascii?Q?UaPo5RmAU+IUzFLaabax60v+Kh+g8HSYs164XkddH/Lze8H/rCDZsXBCRDjU?= =?us-ascii?Q?SH6eie4EHiEVY+JKQwLyxGRWakFI12JwME+JFfBasNIpDIoQboj45C6mjWiz?= =?us-ascii?Q?1SbamDqbUh1fMCzigQwu/1OjDuJ5bJFhj7Qt+oAyGc8ZQmIeqCSC2GIcQ3lv?= =?us-ascii?Q?Hf7niN+V8JDS7A0ZKk6Xrt6Roo8j4EIYoZoj3mNtgLdVia1qJa+N2HuMtbaO?= =?us-ascii?Q?+i8Ra4aMFBALaJ2NFoSj+F7KgA1p7M0raExZ5E1+x/CRGAH/fY3yPgmeF3Ti?= =?us-ascii?Q?1PMZWAxKzHTCJH6HnJD7SS+RzWpmOa59L1HD3AZjkifdCCM1UHmV9XMoR3ck?= =?us-ascii?Q?6kIHGwjrhlx6P9BMeU5rg8Y+mxE1mIB8jdxMVTDQJ1FpSbknVhKcbfoWJgvV?= =?us-ascii?Q?3kcNf2kJ5dIAJRI2Jm7Bt71De3SxGRL6QhG7Gka+l8KZ7thBkQ/If3rm1HL8?= =?us-ascii?Q?qJYzUeQF6eGrnU210pqP0IFL5GOrAPHBUgG04gKshrA2nIsHVaQm6eOV1vl+?= =?us-ascii?Q?PmFnvtTAJ00KjOxTkiBqejjuhKooqVVg1MGklbacYwfN8rU55ADifuLYJDr/?= =?us-ascii?Q?PmIOyUgYhXpb0cQ1erA58Zz6l5Aso3BSOzIqrCnQor+dlltmfZG3TJ5+m9QT?= =?us-ascii?Q?t8Csm2Y3pm8=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH0PR12MB5092.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?elIoHgsdVy4+9QDsgbVw5uYAQvpekQbe1j+M6MENVD5M0qc1dRsqbdp+G6v6?= =?us-ascii?Q?lfd04M6ab7fX5Jtkvsxk9P2F64EPb8YlVKsm0Me6jKDTE+yzN87T9ddU89MK?= =?us-ascii?Q?tlpvrF0S0xmIwWHCBr88TPPfv1qHdO1hniFfl8H6Z6iFt5CWFV5C1Ri+sil8?= =?us-ascii?Q?cLtJIe+uu9vIK6XpXxBZa8qQs40PZHzArddJdaCwfIvE98j9A6CKcSDwgvCo?= =?us-ascii?Q?O9XkZ0Ik23UTSSaU0nP2HbHh7oh7oKUG3kwgHTpui+lvUOxeK/pHkeii8YCQ?= =?us-ascii?Q?fmLqo8/zTD/ds3o/rn1L5du9UF/Ms1L53ODkqH6vNFq37zP6iOaau9eXKQHd?= =?us-ascii?Q?gzlwx8ZmQD/Iws8OL896+qn6TlrJszjytpL/mUuIHcpHr7Q37kCchoxCh5WS?= =?us-ascii?Q?G8xkJcMgQBhmU/OnxfC6Y31SKJuG5cdOAG+aouRUT0mGT680upTIAeXmoxd+?= =?us-ascii?Q?nb1RtuewJphW8rget3VbHJUJ56Ed9z+lOswRoSI3n5IKXzR1oFN+c3A9KwOM?= =?us-ascii?Q?QAH993pJ5DqhV6xQKJxOZ8o2FyRjTPDWQh6g5LG86XC+rSKi89ny0k1jiHmX?= =?us-ascii?Q?frVA0qGpnasIea4FDmIV5GWxO0E6qqLDukRGRKJlZq1UGJYujbuLWg5VVVxo?= =?us-ascii?Q?g/q2geHj30v8i7b6feksl1XiPHgJHFe+hRLEPD3o1fvqrBxT+LrJp1BBemiz?= =?us-ascii?Q?/tyv9gD2VLJBn3wJkJxxzyfwVngS1Hv9zDAqMdT97NHMOtvfLDRHQ4j4DPUU?= =?us-ascii?Q?Lfbj0VRvtOxKB4OshdJ0/lx9LkMxBdLTE2jVpgo7wEX2TDY0WOhdCFJLsJtu?= =?us-ascii?Q?1Y7FxNm/yKRrRnINaBKQGTVWpbKnkFmI1Owz8dHA6CCoG2hAIhMdqzdIxcWC?= =?us-ascii?Q?EB3Z6YBJbpKFc0Ob8g8Yal/z5bwX4nXm/97S2ftM/ShhI9JUXnqmx7w43NxQ?= =?us-ascii?Q?fNTgjOHHpw43mf67Is3ubRCl9fwzbca5bD3lLYE5GNx7xpURnCBXojPaYC86?= =?us-ascii?Q?xU51OHriNT1R9oPnGR/rjRGLRGf3sv5j2eNQ0XZ4BNf0OSrhUUriFQmokS+4?= =?us-ascii?Q?yFRFIr/VVInxsguq4TLuE1hYC8sjtEbzApPXE4q+ZuGxYjCqbnsDOKU+Uf2o?= =?us-ascii?Q?SiAHW21IEq/dauWmFukfBtmxi9O6CxkrBhxfhVMupfe9tPUgc/QN0/QVxoPc?= =?us-ascii?Q?bPYTFmzpyazloOVxtcy/QiSd9KnF4T1fVuuh199v7NMMLtfHPy1CnizQj9fl?= =?us-ascii?Q?cjW8++zHlRySOcH7fcpD3fYyi/+YBMgJY7lak3dulDtAVKAc5DbQxypnaBm4?= =?us-ascii?Q?fiAAf7ckcrs+lxSvSWRuDku6fCz5I1VoQcypwvXqgIJ7jXIplSkrj4fxC9OG?= =?us-ascii?Q?qJKbyzJGZo1zBaOK0XhDQZda6nMHn6oMI0stW/45UBH769KJUxHr5/M4VITu?= =?us-ascii?Q?5D5ioM0pkA/j+CQgklwuQUIHCpFqMs8K1CrZWIvwQ9hTtGaqHdr4IgV6XN9t?= =?us-ascii?Q?SQSuQttwcEtfoie+lOBSyE8W1ZzX5ZjpVjrAYxvLkbM8dwPF2IwnQOUdPuoO?= =?us-ascii?Q?Uqb0i1c04uYiJKdy8sZQ96T3Np1VpavL7bsbcuku?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9e741d02-d3aa-4362-098b-08ddc95e037f X-MS-Exchange-CrossTenant-AuthSource: CH0PR12MB5092.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Jul 2025 20:26:18.0979 (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: dqsqBIafXp7ajW9nZ4YbTDSVV1YuOId1BRF8ly1t5uUw9uJ2zdn1gdNz6Vro+ZJI X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA3PR12MB8802 Content-Transfer-Encoding: quoted-printable X-MailFrom: ianm@nvidia.com X-Mailman-Rule-Hits: nonmember-moderation X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0 Message-ID-Hash: EGELIH5DJO4TYRTZETX4WZCDJ32D6KR5 X-Message-ID-Hash: EGELIH5DJO4TYRTZETX4WZCDJ32D6KR5 X-Mailman-Approved-At: Wed, 23 Jul 2025 07:22:29 -0400 CC: ianm@nvidia.com X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Ian May via Devel Reply-To: Ian May X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1753255454167116600 Content-Type: text/plain; charset="utf-8" Add QEMU capability detection for the ACPI EGM memory device feature. This allows libvirt to determine if the QEMU binary supports the required functionality before attempting to use it. The capability is exposed through the QEMU device type 'acpi-egm-memory' and is used to validate device configuration and command line generation. Signed-off-by: Ian May --- src/qemu/qemu_capabilities.c | 2 ++ src/qemu/qemu_capabilities.h | 1 + 2 files changed, 3 insertions(+) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index b02f8e7a01..15b4461831 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -741,6 +741,7 @@ VIR_ENUM_IMPL(virQEMUCaps, "amd-iommu", /* QEMU_CAPS_AMD_IOMMU */ "amd-iommu.pci-id", /* QEMU_CAPS_AMD_IOMMU_PCI_ID */ "usb-bot", /* QEMU_CAPS_DEVICE_USB_BOT */ + "acpi-egm-memory", /* QEMU_CAPS_DEVICE_ACPI_EGM_MEMORY */ ); =20 =20 @@ -1429,6 +1430,7 @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[= ] =3D { { "nvme-ns", QEMU_CAPS_DEVICE_NVME_NS }, { "amd-iommu", QEMU_CAPS_AMD_IOMMU }, { "usb-bot", QEMU_CAPS_DEVICE_USB_BOT }, + { "acpi-egm-memory", QEMU_CAPS_DEVICE_ACPI_EGM_MEMORY }, }; =20 =20 diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index 966e30fa11..36528d22f7 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -722,6 +722,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for = syntax-check */ QEMU_CAPS_AMD_IOMMU, /* -device amd-iommu */ QEMU_CAPS_AMD_IOMMU_PCI_ID, /* amd-iommu.pci-id */ QEMU_CAPS_DEVICE_USB_BOT, /* -device usb-bot */ + QEMU_CAPS_DEVICE_ACPI_EGM_MEMORY, /* For using extended memory */ =20 QEMU_CAPS_LAST /* this must always be the last item */ } virQEMUCapsFlags; --=20 2.43.0 From nobody Mon Sep 8 17:08:17 2025 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 (BodyHash is different from the expected one); 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 1753255546669189.57237869741914; Wed, 23 Jul 2025 00:25:46 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 89F90B2B; Wed, 23 Jul 2025 03:25:45 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id B361B1357; Wed, 23 Jul 2025 03:22:43 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 6E04611BB; Tue, 22 Jul 2025 16:26:23 -0400 (EDT) Received: from NAM12-DM6-obe.outbound.protection.outlook.com (mail-dm6nam12on2086.outbound.protection.outlook.com [40.107.243.86]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id B2D5C11C6 for ; Tue, 22 Jul 2025 16:26:22 -0400 (EDT) Received: from CH0PR12MB5092.namprd12.prod.outlook.com (2603:10b6:610:bf::16) by SA3PR12MB8802.namprd12.prod.outlook.com (2603:10b6:806:314::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8943.30; Tue, 22 Jul 2025 20:26:20 +0000 Received: from CH0PR12MB5092.namprd12.prod.outlook.com ([fe80::969b:49e4:6d48:b058]) by CH0PR12MB5092.namprd12.prod.outlook.com ([fe80::969b:49e4:6d48:b058%5]) with mapi id 15.20.8943.029; Tue, 22 Jul 2025 20:26:20 +0000 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=0.2 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, FORGED_SPF_HELO,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_PASS autolearn=no autolearn_force=no version=3.4.4 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=FkLFo262FmCgXtBqOLgz/kq8dPllldkgfXfY3kuWrc3hPvFDwpJSVGM/F1BxQX4Rz4leIcyk3t2pyHowKpRkTivYlx2/ACMHYvZW4WCuf7I8zTF62GQcIXloy2ETLu2+Ez+to2KsVFbSkUvVNBhWTzVL3ED7oUXz6AaJ2qYLIHcmQhMKCsib9kE6hwe9kA9e95t6mVmpQ6ZULEw+ACgWilRD17xucDexQuMRVW0WW5iS1viW+x8QOL0lNIc3RGD+O4r4KpsAux4vKSVDWt181z+H+LGIZdknJ/s0e4mtlLpG1Fnr13xThn/RZCdIL3Yccb6uPkqolU/hd6aKxbzLmA== 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=FQm6FGcKoKpcO94BZlME5a0MfCZrEKNdLNWHb+vrsgA=; b=PTWWXnpVxpTI7W4XeyNRwfUVBrfIvTp8ONXiuHvzfS3vc3Vaumot9YKADcB8FBadc3aNEccHFu0QStG76H7QjZZzKxSy15fyLwpS1dFr3vGt7QpnGLXO8i+4Esnnsk4s8Sm3d4Wwpfl6Ujv86ddrQUyWViE1X4ezDFpCbYdsTSjGHe7wxsnynyLimjr6ttZa90qNgnvGNh0v3k9rO+190GJ/JhM/nyE8RtMN97apz6dexuJJRqflIE++LQzk77w/7AywNGYGUB+xoANHSnfIVodhFTp3Mj9DEnPJPtyVdJuwnsqEv93CqnrY1YxRRLe6KbPD/qUZjiZkWmZRUDkR2w== 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=FQm6FGcKoKpcO94BZlME5a0MfCZrEKNdLNWHb+vrsgA=; b=mmFjgq0wuYJ98xjvQjO7xEa//wixQEdgHxoSjCjFoOvfI6EJ1Lg9os2NNTPINYXnXHEFngrtzWFUj6iFmP+gNFBQ4sYivf410SG+m7vq0sHPm7YFjHFMxfAYUke9CPxQcPc7q69nzVjOhUkRC8jtv1jqGxmX74+k1/IEJDg5lLRWroyT6VlVEE9bR7PMGZNdmFQUkvC1GHmvkFDQiZVkdlXts0D/++JBNUwCMHidemeWJ+aoG5Q4vWPoCkz6h/ZhiR07iBSJ1l+suW60TOKmPbzP3HEKvrVbgOOjMnzdaWfwInnW0DII6/D1t81Xm/sbN/REEM3ZYKvmj0FxcckNbw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; To: devel@lists.libvirt.org Subject: [RFC PATCH 4/8] qemu: Add validation for ACPI EGM memory device configuration Date: Tue, 22 Jul 2025 15:26:04 -0500 Message-ID: <20250722202609.1823658-5-ianm@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250722202609.1823658-1-ianm@nvidia.com> References: <20250722202609.1823658-1-ianm@nvidia.com> X-ClientProxiedBy: SA0PR11CA0074.namprd11.prod.outlook.com (2603:10b6:806:d2::19) To CH0PR12MB5092.namprd12.prod.outlook.com (2603:10b6:610:bf::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH0PR12MB5092:EE_|SA3PR12MB8802:EE_ X-MS-Office365-Filtering-Correlation-Id: 1b753fc4-f9ae-4eaf-c986-08ddc95e04dd X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?hcJV0124ziVjfori5aCJeEjh1Z0xPW5usnCpUmUImUtqWXl4Y9zBOKy2bkGR?= =?us-ascii?Q?zt0W6Bb6kPNhjmVdutdMcptNeMjZeK+ro/zPHB76I6dlud/kVvtTPucFeFak?= =?us-ascii?Q?Qnt10flYEBqLFy2585lg8kFcmfGaYgvYb4nh0G2Qov3pqFIL/cgcPQGD6PrB?= =?us-ascii?Q?KxpqCJlya4SaADudP2XErkRLwS7qOEjVYvrVJaNnjFzeprJR06yghaTmgtGc?= =?us-ascii?Q?K9MZIz1JJu74ReSqGoaNEFo5Btj/HgPA4uWPBGwv7ITZMKPN47pg5LFntqEf?= =?us-ascii?Q?94uJvDtZ2Gq1R5jl66fMcWs4Zja11UyC5lSQB1CAqvGIRNiSVabNWUjzcgR4?= =?us-ascii?Q?fzo1seHeqQ53yOxXIxxOse+XRn9DTFCaANHuNhvsiqYTkp2MEN9cBjT84GIp?= =?us-ascii?Q?NA2xftigZ0oDeWtQhdjPdkQ23T40Np7UZcfcFhH26FcwVRD17Z2EOnKD+xFJ?= =?us-ascii?Q?94Dtnqdy5YHtlGLPN6ilhfofa8DP5HNU5OtlejnIXMz3bSFY4GdElhRtSDuM?= =?us-ascii?Q?nHj4efRmzFwCOP6mP8pRfC/5xuOvpOruFwtWRvCoShR3FoWmzKmzBwlqpReT?= =?us-ascii?Q?VZIeDZh96OdV91kDi4NAxDJgcLbwXfaUTDZTWolPevRO1Inocg+9uZP8L7FI?= =?us-ascii?Q?+B4pMai+XDjQkni6iRtSZgSls/hiRC4cYv+t9cBGJgzhTBj0xEE/pbcy2PkB?= =?us-ascii?Q?NGFXk1kJuyFcoYYGIIzsZePAQqjc3gXODT5X/mHK/Kw2Lg21v6tXEZFJe5pD?= =?us-ascii?Q?kHAI5RAywNTOorS3aRQfeLs3cnWQoO9Lp+KrPtIByYwtPrzzLNRpmNtI2cX1?= =?us-ascii?Q?XNdteEwsjz3Vz/w4rq5C+tSdSnsbmbisot0V12g+0O71ZOmvtE+gz3n9/Vv4?= =?us-ascii?Q?Y0qtO6I+z9c8E00hlXeXD7ssFsk5l8dVHqhXRQ95nPp91xG/CYauvA99Oqql?= =?us-ascii?Q?R9FOERuC+lYWSAupkNl0VhMl5otcOJkfsiw/a8BsR1xJDSRW74s4+oU03EVk?= =?us-ascii?Q?vLgEtnHqJ9AZYiZtjz0rAHHtpg8Ay/cGB5e+aaKYqyhDUYKLeiDU3grFntAO?= =?us-ascii?Q?g7+lU/pV07PwsqQfvfUOenowm6f/vvDSaZ2xq73icgdozVljAbgLyBO/tSZR?= =?us-ascii?Q?ge67+K/inOvkCbW135PDP+BGnx/mi9SjKQ50gpQZxNgSX5ZcvkaF6aRZABHH?= =?us-ascii?Q?DQXRHsSfPbvNqIsAGxQDZxuQT3ZYwwweWNrINXDz9E1mu3J3UDRcgdcGex6h?= =?us-ascii?Q?AE2Kn7rgBjuXpbhHxP2jx1DAcJJZc9TOX+ujqq7O69xSCuKCOxfwc6PJbahA?= =?us-ascii?Q?euo41rRDmSc7AkCJ0GHExdswANc9PZgnkYAUtnDYPOXQDiLpsLiT98/nwIRH?= =?us-ascii?Q?tXYFkdnndn0KXj4zzbgn8F0oa5wzNHRWT30OMAJiKaPGvwjKoQ4cDyqbX2Sr?= =?us-ascii?Q?Xrn8FjEmPWI=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH0PR12MB5092.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?cGprZ9a+kDW99tNjhTU+0oN8+ukNiMkk/ypiLPu1vHz2v2aCODqaxO27lJNJ?= =?us-ascii?Q?8V6k1E6FdBHEjJZu8RifiXhB4gMn5YtwWXGgpRjZNV17EspWQsk+qSsEkrWv?= =?us-ascii?Q?bjM4aQlqRx914d6dgrUPntm3YTvwRYN/NCHXKJ+/8NKAd9PpNyV0XqUkmw/3?= =?us-ascii?Q?kKi/6Q1hQvWtS3bgNVQwhFOCB3xxZeOBgo1gtOSe1HScVny8Rd56TOcH58xD?= =?us-ascii?Q?8Nx+79idCtCcdVyyvXWyPWFE8uEu7jGwGQWO6FU5w6J/e7rzt7Hj6lXbevv5?= =?us-ascii?Q?0MqX5nu1Xcr5oJFIqH847NMWFo+WKKCcdtBR9FFdtaRyWkQTq8Ujn8EGGb6n?= =?us-ascii?Q?BLxKTOLudOPa2LO8lpuA4gjgZUDPkQicW0QpJg80k8t20ijFuPfhdELn+6fQ?= =?us-ascii?Q?LmS3jxUPfiXXeVuI2agKK3P3/mw6o6prvh4hlQ1i+Ejb6RW9BwvsYrTf833h?= =?us-ascii?Q?Pq7la15hQGkAylxrICFhbtAAflZ0U+1PQ91hiIBmXLusQFn3A8F1ibyQdl5M?= =?us-ascii?Q?6jK5y0HMiuSE+CX946aB2uEJCsciCWmdhVNZl2d2qq5W/cVd7EMS1S6WhavX?= =?us-ascii?Q?LfVl8gEvmCuUV5C4fdfBPGuSPnjEJMEcHYKIF2+dHhcN8bYRZkhuh+a/r8I4?= =?us-ascii?Q?HSsZBDjZg8r0yZb2SJHmXh+mpGLIatxm81ZOaCxuI4218lPc3oAp7IdMZUHj?= =?us-ascii?Q?1WRAUW+gx8e46WQs47yESReM5vPu2OQZLCW9OWoPY2I1BRbGN8cSrp1yBuN6?= =?us-ascii?Q?EbJR4vDJ5HRwU19gY0/98KjGA29Ba9sJK6R7m9FANw+837/L8pkIJYXESDqQ?= =?us-ascii?Q?QbhCN7wI5V3wA2llMlZzYHLVIA9wYXoFYvL9wrVu1RJUP7mUxOIdIc7oV3yX?= =?us-ascii?Q?fWh2AnodS0rRceVeMcHleLvpQfRJ5biL0iKVf9zuJx5y0C849aHlulyO7LaE?= =?us-ascii?Q?CwjXY5En50dkKhFOgashil5yFD1w9r3IQjwOseFn6CH8QszhX0t1WGWEyAha?= =?us-ascii?Q?uU2JLmSe0DFRbQRGFZkmkQPQs1M5H+LJ/PLWk20YaF6qeNQXgULa79PeYigM?= =?us-ascii?Q?P6EAFWXwl5B2d0r7St/QITtHhFqUjJfN1/XVdYR8Qncg/xETsgnQ7+BcuXz7?= =?us-ascii?Q?tiJEPzUZyRavvqUwXuPyUM5jH3w5hFu3wpsymAp7itwkNSZB/r5ctHziezYI?= =?us-ascii?Q?LFUR0PvhLvVCoJoWtEtMxQIR7L1y1wxW4ZPF5+sTpUxxu2Pkb3m41/+jPZf/?= =?us-ascii?Q?PJuaLSRGmvplnDMICY7L1ulxlf8haXbIrlzv0kTkAVx+s0OKodn9gNBBmLOA?= =?us-ascii?Q?4DmDlGq5ZP71LiUR/kGfbBbDi2PUenhLd0vFGQjfYvYvGvVPqNMyNjIDzyS+?= =?us-ascii?Q?Amgjh60+qw1WSSu8whN7iBC9dpOSdrRKPWNYwYdExuWbjjHaLlqq69akjUD2?= =?us-ascii?Q?OacC8ABn/5khOAJyd8dtqQc0nM4Tr2lqcpR4etsj8OSm8Xb4+rKjYvFZglRG?= =?us-ascii?Q?dCQcbNHat2C6Slv8z2nF2vqRjx0oVx+A/0azlij5TaIz6U8k7lbvsyvQuK8b?= =?us-ascii?Q?Z2aa/LHfH3bj3qdYUkRHxsTd7HhYVbJ089biIMMC?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1b753fc4-f9ae-4eaf-c986-08ddc95e04dd X-MS-Exchange-CrossTenant-AuthSource: CH0PR12MB5092.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Jul 2025 20:26:20.3672 (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: yaeBDOeepHXLChQI3CEjMmqXebXMWHxiufUX1OxW+BADYi4rSLVQeuW/W0WXdjcO X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA3PR12MB8802 Content-Transfer-Encoding: quoted-printable X-MailFrom: ianm@nvidia.com X-Mailman-Rule-Hits: nonmember-moderation X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0 Message-ID-Hash: A77EGQPONTL5O7GZ5CET3PJ5XWEA4G2Z X-Message-ID-Hash: A77EGQPONTL5O7GZ5CET3PJ5XWEA4G2Z X-Mailman-Approved-At: Wed, 23 Jul 2025 07:22:29 -0400 CC: ianm@nvidia.com X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Ian May via Devel Reply-To: Ian May X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1753255547229116600 Content-Type: text/plain; charset="utf-8" Implement validation logic for ACPI EGM memory device configuration: - Validate PCI device reference exists and is properly configured - Check NUMA node assignment is valid - Verify device paths exist and are accessible - Ensure proper permissions on device files Signed-off-by: Ian May --- src/conf/domain_validate.c | 22 +++++++++ src/qemu/qemu_validate.c | 99 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 121 insertions(+) diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c index 88e61fb878..3cbfe867dc 100644 --- a/src/conf/domain_validate.c +++ b/src/conf/domain_validate.c @@ -3203,6 +3203,26 @@ virDomainPstoreDefValidate(const virDomainPstoreDef = *pstore) return 0; } =20 +static int +virDomainAcpiEgmDefValidate(const virDomainAcpiEgmDef *egm) +{ + if (egm->pciDev =3D=3D NULL || egm->pciDev[0] =3D=3D '\0') { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("missing pciDev for ACPI EGM device")); + return -1; + } + + if (egm->numaNode < 0) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("NUMA node must be specified for ACPI EGM device"= )); + return -1; + } + + VIR_DEBUG("Validating EGM device: alias=3D%s pciDev=3D%s numaNode=3D%d= ", + egm->alias, egm->pciDev, egm->numaNode); + + return 0; +} =20 static int virDomainDeviceInfoValidate(const virDomainDeviceDef *dev) @@ -3318,6 +3338,8 @@ virDomainDeviceDefValidateInternal(const virDomainDev= iceDef *dev, return virDomainPstoreDefValidate(dev->data.pstore); =20 case VIR_DOMAIN_DEVICE_EGM: + return virDomainAcpiEgmDefValidate(dev->data.egm); + case VIR_DOMAIN_DEVICE_LEASE: case VIR_DOMAIN_DEVICE_WATCHDOG: case VIR_DOMAIN_DEVICE_HUB: diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index 57dc4171fe..b7cb0c632b 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -4977,6 +4977,102 @@ qemuValidateDomainDeviceDefPstore(virDomainPstoreDe= f *pstore, return 0; } =20 +static int +qemuValidateDomainDeviceDefAcpiEgm(virDomainAcpiEgmDef *egm, + const virDomainDef *def, + virQEMUCaps *qemuCaps) +{ + g_autofree char *egm_path =3D NULL; + g_autofree char *egm_pci_path =3D NULL; + g_autofree char *expected_pci =3D NULL; + g_autofree char *gpu_devices_content =3D NULL; + virDomainHostdevDef *hostdev =3D NULL; + size_t i; + + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_ACPI_EGM_MEMORY)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("ACPI EGM memory device is not supported with this= QEMU binary")); + return -1; + } + + /* Find the referenced PCI hostdev */ + for (i =3D 0; i < def->nhostdevs; i++) { + virDomainHostdevDef *dev =3D def->hostdevs[i]; + + if (dev->mode !=3D VIR_DOMAIN_HOSTDEV_MODE_SUBSYS || + dev->source.subsys.type !=3D VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PC= I) + continue; + + if (dev->info && dev->info->alias && STREQ(dev->info->alias, egm->= pciDev)) { + hostdev =3D dev; + break; + } + } + + if (!hostdev) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("Cannot find PCI device '%1$s' referenced by EGM d= evice"), + egm->pciDev); + return -1; + } + + /* Validate NUMA node if configured */ + if (egm->numaNode > virDomainNumaGetNodeCount(def->numa)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("NUMA node %1$d for EGM device does not exist"= ), + egm->numaNode); + return -1; + } + + /* Validate EGM device path exists and is accessible */ + egm_path =3D g_strdup_printf("/dev/%s", egm->alias); + if (!virFileExists(egm_path)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("EGM device path '%1$s' does not exist"), + egm_path); + return -1; + } + + /* Check if we have proper permissions */ + if (access(egm_path, R_OK | W_OK) < 0) { + virReportSystemError(errno, + _("Cannot access EGM device '%1$s'"), + egm_path); + return -1; + } + + /* Validate EGM pci device path */ + egm_pci_path =3D g_strdup_printf("/sys/class/egm/%s/gpu_devices", egm-= >alias); + if (!virFileExists(egm_pci_path)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("Cannot find GPU device information for EGM devic= e '%1$s'"), + egm->alias); + return -1; + } + + /* Read and validate PCI address from gpu_devices file */ + expected_pci =3D g_strdup_printf("%04x:%02x:%02x.%x", + hostdev->source.subsys.u.pci.addr.doma= in, + hostdev->source.subsys.u.pci.addr.bus, + hostdev->source.subsys.u.pci.addr.slot, + hostdev->source.subsys.u.pci.addr.func= tion); + + if (virFileReadAll(egm_pci_path, 1024, &gpu_devices_content) < 0) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("Cannot read GPU device information for EGM devic= e '%1$s'"), + egm->alias); + return -1; + } + + if (!strstr(gpu_devices_content, expected_pci)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("PCI device '%2$s' is not associated with EGM dev= ice '%1$s'"), + egm->alias, expected_pci); + return -1; + } + + return 0; +} =20 static int qemuSoundCodecTypeToCaps(int type) @@ -5748,6 +5844,9 @@ qemuValidateDomainDeviceDef(const virDomainDeviceDef = *dev, case VIR_DOMAIN_DEVICE_PSTORE: return qemuValidateDomainDeviceDefPstore(dev->data.pstore, def, qe= muCaps); =20 + case VIR_DOMAIN_DEVICE_EGM: + return qemuValidateDomainDeviceDefAcpiEgm(dev->data.egm, def, qemu= Caps); + case VIR_DOMAIN_DEVICE_LEASE: case VIR_DOMAIN_DEVICE_PANIC: case VIR_DOMAIN_DEVICE_NONE: --=20 2.43.0 From nobody Mon Sep 8 17:08:17 2025 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 (BodyHash is different from the expected one); 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 1753255580882411.18150843369824; Wed, 23 Jul 2025 00:26:20 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id EFBC3134E; Wed, 23 Jul 2025 03:26:19 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 34C4B1481; Wed, 23 Jul 2025 03:22:47 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 13F3DBB3; Tue, 22 Jul 2025 16:26:27 -0400 (EDT) Received: from NAM02-BN1-obe.outbound.protection.outlook.com (mail-bn1nam02on2050.outbound.protection.outlook.com [40.107.212.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 4AFDD11BA for ; Tue, 22 Jul 2025 16:26:26 -0400 (EDT) Received: from CH0PR12MB5092.namprd12.prod.outlook.com (2603:10b6:610:bf::16) by CY5PR12MB6346.namprd12.prod.outlook.com (2603:10b6:930:21::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8964.21; Tue, 22 Jul 2025 20:26:22 +0000 Received: from CH0PR12MB5092.namprd12.prod.outlook.com ([fe80::969b:49e4:6d48:b058]) by CH0PR12MB5092.namprd12.prod.outlook.com ([fe80::969b:49e4:6d48:b058%5]) with mapi id 15.20.8943.029; Tue, 22 Jul 2025 20:26:22 +0000 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=0.2 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, FORGED_SPF_HELO,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_PASS autolearn=no autolearn_force=no version=3.4.4 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=kpWzeaLbuiNRGemDoJtTlvDzzuypEQUO2Jdcic7fYuEt/Al30+jWiStC5uMyP+yqdnXYeJlm+fccrAXxDst92zKUdz6hReVBhO6+yVUV/28Hk2RKMYON/b/E18T3J99XQ8iPcB7w7AUt6omWvT0cCM+UvvJYdT02zNegHAFfvZCJY76WvkHRdwwXzNraX9sX2PgrZwxkVnBtj8JkcfFcUxUnc22ryz1flctrA+CaE0k2PCqBREuJHdim8RClmn17yTD2yW5v/s0SogCW3nFgTvTzHReNoiSV8KcPzlSbhbepEAv/wYq+MxG3eIfAWCNMmXtZSEAZoLLgFz71dC9PIg== 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=1e2JjeGhFUWceknFlSJg8jRaSQF6HIpwp5+NcQeZunE=; b=hVgPHSXnTWmAEEpRHiI5R/wyRKsWZONtdFiUSjFtfqUvF3Hl284rBgi5yRaU9p5zH17e/DkIO011mXXaeWvuV8IPx4DXqPsKBQjL2t6b0qGaxX0rP6vX/xas1gEMuvZrBPqDEtpRmxDtwk1Dy6uaJiZSN5e3Ov9U2sufaNV00JINe5PBdk1y8YDCzL5d0Z1DJsc8wLC9pFLhfsXBnzkn5oary73HRBAXWBSHfOaSTrC7u1EZLAK+klWwRFVQGh0BP/Yb6V+33gJvQocd2i+DWY4c8/B3YWsIXEFelBONqMr/w20pqoxuE4UYfLpoCUOoCCn2oryjj8Ks7y3Fybb2sw== 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=1e2JjeGhFUWceknFlSJg8jRaSQF6HIpwp5+NcQeZunE=; b=A0PnhLRQ+FYWSbVd8HlmyAsHaU3eD90f4Rg6pILbhYFolDljPrZeiREe3XG4xFukQR1UtU0sShEYSDEG/5ZNm8xFqumKtJxMp4UDs0q+OfOZe46js5s00L6tRWsDy+zqCDRV3YdRx7WL7T6IhfiZGSbUQC4E3SKt/N9aed856XxAFfOLSJ+cP0noyOvAkccTed+rYMR8Y+4Ny2ePz9REwnd3BDQT+iG1imPX5stfoJeVMRXOYiJ3WxusTZItBKrKbvWK0uOHc3TKgHL8SZpEtTTOPk/eB20/f+dWnLbtGVoD9BAtmIReBkqPhi6lWoUXqchkeaMuZUUkRsxGyIxqqA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; To: devel@lists.libvirt.org Subject: [RFC PATCH 5/8] qemu: Add command line generation for ACPI EGM memory device Date: Tue, 22 Jul 2025 15:26:05 -0500 Message-ID: <20250722202609.1823658-6-ianm@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250722202609.1823658-1-ianm@nvidia.com> References: <20250722202609.1823658-1-ianm@nvidia.com> X-ClientProxiedBy: SN7P220CA0026.NAMP220.PROD.OUTLOOK.COM (2603:10b6:806:123::31) To CH0PR12MB5092.namprd12.prod.outlook.com (2603:10b6:610:bf::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH0PR12MB5092:EE_|CY5PR12MB6346:EE_ X-MS-Office365-Filtering-Correlation-Id: d3914bec-b3b9-44a6-a45e-08ddc95e063f 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: =?us-ascii?Q?BqBott4ZzSbqpc4SIxhe+k5VF8Ws/72Ws0IoVROBzgMcsoZsfyZAEK6Cga36?= =?us-ascii?Q?hOokQxMf1DFIttzx2srXXW4UC2zh6jzwJF3dCyITqTY40iCxCdoaaBCu0XhS?= =?us-ascii?Q?W31CA33TgCs4Ds3sTntNxt+a2t4A8qTUKodjsNolk6xnkXJcU9Ja/vvpPs5H?= =?us-ascii?Q?gATciBlLkFxnH3cfX4EGF0PJJhVZA6Q0wUF0M4/Km/98saa/FHht+mqrnJEt?= =?us-ascii?Q?jPX6QL39wTYSGoJFNJoR3jtBwwp7JW9pQ7Dedv8EJGaYX+wweEUgFyRuw95H?= =?us-ascii?Q?+srRPo3XTi098VDJB0G0irdRfpDOv3r4LTEBa8qLwEefujViIcLso+TQoyEP?= =?us-ascii?Q?47Kn8oeKci/pPGzyzaHqzpHHkVFJFH42gjTuM8NwrFlZxXH0t2CMHWwMsVrq?= =?us-ascii?Q?LNx/38D9hnQ1RAadEOf4aWtKk9oimChFaWns5LHL0Y08C7VvHuD4Gxi8uSo4?= =?us-ascii?Q?qDsCV8TuNs+NqAtRNVmSSamMA/2kQRfPWUfVKG/sU6g0Msu0rG9x8rvwTXr+?= =?us-ascii?Q?3CUL3FWqXHnnVHus5Pe/Bvn58B74v2m/CxV4anXKqOghMRXRxqHbJIk5ELDU?= =?us-ascii?Q?dGgZzMXw48KAyI+vfJfvbCZQJei5HYmcuG7JUpa+ws65W+QQ7Os86LT+DHMB?= =?us-ascii?Q?1IdQiumPdxW+ok3D0OC+SIxQ9jol0vKG1J3Qjos/FjbVjTJFon/qaXgnucM1?= =?us-ascii?Q?ef8igwwvTmK5ckw0pxiSKDjgpE0mjgsCbx6kmFWeercYcwyuVhlX08NZMWxa?= =?us-ascii?Q?epa8iDfQ1434KQBi0cpDpaRx+JYqEhLJvMMucv/flZZfGH4ohdPe0ghs3Rno?= =?us-ascii?Q?u+stb/iv4xdyC6aJ+qjmnjwNOqGOAE4ZZjek8dH1Q5HL6FvxNMfT1sJX7Dm9?= =?us-ascii?Q?hObtXw8hjweC+E9HvtAmpRuDpMo4fsXXCk3NbjJfnV9XmhvIL7fhOvmL5maE?= =?us-ascii?Q?WspqAvivr1xjWXV8rEyUfdhk4Ls8V2zAUpSuE72uwCARf2MG9PVt/WQWktoi?= =?us-ascii?Q?gMKIYFCP5blROdWy635Y+f/E3FqIo3zTgeD2IXADSEqWdJ2eKL1dsDc2p32z?= =?us-ascii?Q?I1xihTSeUtZLu5Le/LYDhLdiSZN2rzhKiAkh9PD+LARCAqNFh3e8sray1WYe?= =?us-ascii?Q?qg+stj66tl66iB2eE/eJVbjcZkYVlfoMDEwCbwvxOqftFlLQFSpLsRe2UEQ2?= =?us-ascii?Q?ldHaQwLvq2BV67RdmYS9T8NzGHEttyakxrLPrbrQrIgz526+kgfaGkxuvev2?= =?us-ascii?Q?J5o6n21XvpHHee53nLKBmDOWZBiXyUoNIN+wllBglSbTq0pAcPdG6Djk9ItB?= =?us-ascii?Q?Ci95IcQVFs5UZZMFo3awv33UNtEHmn2OrOlT7XUtYvzExNX8e0hWaTep580J?= =?us-ascii?Q?EZQ8rlWE9nxCAp5W0zHm3DDwAykiIYctmR6lVbHLOSi0tXIE3g=3D=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH0PR12MB5092.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: =?us-ascii?Q?SuaP4WUJcJh09pKrNRxZn6JV87Ylzf8LzIWyx9F+KkRiKxkKJqcPgHee6zlJ?= =?us-ascii?Q?SXdU2wowUhNxk76dPXEiPho4uH9ZXxb/v22ZCduW1iVSXsI3tvmUf9Ti0WEd?= =?us-ascii?Q?AHzOQHOhda4XIfrpYXugOUWSLDz5PaBXrXWzHPpHJ8NSzz0zzssQBb799Az6?= =?us-ascii?Q?ovFYaTtGY1Gk/uikK/KyynSR8/s8JagqZIuJhsdVKWS6Q0EuVCuzFrADxVCw?= =?us-ascii?Q?uEhxBu0YfVN498ZYyybyosfht8vqK0vok8bJmBqEaU5mZaEQbYinKDzJUWBd?= =?us-ascii?Q?6lD08D2wPeb7oEGaAzhQpywBST+tDh4IFWAHXeB9KIvoK9r/FeRG5L4e9UPn?= =?us-ascii?Q?T6fQgdmXu+30hybdyxoJaLyWzTZDh0SkKMcBIczII5OOdwVaxKGMCFeWi3F2?= =?us-ascii?Q?RnmtDqG2FmGoKE20DWOEKMPDYX7EW2urUlA6v7PhSe28vTLH7qgl6qHEhc9P?= =?us-ascii?Q?c+E4bM4mSA5FitU1Ik+ZAcjy2p/cd6OtKesq+24dzrFnCS0L3lD+lMq/KCK2?= =?us-ascii?Q?pyAxK5gdK3qymMbBtdwWyVo5t05RrEllc8ILjFHahqdOyOjmFCyAx2M3GDTF?= =?us-ascii?Q?/nj+KKbvW+RDDgbkwyhpy1jNyIIwJlsuWarojWT2/RCu/tTZvjpt6bL/dRs7?= =?us-ascii?Q?1a/VFZLYQiJZFGtFwTr//UpxlLnnpRCc16+l+qUb1ZhAiH5zhumWDjWOAstE?= =?us-ascii?Q?vCBD0klSkNyt+1YG12MgPyy8VeGhCzsq+dKVaU9Wb5b8LrLm6uYbLrGXBTJL?= =?us-ascii?Q?2MBwfEcurAUGCISlNbiZZ7LKJkXuutNUgOAVXcjtOsjUccUqtSs5MgQCBVzo?= =?us-ascii?Q?/kZG0DcWRdSUQfgCgO2BTr9HH+ZEOgIT5r8N3OL0LpdzMWPsO9gJDEZlVsVu?= =?us-ascii?Q?1Q5LJr8uuZddrZKW42dHaCoZoU+MWWmedyoUoCHBy8APkKic/udYM6qOxM3D?= =?us-ascii?Q?I9w5lyEwLnPpIfbAPukN+We7bJ6qNlWhT+a7Az8n4Il1Dfk0IolXpEpAqWcx?= =?us-ascii?Q?l47Jl1NzvMDAu2BAJjmvFE0G8iqtcc2wfTVdmIhAY4MGQ47dKZD0TiB08yrt?= =?us-ascii?Q?OW3ioOovPsJxaQXKnIEJWB16AcbSeEPvxDszp9Zv8H6HMfdbE3TNZxmWHaFz?= =?us-ascii?Q?KQ61Duzvta0YjcEHD74cXwUEjHwARFm+Cc0Jwgaku8/5t/7LI+486qsnX1Vq?= =?us-ascii?Q?M5aJbby0W5nV8TeL3JS+lnEyrPcC7aq1X9Rk2da6hz12km0/THlcWf/xVNuf?= =?us-ascii?Q?WY/GsOoect5hjqtfK2fSii/5lFjIbeSi1Ihcn4WVJRU+OeaZYGi6JBt0nP7R?= =?us-ascii?Q?ANSa3Qoc3mIhnATSG8j62Z8G8gw81WSmSUe9lDMWVMWrnJp5nJUcCssFknU5?= =?us-ascii?Q?vQYhw9C9M3mlO6+61ix25hSXtJpJWVJEYY5qjbcODnW264sE3/UNYuddZMe+?= =?us-ascii?Q?RqgTQ15IBQst+Nib1MfohjdGqAZy00uh5LDJSsiTXDqhcXNCKjT9kmtJHRQO?= =?us-ascii?Q?u9itSgcq7aBbPYoExmkpaxxlNfT7YWyDG3OreqGctsDs6hqXRhgFWEf56c2q?= =?us-ascii?Q?QayNvJAIOJdXSpBs+1Al8nqDrdiZ+8L0jARlynN3?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: d3914bec-b3b9-44a6-a45e-08ddc95e063f X-MS-Exchange-CrossTenant-AuthSource: CH0PR12MB5092.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Jul 2025 20:26:22.7204 (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: eLlObWRkclRownkCG8f6DvstBjlwFL8zfZpy2RuA7crLbkvl81ZE299chNo14IYA X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY5PR12MB6346 Content-Transfer-Encoding: quoted-printable X-MailFrom: ianm@nvidia.com X-Mailman-Rule-Hits: nonmember-moderation X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0 Message-ID-Hash: RFARN277B5VUY3Z4OVRZXYYY3LSS7JAT X-Message-ID-Hash: RFARN277B5VUY3Z4OVRZXYYY3LSS7JAT X-Mailman-Approved-At: Wed, 23 Jul 2025 07:22:29 -0400 CC: ianm@nvidia.com X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Ian May via Devel Reply-To: Ian May X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1753255581636116600 Content-Type: text/plain; charset="utf-8" Implement QEMU command line generation for the ACPI EGM memory device. This includes: - Adding the device to the QEMU command line - Setting up memory backend properties - Configuring device parameters (alias, PCI device, NUMA node) Signed-off-by: Ian May --- src/qemu/qemu_command.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 4b1e36a4c1..280211fbf7 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -1011,6 +1011,7 @@ qemuBuildVirtioDevGetConfigDev(const virDomainDeviceD= ef *device, case VIR_DOMAIN_DEVICE_IOMMU: case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_EGM: case VIR_DOMAIN_DEVICE_LAST: default: break; @@ -3451,6 +3452,8 @@ qemuBuildMemoryBackendProps(virJSONValue **backendPro= ps, } else if (useHugepage) { if (qemuGetDomainHupageMemPath(priv->driver, def, pagesize, &m= emPath) < 0) return -1; + } else if (def->egm) { + memPath =3D g_strdup_printf("/dev/%s", def->egm->alias); } else { /* We can have both pagesize and mem source. If that's the cas= e, * prefer hugepages as those are more specific. */ @@ -10533,6 +10536,36 @@ qemuBuildPstoreCommandLine(virCommand *cmd, return 0; } =20 +static int +qemuBuildAcpiEgmCommandLine(virCommand *cmd, + virDomainAcpiEgmDef *egm, + virQEMUCaps *qemuCaps) +{ + g_autoptr(virJSONValue) egmProps =3D NULL; + + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_ACPI_EGM_MEMORY)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("ACPI EGM memory device is not supported with this= QEMU binary")); + return -1; + } + + VIR_DEBUG("Creating ACPI EGM device: alias=3D%s, pciDev=3D%s, numaNode= =3D%d", + egm->alias, egm->pciDev, egm->numaNode); + + if (qemuMonitorCreateObjectProps(&egmProps, + "acpi-egm-memory", + egm->alias, + "s:pci-dev", egm->pciDev, + "u:node", egm->numaNode, + NULL) < 0) { + return -1; + } + + if (qemuBuildObjectCommandlineFromJSON(cmd, egmProps) < 0) + return -1; + + return 0; +} =20 static int qemuBuildAsyncTeardownCommandLine(virCommand *cmd, @@ -10887,6 +10920,10 @@ qemuBuildCommandLine(virDomainObj *vm, qemuBuildPstoreCommandLine(cmd, def, def->pstore, qemuCaps) < 0) return NULL; =20 + if (def->egm && + qemuBuildAcpiEgmCommandLine(cmd, def->egm, qemuCaps) < 0) + return NULL; + if (qemuBuildAsyncTeardownCommandLine(cmd, def, qemuCaps) < 0) return NULL; =20 --=20 2.43.0 From nobody Mon Sep 8 17:08:17 2025 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 (BodyHash is different from the expected one); 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 175325560184741.35909423355827; Wed, 23 Jul 2025 00:26:41 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id D005C1324; Wed, 23 Jul 2025 03:26:40 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 64A411487; Wed, 23 Jul 2025 03:22:49 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 50D9D11BA; Tue, 22 Jul 2025 16:26:29 -0400 (EDT) Received: from NAM02-SN1-obe.outbound.protection.outlook.com (mail-sn1nam02on2040.outbound.protection.outlook.com [40.107.96.40]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id CFA97BB3 for ; Tue, 22 Jul 2025 16:26:28 -0400 (EDT) Received: from CH0PR12MB5092.namprd12.prod.outlook.com (2603:10b6:610:bf::16) by CY5PR12MB6346.namprd12.prod.outlook.com (2603:10b6:930:21::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8964.21; Tue, 22 Jul 2025 20:26:25 +0000 Received: from CH0PR12MB5092.namprd12.prod.outlook.com ([fe80::969b:49e4:6d48:b058]) by CH0PR12MB5092.namprd12.prod.outlook.com ([fe80::969b:49e4:6d48:b058%5]) with mapi id 15.20.8943.029; Tue, 22 Jul 2025 20:26:25 +0000 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=0.2 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, FORGED_SPF_HELO,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_PASS autolearn=no autolearn_force=no version=3.4.4 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=IC7LFSYZFW6TiC+DE/dHNH0CwBTjOxJEDusIOht+8F3e13tqELoaLdB3IBH4LODkkOMkU1lJDE8Mnx65vJPNtLljptpYrgtbSFkgWhZwWshIeGLvJOvxneSWWgS5PviAvhBF2L4KQK/j1Tz2Dy1NnLewQ7xHmC3/8iKLB9bNwRT8ABKX9GOOAWmqfp+Zs3ulrgxWBeNW4bZ7kRDxzWb2NXO6ulxtKCt6A4vcL/Q4AJ5T4T/IZOBswWeAZyDhkn3NkSANwLbOjK9JkHb7HjEdJgnGuy70FeYptkae2Ung49hGN36oloLMl/qN/m6SpUERC4XHwAfWvmmfL1VhaMQ7Cw== 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=Y4cllt4xdHlxQsQr9AoN7VmzJH4O/QTPWRn+fBft8ss=; b=USZapvh2ZRxIK/VRsx3imTX76V4ZBucAlu+bfdJhSPqotk/IolLMiYj+s+9oz4t6RyVxh9usEkVj3Z9RAKkHn/oKQXnOj6VM18nQ2AP5HX0OnnsxCN4lpbBrbP05RXrsc38Rz/pvXLaFJpJrsGtzzaT6rAEqtDxJHeJ7ow5C3kz/aalLsTcikGmSB2TfqWroBWdoX8crC5vkiDhsZ+C+83qk/dv1EAaIPLa3sIqVZPNiLF1Xalha9VnQmyN5X13880QKT3dCcg4XZnRDp3PJHbcl6099mJ0c03+L5hxaoTWQfAgqvQHBsiOBh9+Bumnx0oVqljc2IdNhdTJbP4rHMg== 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=Y4cllt4xdHlxQsQr9AoN7VmzJH4O/QTPWRn+fBft8ss=; b=UF+t8ePYUq2GsvBMQm9lL5HWGbcvvIDApwhH9aYe9Fmyg2hl811H7/Cwt15uf3EJQoKgbuo8t7hdrA9thonF9hT4CgQWYR7yre6DpCGQdV9dKRXaYXDzNmOpggRc9bRqabBqhWpbAjmD0KuYLdeHO5/zw3nad3F7rblJ9TQJiCqDvg9LmNhAx4ETJAHlQLifZW/yez/fFwZdswdjpPrJ/+BvqnHgIkDtgEIXX29ePq0xZrRPdrBnN8h6ssUB0CroUdqx6Qoiq3Lmi0WhCszF40Jammh0M/UBGh9HouVBGhPC/eS8WpzyZsPNb6+lp/gjwJnZxt/N3BwIzzN7XySIjg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; To: devel@lists.libvirt.org Subject: [RFC PATCH 6/8] qemu: Add cgroup and namespace setup for ACPI EGM memory device Date: Tue, 22 Jul 2025 15:26:06 -0500 Message-ID: <20250722202609.1823658-7-ianm@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250722202609.1823658-1-ianm@nvidia.com> References: <20250722202609.1823658-1-ianm@nvidia.com> X-ClientProxiedBy: SN7P220CA0006.NAMP220.PROD.OUTLOOK.COM (2603:10b6:806:123::11) To CH0PR12MB5092.namprd12.prod.outlook.com (2603:10b6:610:bf::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH0PR12MB5092:EE_|CY5PR12MB6346:EE_ X-MS-Office365-Filtering-Correlation-Id: 0d59f042-2b4d-4387-c0f0-08ddc95e07a5 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: =?us-ascii?Q?AKyI8QQgpUYKzrWxM8T+hKOn29NkKMC02y/VZ1Wel0qgBz9G2hS8BcXOZuQw?= =?us-ascii?Q?wHpNoCzvVkgCkpS6kcc/Ga0wpMVT1+XFHXgBCXNc3Fl6IEtC8jU9Q3RX9aZ/?= =?us-ascii?Q?Upys3/D1VMg278jINhrKZZYS2ZmLVUXxMi67l+fYw+HhKOiQk7Y1sq+6NgQt?= =?us-ascii?Q?a5Y5h0DdPBBFRoYFhC9p5dWYg05QrOI2uQ9AiTz14hugrwdCuGrq5UYDh30p?= =?us-ascii?Q?l8ksVqQ9MshsKsvuFY+p5ItGgbMttmt+51+zS0ERdsLkE4zkHug80kx5vFd4?= =?us-ascii?Q?hodKbyUFiI38NwJ0obvJvuedkyvxEyJ7i6aPrt0dlNiNlWQxRVz8teZLHS3P?= =?us-ascii?Q?xH3AveqT2lKJmEhQdY8Jr/RcME6TYhNMzO8e3ItrtuGoyk8u/ZlunRl/+tac?= =?us-ascii?Q?uxRlYmiWT+4IFNK46eyl9yJ5mLA33cJf34C6nbqZj12ZvCgFIZHfR/kCd4p2?= =?us-ascii?Q?DrxxGv54y5W04HwLF0Ai82b4/Ew/rEvAoPn0T+/rFQ+bvjIdxWmOBEJj0SeU?= =?us-ascii?Q?RN3x/1hOb3k7+o4od7Kn3JDy3lmz4jTIGF9w3Ljs9Hu0DiOdlGDvqELPDTCd?= =?us-ascii?Q?BdOpyMSldO2F7cwRQYDqmH55XHEKzl95SRDXfZ2/vboGslG7eMPh8XTdUYiF?= =?us-ascii?Q?VVZhKQIxjayyIBQ+TvXKe/bn/uQ61yhGJ7W0BC/6OK9MbH83kO1An8z6aCoU?= =?us-ascii?Q?VIXms9g7PeHzv/QgmK+OxLisaO+5NIHeX6PxLL5wPvxfLTZWIdwzwKXqwBBW?= =?us-ascii?Q?6GSMRAd5soSkW47t8I1md6k4C565ShK2aaFvJG3ystPVNgx7WthjIme0i41b?= =?us-ascii?Q?/JM/Zsv1OR9s6ERAa+dejF+5qfeAMyUuW7N+zdrBS9+a74orxUIix3GonwaJ?= =?us-ascii?Q?g243Nk69fBd2mAqY21SZBDRBUBwOC8GepovWELbRfIf5qw2OsUAAE1+pd6lK?= =?us-ascii?Q?3DOSkGtPNy+sr2nPil7/uwR6XxnIyJbE/wFKkVCT/dQNIxwzQ8N7Ddo1tfTi?= =?us-ascii?Q?U3kV8k70u2tjXnoObRUSvwINYeJ0WcMjUVLAEYRExFNRfdmfXtStsTsDlwBK?= =?us-ascii?Q?njglwYVrrwim31FNHKdeoi/ScB0IZPaHanThKOqdIRUVaCV71X//ETKeEO7Z?= =?us-ascii?Q?6qx1HtU/HubJE4Xiy3qHzpBLSzx/Z9rLyl018RbluTgTjyDIo6UhzNICTDmk?= =?us-ascii?Q?MS1Qe7+8SASWxt8SBKhAwK3GPo6ZqYHMwutlo6GNNeB58XxVkL4DTs1BQ0al?= =?us-ascii?Q?BgmbiGMhVy4Wt3RRgWeFolig1NVLXHzAPFHvpFMfAJPr16Q5oFiw35VDZF+9?= =?us-ascii?Q?Vmw/qTgZ17hL2DhVLhE7IPSYjrjWXCwKvvYaabB3bA5Fa//AUnYcY3QU5Rez?= =?us-ascii?Q?BzGL5NwsbaqNtq+ftfEzviYeZqqzrcgys/6sb7cy9m7j1dc+iw=3D=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH0PR12MB5092.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: =?us-ascii?Q?n7sExKB5Mg39dP5DRyyWDiIC61WtIOnXMhrVtRpJBnsWVF+uBFh4YWPsnQKs?= =?us-ascii?Q?kaIYVENq7+/xuWR3wrd2g3mpqph+3+2cxR8Cx4/DanVz5X09xN7Y/AIbu50/?= =?us-ascii?Q?yzFtvc0dasF6i3ab80YnsGUvWBjQ17YIdNYkArqVyiKFIKy77IfE56Ym7ESA?= =?us-ascii?Q?cryMITmXPQYP4Xz2zP8jijwFICS6JuKBbinwm7Y+1kN7pOCVgT4H6NqEmqnK?= =?us-ascii?Q?eeyorse7oYtylx3K8FrFaybZTPWmk0gumvUYb9UL7yCrv1tern6rUDCb+kaG?= =?us-ascii?Q?y/i1yhMli6ERTkxWRFkoxZ7PDTg2sxRKttemjwYchHm6mUjmK2PjsuQdgROw?= =?us-ascii?Q?lxbnGfXZrROC3UIMF8oexNly4z5YtysNNuxLAXgWk5k8icB+Ac7HqwYEdq/p?= =?us-ascii?Q?o0pIYYwjcA8tW2zm6T1D9z8Lhou2P12xKAjYf/lAj5yUYBu9EV1M48445LKk?= =?us-ascii?Q?Tq57reMcxprGoDa5SwHkpZDqAW/OBukR7h9DAFjcdlfnh5QR1bbKC2rdE/GI?= =?us-ascii?Q?Zz7glthJdzjoiNQf4R4oy+KVFTrMTfDOgRvHfa+7B3RAQd5Iw8E/OB5EOBm8?= =?us-ascii?Q?qCRx5GToUJXZ0JKRR4AG5qwyyiuvRIwxLxQn2aWkVllzNKjwyKJa3ozHleHT?= =?us-ascii?Q?Zfxj9w9ucGf1PLmjv7U7S/8Gtx6FknW+ySalUO/fbUZZPIWAyyvUr1HTHAR7?= =?us-ascii?Q?PyVccTDpO7SgF6zNV9nPhMsVHpZOCbq+iqkPGkdZFJsNKT7uFZPQ7jcb+ir2?= =?us-ascii?Q?Zl5XJkBApu9OmD1yHo7N/8CMPXfdWPApmNFHO4hLMGFF0gotfpWihTNKUKWJ?= =?us-ascii?Q?H9C5P+pgd7tcQQTi0VhY9hYZqac4QMGfibHvrL7bw0Np4PCBvQqhS4//9pk9?= =?us-ascii?Q?R/3+uRZ5RNvpNV3GteciAemXVV2ie6Ch+MATuYjlS2TvX5OV7zTpId0BM/OJ?= =?us-ascii?Q?AgnbjyNJ7V7sTPufRHs2J6dlzI6ibcbbmcMcDqrtJ7uaYJWCSMIkr7v0xz4V?= =?us-ascii?Q?SA3AYlUgYvoi9VTUh+wSjU0vklI8xbNAboizBcXsDnJIjZOqtF1i4Ud6wN+7?= =?us-ascii?Q?G1q+6VeuDq04w70yTBvNrcwGCU7Z9Jl3suU992PdgcIOQ2qB1vvV3JSLqNNW?= =?us-ascii?Q?xmA6h5FCj0rqN6wyjHOWrsjbhO+PVedtJv6/pvPLyR9HlTxcqUUXJGTT/EaS?= =?us-ascii?Q?kKerKJ9GSgemnEAPAKFbCsbDhB1sRIPHX39+t5AZF/scxMlSP7GhaLAeF3P6?= =?us-ascii?Q?WOs82PFrnEsyx5PXI/vl062+66PLu+xwLL7AwRgo1YfK//8puWiSlr1w+n/4?= =?us-ascii?Q?filpzcVSUe3UDoxSB5FAAFV0TEDtXLHVZTuuPNwXDuebE3WpGM4Ln11iv8A4?= =?us-ascii?Q?fwrdEJ43YNAoGgnZuZNZDjsLn4/FI9Br2m9joQtU0EmNO0Br8qG/23CCC9Wl?= =?us-ascii?Q?tToojT5SeW+9bz08duF6VBQlsyUs2z1CHWo+taLb3YSX4s0dkubZZC6PU/JD?= =?us-ascii?Q?cJMpZP0D+oZSsImMNOk13D4DnDLUHotfpszeDpP2dSCiJ8h4eQH5t4qFLq5T?= =?us-ascii?Q?gln59JwjeuTMS6ZaDJhupJFQdNONG0cxrw0pEb/Z?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0d59f042-2b4d-4387-c0f0-08ddc95e07a5 X-MS-Exchange-CrossTenant-AuthSource: CH0PR12MB5092.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Jul 2025 20:26:25.0644 (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: 7+/ylE2gsH/1o+LZfLkLRG33mGyJxEZMJ2H/F0Oa64KAX6pYi44ZK7eWaCKKgdqC X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY5PR12MB6346 Content-Transfer-Encoding: quoted-printable X-MailFrom: ianm@nvidia.com X-Mailman-Rule-Hits: nonmember-moderation X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0 Message-ID-Hash: M4CVKLWU2T73AIAZGEKPZPVA6AZLNX3E X-Message-ID-Hash: M4CVKLWU2T73AIAZGEKPZPVA6AZLNX3E X-Mailman-Approved-At: Wed, 23 Jul 2025 07:22:29 -0400 CC: ianm@nvidia.com X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Ian May via Devel Reply-To: Ian May X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1753255603765116600 Content-Type: text/plain; charset="utf-8" Implement proper isolation and access control for ACPI EGM memory devices: - Add device to cgroup for access control - Set up namespace mappings for device access - Ensure proper permissions in containerized environments Signed-off-by: Ian May --- src/qemu/qemu_cgroup.c | 21 +++++++++++++++++++++ src/qemu/qemu_namespace.c | 21 +++++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c index 25e42ebfc6..3a33087778 100644 --- a/src/qemu/qemu_cgroup.c +++ b/src/qemu/qemu_cgroup.c @@ -753,6 +753,22 @@ qemuSetupSEVCgroup(virDomainObj *vm) VIR_CGROUP_DEVICE_RW, false); } =20 +static int +qemuSetupAcpiEgmCgroup(virDomainObj *vm) +{ + g_autofree char *path =3D NULL; + + path =3D g_strdup_printf("/dev/%s", vm->def->egm->alias); + + if (path && + qemuCgroupAllowDevicePath(vm, path, + VIR_CGROUP_DEVICE_RW, false) < 0) { + return -1; + } + + return 0; +} + static int qemuSetupDevicesCgroup(virDomainObj *vm) { @@ -871,6 +887,11 @@ qemuSetupDevicesCgroup(virDomainObj *vm) } } =20 + if (vm->def->egm) { + if (qemuSetupAcpiEgmCgroup(vm) < 0) + return -1; + } + return 0; } =20 diff --git a/src/qemu/qemu_namespace.c b/src/qemu/qemu_namespace.c index 59421ec9d1..60000c2636 100644 --- a/src/qemu/qemu_namespace.c +++ b/src/qemu/qemu_namespace.c @@ -676,6 +676,24 @@ qemuDomainSetupLaunchSecurity(virDomainObj *vm, } =20 =20 +static int +qemuDomainSetupAcpiEgm(virDomainObj *vm, + GSList **paths) +{ + virDomainAcpiEgmDef *egm =3D vm->def->egm; + g_autofree char *path =3D NULL; + + if (!egm) + return 0; + + path =3D g_strdup_printf("/dev/%s", egm->alias); + + *paths =3D g_slist_prepend(*paths, g_steal_pointer(&path)); + + return 0; +} + + static int qemuNamespaceMknodPaths(virDomainObj *vm, GSList *paths, @@ -729,6 +747,9 @@ qemuDomainBuildNamespace(virQEMUDriverConfig *cfg, if (qemuDomainSetupLaunchSecurity(vm, &paths) < 0) return -1; =20 + if (qemuDomainSetupAcpiEgm(vm, &paths) < 0) + return -1; + if (qemuNamespaceMknodPaths(vm, paths, NULL) < 0) return -1; =20 --=20 2.43.0 From nobody Mon Sep 8 17:08:18 2025 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 (BodyHash is different from the expected one); 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 1753255625765465.2013577932096; Wed, 23 Jul 2025 00:27:05 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id C5B0D146B; Wed, 23 Jul 2025 03:27:04 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 1F26614BD; Wed, 23 Jul 2025 03:22:52 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 991B211BA; Tue, 22 Jul 2025 16:26:30 -0400 (EDT) Received: from NAM02-SN1-obe.outbound.protection.outlook.com (mail-sn1nam02on2083.outbound.protection.outlook.com [40.107.96.83]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id EADE511B3 for ; Tue, 22 Jul 2025 16:26:29 -0400 (EDT) Received: from CH0PR12MB5092.namprd12.prod.outlook.com (2603:10b6:610:bf::16) by CY5PR12MB6346.namprd12.prod.outlook.com (2603:10b6:930:21::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8964.21; Tue, 22 Jul 2025 20:26:27 +0000 Received: from CH0PR12MB5092.namprd12.prod.outlook.com ([fe80::969b:49e4:6d48:b058]) by CH0PR12MB5092.namprd12.prod.outlook.com ([fe80::969b:49e4:6d48:b058%5]) with mapi id 15.20.8943.029; Tue, 22 Jul 2025 20:26:27 +0000 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=0.2 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, FORGED_SPF_HELO,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_PASS autolearn=no autolearn_force=no version=3.4.4 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=pSm5ELt5TAmPHHGBbEYFP7ajyZ0UdW73rkowFuVqbR07a/BghMAPXJyQPHqxvJaRSGUY3egEbe62TTryL1lGlbcY7Y+1v4C8JUaSom/2X1IyqhwVHheMzzA+F2M+UUcycECTai5ym//heWfw3wQEHM91ldnSLRGAhmEWn6PpvmF0YOeUelbtxZDu2juPwu8I3q91kWuwEpFxmm1HgQkeXS/2hnKNFRfVLk7piOBs+x79jL3gBh/YI4YjnGcNd15nC+RXFjQ1REEPwGUsTtY5Am5D7gbnU5Ek87YTnJy9MGdc5V4xj8lYmWE1/ok8a78oKT3j9FvLoK28bjR4Ntd2eQ== 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=jtvaQRawwIMOsI7BUWynh0PevLcKAiflIbVseA2W5Ec=; b=mg8GpDE9rFsADM2177vy7WAUjuoNDWWM4GaC/h7lhEdX9bQNC3RURfVsYkWvv+32dPtkJFK3js9jptlaym9f3LLZcxp/OnMMA9qT19HhKCKrJei2drI3d4vXPimQbtBs4EqW7ru8UcYaKRBT6gEQMDxwEpPyN4D1z7P5VpB5kSxsCET8Jo3ZB/tRt6BesIp6IeNX1zscSaGpOUXWKDVbXoHW99BpLjet3i7X8wLfuJYf4RhhJOVK+5KZJZrIGUoq3mhxAg5ffwC0nLIlPHUvJ0o9i/fiHEXopI6TXA/RnrjGLYEnXsjYthuWhALpCp7FQPpYxdBdb/7stjjshsicBA== 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=jtvaQRawwIMOsI7BUWynh0PevLcKAiflIbVseA2W5Ec=; b=RmGkbGfSpJCM9j2X/t1Q+VfKaUtkJV9rJ+7lKuevdBlfy6rlyyRzkkiBXAQo55v9PCBvevgWnYz/z7fgQQpKkavWozGvQuyhGmZqV0LcDY7PlIBbvdS+wybkZSIYqJJqH+n4G63j9S9EudPh3C8PHXY8cSTHvz7lhIz93GtTifzfdWNb3XczWN269uJn3NgzvidtJKdo28lCE4LGL7YhQ4ptaG/vParm4DaYJrp3jR5LaKNEHu+KU7SNLVcEERnubKefBMScXgwj9pWhW5MBZnpb9Z/vOJqv8jBs1y2o380DetjJLVeHfbIG+T/Kq2sDhQvti703ImkY6zC9CqDPzQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; To: devel@lists.libvirt.org Subject: [RFC PATCH 7/8] docs: Document ACPI EGM memory device Date: Tue, 22 Jul 2025 15:26:07 -0500 Message-ID: <20250722202609.1823658-8-ianm@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250722202609.1823658-1-ianm@nvidia.com> References: <20250722202609.1823658-1-ianm@nvidia.com> X-ClientProxiedBy: SA0PR11CA0033.namprd11.prod.outlook.com (2603:10b6:806:d0::8) To CH0PR12MB5092.namprd12.prod.outlook.com (2603:10b6:610:bf::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH0PR12MB5092:EE_|CY5PR12MB6346:EE_ X-MS-Office365-Filtering-Correlation-Id: ce5af733-f858-41e5-fe5a-08ddc95e0912 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: =?us-ascii?Q?WOeVy3U1ABCxwBI2RPTD2JAUPlQUSYwwc8RwAF26CxSydTSWsr7vqLomg2ft?= =?us-ascii?Q?jkirUaWqjha4+emqwZDmpsqr2ts2kmnEOVllAoC2KMyvhDI787EQI5kmBDwE?= =?us-ascii?Q?keVhraYtsGfqsgkDQG3f/vzuQARSCAWRiUygejHYQ9jKGXTpnWUu0WFIjOJt?= =?us-ascii?Q?1eWNQmzehFmpfdYgItJB7XA+MLeHgCR+XLu2U/u7GBW1xSXQBoRSR8ktSxAQ?= =?us-ascii?Q?lT+FAIzM5S+GEc+wiEA7ufnaHhFs9OEXxHnuyxXfaZy9SdMlCMxu8bQ9j1cZ?= =?us-ascii?Q?W28mEk4rNeiDIH9rZ7doF7ZxSjh4qu6EUcNqdIBnghtoAU72AQ3ALt+E5ZUR?= =?us-ascii?Q?7Jf4+gxOIvMYjMljLQnkpJQAu5XFlYDuJQo350zEu7VUGZXHZG4U33vsMk5a?= =?us-ascii?Q?pTewI+SqHYAqZXZqcdi0DBjj0qnov6EaaYyNG/6DLnu8Wt4wu0bkLfBAbmeM?= =?us-ascii?Q?8JeJ3ZyvSfZyHbFiDcgkof/DGRyPnDmfqPwyxFHJjECliYcWrf7AmOBqqjmB?= =?us-ascii?Q?xnRrnq/6yNU+e9zL9vn2NjWxXv2HsI1kOmQfcUbYsqT0avCXPEsdRIjiOTW4?= =?us-ascii?Q?Ha20u3bvLdMehi/M+B0/sV2WKjuRwlOQ8/AFhez5GlAGkXg2gEHEifeGFiGU?= =?us-ascii?Q?c3wakAAV4GouS99kB+u6BTB9HeG7l4nQYoWBKF/8M3eLxBTGcXdYYsCMj7iS?= =?us-ascii?Q?YrLwZGKmi5K4qyGEPZ2TFzjvYWcyLwR8tFp5XZg25l8S39eCIm/LRDWcsXsO?= =?us-ascii?Q?nYbsOAlaBELiv6QM+mVR4Gmgf47uEDQbfKtvG1PniW27VL8aGZGjDWz+6nCx?= =?us-ascii?Q?nYBgXA/cX0SNycy5qjdsuzOA8LFm7cG6KTIUgoiqqXC9MFLErHB46VAdlT5z?= =?us-ascii?Q?dM4dLBSZJDbGKlFIFzAUB7avI8en61y+vsjeH6jND7sjZnmpZzdHg0UGoDuw?= =?us-ascii?Q?HhCyG47sNUP9pgz1H86iyaHcZkgZUdyR6zogxsSJrleSjHCg6qCHp48K22FK?= =?us-ascii?Q?VKw2sjZ2egcKk06RD9wQ5lzEAId2noXhCOW3O0LuCyNdW/Hart11u7i9zjJt?= =?us-ascii?Q?XdXopyIkyUVHLxEG8khTDQAZqQ8Qi5B5G2S6KwUuhItveFhpZU4lZ/TMgTCT?= =?us-ascii?Q?mYIULD1JkZtsen9DvUOlZW91YqRO/GyxZTz+qbkTf0EFHnpJVzOOyDbA6iyL?= =?us-ascii?Q?aInnzm8xUugsPzR203zaCTCGF+BA06E38xxpHva6UTjzR8kykdUfAsOoTC+A?= =?us-ascii?Q?ZYFdzeTP7enOynZojlf5hZVW1Iti8CDK2LotLz4k3VNndnkmm+s7MRpxWRI5?= =?us-ascii?Q?uTZjN9uZ5c9xYN6iK341gHWrLaIKBnbd3gnCnULJpGx+QkWTusdc5ivwzkLg?= =?us-ascii?Q?09AjzFnhT3U69z0ID3JO838e9RtdsNTOwVlVUV5EEZ9aGiACAzns67FGxvKx?= =?us-ascii?Q?xDKRK/9Giu0=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH0PR12MB5092.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: =?us-ascii?Q?lL/2+oTv6V8kydSnbHmVhJ4EkymYNYKS25Ay+BEAtxOLNvyGBJSQv7kqXZNa?= =?us-ascii?Q?2uaXps++9KnyNDkRxHSA8L9kmIo/NVpcmccXhdv1oCUty78s/lG+9umQuPnO?= =?us-ascii?Q?godAhr+tA+r6yBMucIX0KY7OinQP9VzkIcT98ebCB1Qfv9MT3urzc8WLDkP5?= =?us-ascii?Q?5TKqEeW8UcdV+/V/X4EEOORHOpBp5TDlLMjtMnZlFE6j1yg5siK6LP7fRaAE?= =?us-ascii?Q?EGg8GaLVV9milpMszvbn9xQo3NVna4RakA5lAmCY1X3EBqJAFOs6NUhkBsM4?= =?us-ascii?Q?i/+f2B1Tz8t6xiP4HtDz+CJ/ltdorFd43Ob7+V7Cj1OKvAvrvLvDHZkjq2M/?= =?us-ascii?Q?kJRkm1n9VRsoHMG5U9jHf+Jiegmfizgj0xupVHFOBm6KB/02npiEViK9T4xM?= =?us-ascii?Q?NemdnJrrMfApV5/41nUZ/1pYLb/odQCW1asYytpJi692BdcsvvmTj0ihfMCn?= =?us-ascii?Q?5UocHmIuQE9qy0x3664pa52l+8xSYlaoeuGntNKyXlqL+Dzodr49v54idH+k?= =?us-ascii?Q?0yIClSoCnHc7RFwZYHs5fqv4bKyueYyD0wPO29Wn7/1j8FguQ6Pci852vpmA?= =?us-ascii?Q?VfX2IXQHpOwWbzqZhhsFDMHAjDRxV8FJqM/udCqRwWC1jmXvCsrh0Sdk1cLi?= =?us-ascii?Q?zprpEJOOyWHpSwST3tAQO3Nb4aMbLbPnDyww6goAR+TKrsYupLkTUxqZUafM?= =?us-ascii?Q?xY5tLmcV6C79d0NBYzhcpc7iiHidlCjKGop9WJOcVhGTa1OlY4uM5YVD13NW?= =?us-ascii?Q?Zjp8/guXprJ1Nn+pwFJO4XGqDpW4ZG1M4OQm6nB0+b4G5q+phUIRIQwH64VP?= =?us-ascii?Q?dTDu7JYFJD3ic6XKoSVCZeyt/7a7ifq1lLCaqIGhm7/u8Ksw2tGDWFt1IltG?= =?us-ascii?Q?EaoIfCgUJ5WSWteJPJiLu4SvC1VsUGLfnZfJAkRc/xF5hSLkHuV2YdN1wE39?= =?us-ascii?Q?AAOrX0ggKQjoMLzfXB2NwifR7oCV6GAbm0zzquVlnw2ryjwnUkJ4A1dil1ZH?= =?us-ascii?Q?h9bQAwfoZTRh46T6xnhbiIazux4MbCC7/sa27EigWulsknD+xdPR3TfZHGsg?= =?us-ascii?Q?uvMNlAcFOM9dqg2EPVXa4BqMjILMMnzgTRoE06lz8DrlTJSy3GTAp9dMICtC?= =?us-ascii?Q?U/9ZnZA/tkCQZhgM5JMgyMLfPLshT/nBM1wmCdK1p1wHhiCJ8G5kL0gu7BRC?= =?us-ascii?Q?ZYhRi+fxYjmF6ur8iA89CrlFExJmJue9rgSSRcrowRzHviAiDmbMI+eG25TM?= =?us-ascii?Q?ZD4mlSuPUxkomQvKT64fV1UicWeVpe2aHTjL9/kQdX8gZNYiFYThkynLJtcx?= =?us-ascii?Q?m7nmUVc0vK5405iQDdg4+RdjtO3/2jvVD1BokoN+ZHrP3/jDaLEdX02JOOjK?= =?us-ascii?Q?pGF9PtHcsm8eBqgkZBINIKE1KxTOzCbJ2CznCdwjLxuVAJomZb/3ak+dMH5t?= =?us-ascii?Q?fPk35mLtPvss96UQIii55zbepSHVPiamtuTVZdt0GTVdQCPt2DgVzlPYcVAF?= =?us-ascii?Q?ggamQJQLoCchGjwgqMSguXadxM2q96Q8+de9KtbVw6FUeKhYeo2jxeF0LYQ6?= =?us-ascii?Q?tT8ypLk1w5upRJAJOjTMeyjex+4H7SNtzdi1H2wu?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: ce5af733-f858-41e5-fe5a-08ddc95e0912 X-MS-Exchange-CrossTenant-AuthSource: CH0PR12MB5092.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Jul 2025 20:26:27.4131 (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: gSjM+lL1jMI4DVbpjHPTS/7cY+bz42m7uqzM1x0KR49ni61/XFQcgN87jEoBXTj0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY5PR12MB6346 Content-Transfer-Encoding: quoted-printable X-MailFrom: ianm@nvidia.com X-Mailman-Rule-Hits: nonmember-moderation X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0 Message-ID-Hash: CXEAQ6QZZ5AXWF62JV2CZ435ZDRE6LX7 X-Message-ID-Hash: CXEAQ6QZZ5AXWF62JV2CZ435ZDRE6LX7 X-Mailman-Approved-At: Wed, 23 Jul 2025 07:22:29 -0400 CC: ianm@nvidia.com X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Ian May via Devel Reply-To: Ian May X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1753255626106116600 Content-Type: text/plain; charset="utf-8" Add documentation for the ACPI EGM memory device feature: - Describe the purpose and use cases - Document XML configuration options - Provide example configurations - Explain requirements and limitations Signed-off-by: Ian May --- docs/formatdomain.rst | 80 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst index 54a809eaf9..806af24fc2 100644 --- a/docs/formatdomain.rst +++ b/docs/formatdomain.rst @@ -1897,6 +1897,86 @@ For instance, ``target=3D'0' cache=3D'1'`` refers to= the first level cache of NUMA node 0. =20 =20 +ACPI EGM Memory Devices +~~~~~~~~~~~~~~~~~~~~~~~ + +The ACPI EGM (Extended Guest Memory) device enables a guest to access exte= nded memory regions +through ACPI. This is useful for exposing specialized memory regions from = passthrough devices +to the guest OS. + +:: + + + ... + + + ua-hostdev0 + 0 + + ... + + +The ``acpiEgmMemory`` element has the following sub-elements: + +``alias`` + Specifies a unique identifier for the EGM device. + +``pciDev`` + Specifies the ID of the PCI device that provides the extended memory. T= his must + reference a valid PCI device defined in the domain configuration. + +``numaNode`` + Specifies the NUMA node to which the extended memory is assigned. This = must reference + a valid NUMA node defined in the domain configuration. + +To use ACPI EGM, you typically need: + +1. A passthrough PCI device that exposes memory regions +2. A NUMA topology defined in the domain configuration +3. A suitable guest OS that can recognize and utilize the ACPI EGM tables +4. A QEMU version that supports the ACPI EGM feature + +The memory region exposed by the EGM device can be accessed by the guest O= S through the ACPI +tables. This mechanism is often used for specialized workloads that requir= e direct access to +device memory regions. + +Example configuration: + +:: + + + egm-example + 8192 + 4 + + + + + + + + hvm + /usr/share/AAVMF/AAVMF_COD= E.fd + + + + + + +
+ + + + + + + ua-hostdev0 + 0 + + + + + Events configuration -------------------- =20 --=20 2.43.0 From nobody Mon Sep 8 17:08:18 2025 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 (BodyHash is different from the expected one); 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 1753255664702734.3550920710753; Wed, 23 Jul 2025 00:27:44 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id A39B8129B; Wed, 23 Jul 2025 03:27:43 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 9024BC98; Wed, 23 Jul 2025 03:22:55 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 3D27C11BA; Tue, 22 Jul 2025 16:26:33 -0400 (EDT) Received: from NAM02-SN1-obe.outbound.protection.outlook.com (mail-sn1nam02on2078.outbound.protection.outlook.com [40.107.96.78]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 7BD0911B3 for ; Tue, 22 Jul 2025 16:26:32 -0400 (EDT) Received: from CH0PR12MB5092.namprd12.prod.outlook.com (2603:10b6:610:bf::16) by CY5PR12MB6346.namprd12.prod.outlook.com (2603:10b6:930:21::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8964.21; Tue, 22 Jul 2025 20:26:29 +0000 Received: from CH0PR12MB5092.namprd12.prod.outlook.com ([fe80::969b:49e4:6d48:b058]) by CH0PR12MB5092.namprd12.prod.outlook.com ([fe80::969b:49e4:6d48:b058%5]) with mapi id 15.20.8943.029; Tue, 22 Jul 2025 20:26:29 +0000 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=0.2 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, FORGED_SPF_HELO,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_PASS autolearn=no autolearn_force=no version=3.4.4 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=U37/CYWg712pcLRdzKbbKbsBZEmgfxOjTkbxyKRmU2TZcvTqUPQjZfFW+ccnpfXCYBXxhYM4ljSPhkVQ+5yn6Nfy9qxnCdWijSJ5Zz2sPB/MQYUN7+GlrJz5akBhKIgGLqlVyrX9dMAxM3FjGNElXTFvVntOQ+I61yLgxwuhMbUV0kbqlpATXhK8TpiCVymUGmIs3nXLMeR8VoY3Qbm7MRqlqNxBhYF+S2DHowSx8TVirnb0aG6yAdfix5Sh7hL2b0X7Y1Tr4cjx+ZUCvAoLRMGvHdhew5pwSF7U9LOew6axVzXME7yYj3HqPGtQh6nT+OeH9XRlKgl65L227FNnag== 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=YsfPKHIYvY+qAClVZm/lnV1miZSch9N7qlQJcjw9KMM=; b=Iz5tr7vAJ2OIW2WQPEjMeboCK/6D4+7cqAp9osRXbgpm73EmG8EmuicP1H7PpUd13gH75k+sITRsTvgoCN83XIlpW9hmXaYMMGII89Yptec6y2/zcC274zWSLUhG5FQiEiUuH7UjKCSjUBDjXR8mDsAjt2R+q3MIfAWQgeJTGSGCNSxxsQJc0zKddHOTtp89n4MO4K9/U9J/bwzBjWnNNx3cW8cWvsINrMdY6PIFkJc/0NtiKt4w8V15MQK77breQj7+MFmTIeOZfQItmiO4gW1FG0e6vAV7KKAfDvsCiIDb3j9hkLG74YPB2KzB2ga3+sS7+tNrHHKXYtHG4cx9Zw== 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=YsfPKHIYvY+qAClVZm/lnV1miZSch9N7qlQJcjw9KMM=; b=p0VxEIWLCFlQ3Z+4fGKv/Ver1k7fXCb4tN7A/kBFuGPm+YnlfVghI/ht1Ron+qEL4B2VBYrktVmkyANBtJn0E1J7nAUzUNapN1/8Q50gbdL2kWtgGbF2EiQ2TLZ9YqT4933s5lLHVcYmAe8VA+jiEIeAK63gX5d7ffjdl+duRsUOr/itqyLHLfLKXAD6qNG4shqlukj98ZvSSj0blwCGpYCyCGO9PMkjQG2qpRmlMrXExHst2QSv8LrVZcIbW1Ya/M5D9suifHGbRwI/Tb0Di1sVZ+pIGK/yYdHiQN98U5gysDY2JBWqpV2vpQhkuPEnuYv3/UySqC5fdM02m0a3zA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; To: devel@lists.libvirt.org Subject: [RFC PATCH 8/8] tests: Add qemuxmlconftest for ACPI EGM memory device Date: Tue, 22 Jul 2025 15:26:08 -0500 Message-ID: <20250722202609.1823658-9-ianm@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250722202609.1823658-1-ianm@nvidia.com> References: <20250722202609.1823658-1-ianm@nvidia.com> X-ClientProxiedBy: SA1P222CA0065.NAMP222.PROD.OUTLOOK.COM (2603:10b6:806:2c1::16) To CH0PR12MB5092.namprd12.prod.outlook.com (2603:10b6:610:bf::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH0PR12MB5092:EE_|CY5PR12MB6346:EE_ X-MS-Office365-Filtering-Correlation-Id: 104926ac-5b76-4fd3-6d73-08ddc95e0a74 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: =?us-ascii?Q?xdB8yhCVs3mHf45n165YHHkR5UGtlHvHXAZIIceW98EWkn3Oj6iLLOzZC1d6?= =?us-ascii?Q?5y8zYVrCnhfETJ4tmIMpnjV+/8q25wMnOmqgl5xKv21p/N+sycYU14KGT9mS?= =?us-ascii?Q?5lE6G3ErrMU3PUwRHlfH945swGWnau1JXdCVpYtJIewm8GtPHGP8UjoOBWut?= =?us-ascii?Q?Z7KnnUndAI9YiJcr4AnaRcOxE9IjINnIBVRapHrk98BDbQ6xo2YqjzTcBGgP?= =?us-ascii?Q?bM/tpfKCtlrL2WhY1WndeFFOGshD3o3tdZZDMRsQwAZ8ZA/3IWR4LfTxjmPp?= =?us-ascii?Q?MKfxCzfs9SMikKjCN2VDqwBLPZgJPs3GnsHviksqMa0x0aEFMtfrTP8+Rv5C?= =?us-ascii?Q?B9Vc6VwpuLvXqEkDyrpmrSVKBAEQSxQU2Ixh9R/pEQrKnCUX8YFAnnlBJiTH?= =?us-ascii?Q?UPqTIlKuEE3ubAQSgQiKTmmizOWIqEms8me3ceiQJJ/2C9+7RP3Swqx0y9Ya?= =?us-ascii?Q?zMcfXvpC+FO5Bx1/+JoP7ayLsfIhvaq6KNO2GvBdxUVbzAdOxctXOyAwCNJd?= =?us-ascii?Q?ULXL/4EN4lF6P1s/AqqOr6gTbh/bGUJRG1o1l0VmQNUB9HBwyBIdijzTePtT?= =?us-ascii?Q?8eSkmrcVcddy4ROrRsau/F2fE7YTkLgj9D787OxhICnYZBRajSAkNzL2ygP+?= =?us-ascii?Q?fyRKi6ImZbI8YXLI0DtMh3zhhUN+APATJ3VM6El0mlYgw3+k/RWH9p4V+8Wa?= =?us-ascii?Q?qqXQKTfWUMyuvDHGX2uSW4RPj6eTNWXHoNefcupeZhLEwJbjLDZIZ6M9n+sE?= =?us-ascii?Q?P5BW8zPhXd1OGs+cxEfp/QenREvSnHSU55CnuKoM+t26W1XhJvoIzmrDd7hl?= =?us-ascii?Q?qGYg3QUrmvAk7reQ+UvsjqIfITeb+ishTgGs2bnf2XgmA3ZJ4uzjQhsT+Pnx?= =?us-ascii?Q?ppzdEzDsUjCIqXysSOhds/uRonXPqcOT9tcrLiJEGqMwDj7JJLiKPrwWxHdY?= =?us-ascii?Q?0GQlSidYGYjxcA874dvKDcLj1Py639/GuphUYdj6iYfN2fnGnnnAE1/dpXCZ?= =?us-ascii?Q?YYTdeaUUd9zO9eWuPCvXwJlaeyr9uo1fBbvWRH7f8JY6+52JD6qMg3SJ7XuX?= =?us-ascii?Q?ezjO1H185+cMRfFG4kEcx8eEtjWQGmxWtVKl1jsjecblVpawvyZND/0nY7pK?= =?us-ascii?Q?J1tAwe+CfIyxdbd3oL02XTpU1bfXeY+Ir2KWXpDApEjwmBX7SM6UJTvoC9Rv?= =?us-ascii?Q?UpN57T2AbcZR46JPuVM5vcEcDiYGgT0dCrdP0HQqU/4Y/JY9VsK8XcnOhGA3?= =?us-ascii?Q?ktI3iVZOSw/Vm/lFEnP9BYovTpg5boBgvTrBwvO3iT5KoIa8s5iZAbf96Efv?= =?us-ascii?Q?bYhN22cZbBwJLfnXx1YG7cybzxNzQRtv9A1MhhDvRbKtmmhYS4OVpq76egCm?= =?us-ascii?Q?vtf26J6x8brYyIbS103aqrHa9DTR93hyGAjBL83je3f0zMzVK3ErNztRoyDK?= =?us-ascii?Q?bAg5659cMvo=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH0PR12MB5092.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: =?us-ascii?Q?xxnX7Unu6a7nX75FBTl7kgi/iskQREtpXC9+YjjPSOl5p+jWS0qTYYF5FYys?= =?us-ascii?Q?eIQOrK7WI8CzRHuvpMwBQ2n5rX3ypeE2usqKReOLbEPdtScQ5p2daxUEkuJM?= =?us-ascii?Q?1GZYf0eWQCdVvPKUeELXwVoQlaxL1Z9knUbY0JsX6vvTX5pt5vqUIdrfYDId?= =?us-ascii?Q?TCxk90hs1iZmrsCz1g3aHkOrSLGdWeVBPO1Rvk9cp0iWT/hJdTgVhYRsxBnd?= =?us-ascii?Q?pc67bi6ZkGDW23f8FghwbS8UluGhCvRklY+0XOmNAwS5WDnNtCIIHtyZyCiF?= =?us-ascii?Q?S6N34YqeRLsfwBB1uVCUPR7p3SnNEWPeRaUIQMeg7Q2rkCc25vdpo3YoYxUQ?= =?us-ascii?Q?xjHjPOW3BuYWIUbYdMbHVqb5h7Y1ujPPvZqBQR12hKtEEzpO191uFeFQHyEi?= =?us-ascii?Q?RcQFDIxMm0TYVIBeCY70HItEluUiMz1ADkmVpMupQ6nvOsx9Dz6UNrlJZ68m?= =?us-ascii?Q?S8aOwXiw0AvRTYKbJKSUOv6crmREqvCi7QGRotzeaxCORsOxtvvpNNmSvQby?= =?us-ascii?Q?O+TVkCZIaznSmdNQeT6J+aPF6M9fqUBjB27QXyAf16zpVMsF9epSpG8+6sOA?= =?us-ascii?Q?r+er8h2+Fptc44+F0jUlb4bWk+sn/22Q7oAgmG13ThC0jbzQAhtpP7zb+tkr?= =?us-ascii?Q?9tOMtNaxCgCT3or5wf/ykw3ZXiFV4BePSTuXFuPqg6jvIGOVMKyLgDTL2CaQ?= =?us-ascii?Q?MPzjFUdMHc9/i87faE2uGjfEwn4kVLB7Vm4eY7gngOE2II2eeyJDJqYBBpF7?= =?us-ascii?Q?YQG0skanPchP7MNuFTFVJIxhGWD1qwWGe+P8287101sluSKPMow8hxAPug3l?= =?us-ascii?Q?k1Mp8WuCaHaCdJbrbuXqPG/ZgrfmNH3LrQiF+au1Y1K/AQkIq8QIx1mIp+MV?= =?us-ascii?Q?ApF5Y3V7oJ0SrG/I3ze11bovPtSWUwNrFrm4s7ZpVagBO5EVUhBoZneI9chs?= =?us-ascii?Q?ychj+OGfD1Obdl/y9NZ0gTCjtG0uQyqxQ1ooTxlgOku1FYUyx5lT5TwQvFV7?= =?us-ascii?Q?AFPYaVtFC/4gHIPvV1I1g4TlbbDGY94gCmRVlPSmYaKBqvdjrI38KoAM46Qy?= =?us-ascii?Q?Xrol4qYoKl/aWgBYkK3bXnDBonIufK7qHJtTbqQKYuJ0PSOnzrtXrFwHi5wb?= =?us-ascii?Q?wvFWus5CG6fW9Ihxl5++eOhAjkLbdedF2fDgNNqlxqhzhdyx/CVetc9HLWxa?= =?us-ascii?Q?hH/7Xwrrn8yqu+X7LZnZ8XzxcPNCUeb+/Tv+fXmks2gtSHd+hjfIyAd2I7Lj?= =?us-ascii?Q?jFakqI3ZFP1LRFZnzJw11pcGx2exEjXFSC3DA/thBFNVS/7ik07p/jEvWhLC?= =?us-ascii?Q?RczhjUKXnj68Qjd7zpLDKRgCcvoNZ1LyaQ41vFSbxzPZA6f0BpC94Z2FkPTq?= =?us-ascii?Q?Gsz6Bf9zKliVZAOy9dXDPVHsCLORSOboQYl/flBUvgY6HgxDAlw6ff2UYzrn?= =?us-ascii?Q?rLRCT6Cb1Urk7nG8oQ93mHm38mL1G4iQD91dMlxUkAane/N6qSve/oKrsEKX?= =?us-ascii?Q?fNVrCCluP+xDpuBSngotyK6hDpQemmN+JMCJkb4LhwOvtIciWZ619ucm3Em6?= =?us-ascii?Q?mDLZkDdjhiwEeNlxhVNVwSzg1mIukKS122D3swUe?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 104926ac-5b76-4fd3-6d73-08ddc95e0a74 X-MS-Exchange-CrossTenant-AuthSource: CH0PR12MB5092.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Jul 2025 20:26:29.7498 (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: Yr3siQo5/3ncjF1CVPiBOQWGI+xxurYWhTu7EbqBsfWHZfkq7A9bn1Lb7UXVOKJY X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY5PR12MB6346 Content-Transfer-Encoding: quoted-printable X-MailFrom: ianm@nvidia.com X-Mailman-Rule-Hits: nonmember-moderation X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0 Message-ID-Hash: 7FRGJWGLLPSCBAGFJ3MT3ZXOHTD3V7O3 X-Message-ID-Hash: 7FRGJWGLLPSCBAGFJ3MT3ZXOHTD3V7O3 X-Mailman-Approved-At: Wed, 23 Jul 2025 07:22:29 -0400 CC: ianm@nvidia.com X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Ian May via Devel Reply-To: Ian May X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1753255666741116600 Content-Type: text/plain; charset="utf-8" Add test coverage for the ACPI EGM memory device feature: - Add test case to qemuxmlconftest.c for aarch64 architecture - Add acpi-egm-memory capability to QEMU 10.0.0 aarch64 capabilities - Create test input XML with EGM device configuration - Generate expected output XML and QEMU command line args - Update validation to skip filesystem checks during tests The test validates XML parsing, formatting, device validation, and QEMU command line generation for the EGM device. Filesystem validation is conditionally skipped in test environments while preserving full validation for production use. Signed-off-by: Ian May --- tests/meson.build | 1 + .../caps_10.0.0_aarch64.xml | 1 + tests/qemuegmmock.c | 67 +++++++++++++++++++ .../acpi-egm-memory.aarch64-latest.args | 1 + .../acpi-egm-memory.aarch64-latest.xml | 56 ++++++++++++++++ tests/qemuxmlconfdata/acpi-egm-memory.xml | 27 ++++++++ tests/qemuxmlconftest.c | 5 +- 7 files changed, 157 insertions(+), 1 deletion(-) create mode 100644 tests/qemuegmmock.c create mode 100644 tests/qemuxmlconfdata/acpi-egm-memory.aarch64-latest.ar= gs create mode 100644 tests/qemuxmlconfdata/acpi-egm-memory.aarch64-latest.xml create mode 100644 tests/qemuxmlconfdata/acpi-egm-memory.xml diff --git a/tests/meson.build b/tests/meson.build index 0d76d37959..312c05a5f1 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -174,6 +174,7 @@ if conf.has('WITH_QEMU') { 'name': 'qemucaps2xmlmock' }, { 'name': 'qemucapsprobemock', 'link_with': [ test_qemu_driver_lib ] }, { 'name': 'qemucpumock' }, + { 'name': 'qemuegmmock' }, { 'name': 'qemuhotplugmock', 'link_with': [ test_qemu_driver_lib, test= _utils_qemu_lib, test_utils_lib ] }, { 'name': 'qemuxml2argvmock' }, { 'name': 'virhostidmock' }, diff --git a/tests/qemucapabilitiesdata/caps_10.0.0_aarch64.xml b/tests/qem= ucapabilitiesdata/caps_10.0.0_aarch64.xml index 200873b3a2..30abf65675 100644 --- a/tests/qemucapabilitiesdata/caps_10.0.0_aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_10.0.0_aarch64.xml @@ -109,6 +109,7 @@ + diff --git a/tests/qemuegmmock.c b/tests/qemuegmmock.c new file mode 100644 index 0000000000..c915212f45 --- /dev/null +++ b/tests/qemuegmmock.c @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2024 Red Hat, Inc. + * SPDX-License-Identifier: LGPL-2.1-or-later + */ + +#include +#include + +#include "internal.h" +#include "virfile.h" +#include "virmock.h" + +static bool (*real_virFileExists)(const char *path); +static int (*real_access)(const char *path, int mode); +static int (*real_virFileReadAll)(const char *path, int maxlen, char **buf= ); + +static void +init_syms(void) +{ + if (real_virFileExists && real_access && real_virFileReadAll) + return; + + VIR_MOCK_REAL_INIT(virFileExists); + VIR_MOCK_REAL_INIT(access); + VIR_MOCK_REAL_INIT(virFileReadAll); +} + +bool +virFileExists(const char *path) +{ + init_syms(); + + /* Mock EGM device paths for testing */ + if (g_str_has_prefix(path, "/dev/egm") || + g_str_has_prefix(path, "/sys/class/egm/")) + return true; + + return real_virFileExists(path); +} + +int +access(const char *path, int mode) +{ + init_syms(); + + /* Mock EGM device paths for testing */ + if (g_str_has_prefix(path, "/dev/egm") || + g_str_has_prefix(path, "/sys/class/egm/")) + return 0; /* success */ + + return real_access(path, mode); +} + +int +virFileReadAll(const char *path, int maxlen, char **buf) +{ + init_syms(); + + /* Mock EGM GPU device file for testing */ + if (g_str_has_prefix(path, "/sys/class/egm/") && + g_str_has_suffix(path, "/gpu_devices")) { + *buf =3D g_strdup("0000:01:00.0\n"); + return strlen(*buf); + } + + return real_virFileReadAll(path, maxlen, buf); +} diff --git a/tests/qemuxmlconfdata/acpi-egm-memory.aarch64-latest.args b/te= sts/qemuxmlconfdata/acpi-egm-memory.aarch64-latest.args new file mode 100644 index 0000000000..773cc83946 --- /dev/null +++ b/tests/qemuxmlconfdata/acpi-egm-memory.aarch64-latest.args @@ -0,0 +1 @@ +-object acpi-egm-memory,id=3Degm0,pci-dev=3Dua-hostdev0,node=3D0 diff --git a/tests/qemuxmlconfdata/acpi-egm-memory.aarch64-latest.xml b/tes= ts/qemuxmlconfdata/acpi-egm-memory.aarch64-latest.xml new file mode 100644 index 0000000000..a62e6b1368 --- /dev/null +++ b/tests/qemuxmlconfdata/acpi-egm-memory.aarch64-latest.xml @@ -0,0 +1,56 @@ + + egm + 00010203-0405-4607-8809-0a0b0c0d0e0f + 524288 + 524288 + + + + + + 1 + + hvm + + + + + + + + + + + + + destroy + restart + destroy + + /usr/bin/qemu-system-aarch64 + + + + +
+ + + + +
+ +