From nobody Wed Mar 12 17:42:03 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 1741392941555695.2121522210252; Fri, 7 Mar 2025 16:15:41 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id DECFF1A2A; Fri, 7 Mar 2025 19:15:40 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 0A93D180C; Fri, 7 Mar 2025 19:14:54 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id A3EF31895; Fri, 7 Mar 2025 19:14:49 -0500 (EST) Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2077.outbound.protection.outlook.com [40.107.237.77]) (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 13EAD1859 for ; Fri, 7 Mar 2025 19:14:49 -0500 (EST) Received: from MW6PR12MB8897.namprd12.prod.outlook.com (2603:10b6:303:24a::19) by SJ0PR12MB5610.namprd12.prod.outlook.com (2603:10b6:a03:423::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8511.17; Sat, 8 Mar 2025 00:14:45 +0000 Received: from MW6PR12MB8897.namprd12.prod.outlook.com ([fe80::7c55:5a45:be80:e971]) by MW6PR12MB8897.namprd12.prod.outlook.com ([fe80::7c55:5a45:be80:e971%4]) with mapi id 15.20.8511.017; Sat, 8 Mar 2025 00:14:45 +0000 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: * X-Spam-Status: No, score=1.4 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, FORGED_SPF_HELO,MAILING_LIST_MULTI,RCVD_IN_BL_SPAMCOP_NET, 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=M8rLvyoSIM9BXSwFMBed6g1hlgZncS3MhxIpIYOYpBrjbGYjp3bXLEsGj9JJ5skNuboqIcYjBbMMJ7PjJbt0AcECwdGuTeAJVYBKo5gL+C+YMl1KpRPC7DFQcY7YcZ7vXBjfAU1mb2lu+FzqyJciPXek2WTCXa1xZHlHHtONaRi6vxq0FQgZ4uqCFMiQ5wh/+HU3qBYM4VDCSRmFSsVt8XPlI2rSCJ3aXcbSqRZDiAfnvhc7g609zz6v5+db36/uYrHfvha9Txz73tcGkUkFFoUiqGWlw/Gh9icQmNaadGe1D68ZUP6CITb4VebVjd6R3FJxUys3bhMRZKROSz7+sw== 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=KWsflVLdxs0JkPoD612RKpTnqCCVix25Sx7y9ag4oaM=; b=tcetzgMAtx6ZBni5gw6LUvWv5mSkkY/e+Cp/Hbe2KnPTqvmfDmuR5onMQJ0PU1m56IeR8i70Rw8ZPLKNt4sLanYJQ/X4z+HMpbcsYqgSZEgjQRl3+PQaefNCA4XohHpJvFPwNYd17wBOq1FA7OjMlGPHRMqLmYiXQ31dtiNCY7SlcwIY2bOVfrQU/gUVNaWFt/ZgJQOQUARxQi2cVrnYaQgqh3COw6e2d/FC0zCHl9ZT7PfCFJyLUYFnk3AZNOyZgPmYuredfrDS0tTXdvOpgDaVSb3a/3GShPZODJnVC6W2wLnXmK/g90HNhceYZfj/+fmoxhJMv7sRoUA121vz8Q== 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=KWsflVLdxs0JkPoD612RKpTnqCCVix25Sx7y9ag4oaM=; b=tnJmMLRECGJ6Iz+N1TdgByViJp+9hwlwrM2ceMva90D5Clin1K5Rt8cVyBP0GJRfkgEnfywe9wJt4QP1TQE1OTyGlILr0i5ReFXZKb1WHKyDIgduyP6sSyi8dh1luxYaYvuq6Gm/CAz79tKT4lDZ6sD81hNjjGOb6cYnp9BDYQfAWnpEdDopyHewa+yq93bYjn3ET5tD81ib75HPaRTAP7SyogIcouwYnqz5v9o2xEF1iU3qFT1xNtUV2XNiAcH8ftEfIYi5B+b1md6CbgZfPuaiEoaG+eufYRRePyHXjNaUBl/zqukoO0syodEEOd8DhLMgiEOtWsXaZrcLQTMFwg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; To: devel@lists.libvirt.org Subject: [PATCH RESEND 3/6] conf: Add PCI configuration XML parsing and formatting Date: Fri, 7 Mar 2025 16:14:44 -0800 Message-ID: <20250308001444.1312285-1-mochs@nvidia.com> X-Mailer: git-send-email 2.46.0 In-Reply-To: <20250308001331.1311347-1-mochs@nvidia.com> References: <20250308001331.1311347-1-mochs@nvidia.com> X-NVConfidentiality: public X-ClientProxiedBy: SJ0PR13CA0178.namprd13.prod.outlook.com (2603:10b6:a03:2c7::33) To MW6PR12MB8897.namprd12.prod.outlook.com (2603:10b6:303:24a::19) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MW6PR12MB8897:EE_|SJ0PR12MB5610:EE_ X-MS-Office365-Filtering-Correlation-Id: 9e92c5b2-6273-4d27-d08f-08dd5dd63b25 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?Q7yxoWALQzU0NFfsd6xJrzLTfFcIbGfW7htaVFGi9PuKHyVzcNqc8q/Kgxkh?= =?us-ascii?Q?twrCYXqtlr+dug4C334Ju+XERBw6P/nKBFm8nBCqnFO+FYZXGVV0dbkTqZ5k?= =?us-ascii?Q?/VE91FfTLQNEdjDD4w02DA+dpUzh55MBc3zGpO5Zp9Qs9LFQ/3seEym2BzLG?= =?us-ascii?Q?mclB+mEW5Zdy/4GNllc8BJp/DUd3p1taCycT3gOd51eyu0EqlAYisy3ky8Ic?= =?us-ascii?Q?Lneg484arh/+Dnh2+SNyESqSkAKnQXAS8XXT9QNhH9akkW2LvNcBjs07dOPu?= =?us-ascii?Q?5e1D/4OGpjZkB5J3g/og8o5vHAC4/Eyo688p9tez71ARONK8y07O23HU2jk2?= =?us-ascii?Q?hoD7HThFvLQdhtafau8H83P59hKHNafxqpaU2i2HZNQjVsqAGLK5lOUxHPv3?= =?us-ascii?Q?nrIo7yGWgKj6fTQxfccKCpxMvzNfAYRiDWrzjzfDPv4oqyJy0WzsM8BRWO1j?= =?us-ascii?Q?QPjmY71QcS/mRJHGPTYVQMbEibC5h3RunbUVQAcgkGTblGBbujqgCMv0incO?= =?us-ascii?Q?znwFjVeKLiaigLr6TmB5UHe2ySorLT0a1PvjgNcXtil40aSxjDsidQEyfF8q?= =?us-ascii?Q?e1uq9np24D1LX2HO4gSq6nkZLeP238epGKtheNyTPvU0NUZKTYaic4WtMXWQ?= =?us-ascii?Q?+xpLoxGUAFvLZ0QYIUNo9faGr/9nQzzNPpr072GgbRQ3jNR3pFRp9stlWEMN?= =?us-ascii?Q?2h8lF/FP0jhfZfk5UGAFFnUVJ6xO72J29yk2IpwKNlyc7xZuQqXh6bZynf5C?= =?us-ascii?Q?/AHYBh4WIj5nayBGwsE2Lz/3gRsjylGV1ggKpFBtCoj8cgRjuPRmyPmFsDq4?= =?us-ascii?Q?nbuLKtgY9xOCp2F46TLxoT5dmmt/MSOUIQT79fUWoPoEimx4M9NPGpe9Cv4Z?= =?us-ascii?Q?E2wiINq446fWUQauMYJYS20VGq712PhpGI85u7ADJUGIxmqIHgRzwAElPDw8?= =?us-ascii?Q?U908w7u/AXwquarSCUC5XYbw0OXxs64mU5cdTe0NDUuSrHIlhoBvk7K/5exr?= =?us-ascii?Q?AUNihRprCfDpveRDnh5awUrOlzMX/wulrDuBfxnZ1MjkouNoNfJ6U+j2qcsr?= =?us-ascii?Q?MTca/V3W6Ypb50DW6ej6z2ifxOAPgbihn0aArm7H4wnxv0SMuFjVxj8hLkdv?= =?us-ascii?Q?pXZ4zpk/1+u0bPUhvCgdOjQryCb28++pOjiYAcAHXeeOy9TewrB/tmNFGiDy?= =?us-ascii?Q?JZ1597JIH6anT80IDMNEHuL6ExVy966InwyhsQ34uEJtUY1NgGjLT+AqpJue?= =?us-ascii?Q?/8dHNTo4qzM+DV4Hb6EW2Yh90afBPbXD3Sw4290eTFOBwlkxtzatWZiN1AhX?= =?us-ascii?Q?9ilM9igOJsyfxuTYxc0fTYJ8lun70l/UpAKL1T3E2yAYfjRaSYT8vGK9In7c?= =?us-ascii?Q?aQT1DfyjIdiq641a48DbhFRjJb0h?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MW6PR12MB8897.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?KgtUOBSLDxjUlW8Ye9Lp4Q+LALKgo57BJQhoXI7+rpz6i0MTgHjGV+Gxidsu?= =?us-ascii?Q?s8tu/HWlB2sGMQnmnU1JbuLn0fQSHdUgwe/h++/PmwGAyhw+PqobkKor+uRl?= =?us-ascii?Q?9PZdUqA7/bHNYuIFQsPMe7fAEqm6WJHnvClhMypuALKnLf9rLTQ5sdrJBVHg?= =?us-ascii?Q?MihW+AcMQYx67Exe9KxXDUBF9gYyJhXCyC/BKqAnPbQSef3d69WSVtLw0aP7?= =?us-ascii?Q?LdV8cSQKhG/slrhua5nDMzlF8jNLAgHB6xjw5YF748b6Q8WQE/sTkUwtdzN1?= =?us-ascii?Q?u4Pj1pNiOrBqBp1Kz+3txLQgGwPwhuyXUn9Qae2++hXWqzWkV9X8bKmDboHK?= =?us-ascii?Q?53r5sl0P8q3IEh0s0lBlHNBrvTSlAr4BGLHvD52qkQy44F0jsioBL09K3D7A?= =?us-ascii?Q?aHQob6zoh13BMY/OU2nk1foP2AMfj0CatkHsOUEgSU0VEjH9DivuKLPckuWP?= =?us-ascii?Q?RpzfDxQfkdZkwLBFn/vM3wm8e1/NHUw9aW7wdJ7Pzvr3F6h0xyhOzAHrgGT4?= =?us-ascii?Q?yF6AN415v8nXyNxWAR/pETHU6WPUl7o0cmY3lOhCCz/9wi9iwYfGEyLSB1Jl?= =?us-ascii?Q?L7YSUj+yzAZquBHzzQu3L7GyCJaFcjpI4KWvXeUB3HTX8sj0zHRuDGg9H2uV?= =?us-ascii?Q?M1VuJOMxO8DiXCGXb7kRF1zUlTIioGq7Za+UHbZQPTpFhBVmrRqvC0KAuVeg?= =?us-ascii?Q?upkU1cXIZxQA0prRAovYLJdj6wjvbjog5j7WTv5RaRBRCJby+slFiMGlZ4Bv?= =?us-ascii?Q?KyzF6d4bzeUbRVSgWmbW0Ofm4dyao/YhJRzXR62jEIJcFp9pGyGDAaN+6gEG?= =?us-ascii?Q?Ip7JscghW/y49xUE8y5+LcZi6203Hn882K3VoWOS2ZiBpjKnLvu/E8E0s9t8?= =?us-ascii?Q?RTN2tRlvwl+TYA6pKtNFPP4hIeyDkgXjyvayeQoW14+RBRxmkajOWFCjJgWo?= =?us-ascii?Q?HTrJJ+8ZPNiQcAXOKT9/yyltzC3IZj4iirB8UFBddICv+L8z5uxE7bRNiQeJ?= =?us-ascii?Q?CUCet9mem3UDSF6D/8McMaHN88i5t2V45USSjZ+AQRKV9tiAEVy3zsf0vD9t?= =?us-ascii?Q?bDZ0aTOa7K9XtULVceQBbyC0Q8ljLBm7Mq5EJRANJaXfMPaqOkAYMVD1WD7b?= =?us-ascii?Q?b1J0SGQe2lVWN4h99lbRckHdrOihab0KjzdV+v92oZxAtF3K1RqGE0qiTpd/?= =?us-ascii?Q?HFEGlxXXa3tKzNeeve92wOw4RKEAXXX0Ws4HQxIDm1yayaTxK1rhOwHf5Sqw?= =?us-ascii?Q?A2XMOXUkl+eK15gzkvt5uRyE9hPY/4oc+l1qmwNYoxsUKpWqs3/4qt6xcuzp?= =?us-ascii?Q?F9FdCGQvkutWKYnRzFaU1XtqRHzO81n5jGPy3frp42/mY3SeWYp0r3N4kqbY?= =?us-ascii?Q?i0YguGgiitgK/mQFmZh0GSWQ+F2ysgAGl0Qm2XILmc2ufWk90MSTPa0fzaCC?= =?us-ascii?Q?F0/hJM/BSPtc2huFRo2OfXWljf/V2rwRSdsd63gXlA7unfjlmPyMBzyIj2RW?= =?us-ascii?Q?QwUsoFY6YUQE3GBB8z/d3BCyolMMn5NNpCRZ3xJHPxpnoCZb9hJm9Ym5HVpu?= =?us-ascii?Q?d9sW5AfXYXjSZRfElWo0RpyDT8dzscJpVTUD09+q?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9e92c5b2-6273-4d27-d08f-08dd5dd63b25 X-MS-Exchange-CrossTenant-AuthSource: MW6PR12MB8897.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Mar 2025 00:14:45.4265 (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: vgXxVgin5HIv0qKL85FKE5T6+eZd0EwupsCa0361Y44OPpRhvCuAAkbA1kA93QFaSooNunoWsLkyVkIOEQiKmQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR12MB5610 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: WKQLM65B5XAMHW7ZSPHCEJ4BXNXHHEDZ X-Message-ID-Hash: WKQLM65B5XAMHW7ZSPHCEJ4BXNXHHEDZ X-MailFrom: mochs@nvidia.com 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; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header 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: "Matthew R. Ochs via Devel" Reply-To: "Matthew R. Ochs" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1741392943469019000 Content-Type: text/plain; charset="utf-8" Add XML parsing and formatting support for PCI configuration: - Add virDomainFeaturesPCIDefParseXML function - Add virDomainFeaturesPCIDefFormat function - Wire up parsing in virDomainFeaturesDefParse - Wire up formatting in virDomainDefFormatFeatures - Use g_steal_pointer for memory management The highmem-mmio-size property can now be specified in domain XML and will be properly parsed and formatted as a domain feature. Signed-off-by: Matthew R. Ochs --- src/conf/domain_conf.c | 101 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index acc30ffca765..126ae1e092b9 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -16967,6 +16967,48 @@ virDomainFeaturesTCGDefParse(virDomainDef *def, } =20 =20 +static virDomainPCIDef * +virDomainPCIDefNew(void) +{ + virDomainPCIDef *pci; + + pci =3D g_new0(virDomainPCIDef, 1); + return pci; +} + + +/** + * virDomainFeaturesPCIDefParseXML: + * @ctxt: XML context + * + * Parses PCI configuration from XML under features/pci. Currently only + * supports the highmem-mmio-size property for aarch64 virt machine types. + * + * Returns: parsed pci definition or NULL on error + */ +static virDomainPCIDef * +virDomainFeaturesPCIDefParseXML(xmlXPathContextPtr ctxt) +{ + g_autoptr(virDomainPCIDef) pci =3D virDomainPCIDefNew(); + unsigned long long size; + int rc; + + if ((rc =3D virParseScaledValue("./features/pci/highmem-mmio-size", + NULL, + ctxt, + &size, + 1024 * 1024 * 1024, /* Default scale: G= iB */ + ULLONG_MAX, + false)) < 0) + return NULL; + + if (rc =3D=3D 1) + pci->highmemMMIOSize =3D size; + + return g_steal_pointer(&pci); +} + + static int virDomainFeaturesDefParse(virDomainDef *def, xmlXPathContextPtr ctxt) @@ -17213,6 +17255,13 @@ virDomainFeaturesDefParse(virDomainDef *def, break; } =20 + case VIR_DOMAIN_FEATURE_PCI: + if ((def->pci =3D virDomainFeaturesPCIDefParseXML(ctxt)) =3D= =3D NULL) + return -1; + + def->features[val] =3D VIR_TRISTATE_SWITCH_ON; + break; + case VIR_DOMAIN_FEATURE_LAST: break; } @@ -21195,6 +21244,25 @@ virDomainDefFeaturesCheckABIStability(virDomainDef= *src, } break; =20 + case VIR_DOMAIN_FEATURE_PCI: + if (src->features[i] !=3D dst->features[i]) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("target domain pci feature %1$s does not = match source %2$s"), + virTristateSwitchTypeToString(dst->features= [i]), + virTristateSwitchTypeToString(src->features= [i])); + return false; + } + if (src->features[i] =3D=3D VIR_TRISTATE_SWITCH_ON) { + if (src->pci->highmemMMIOSize !=3D dst->pci->highmemMMIOSi= ze) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("target domain pci highmem-mmio-size = %1$llu does not match source %2$llu"), + dst->pci->highmemMMIOSize, + src->pci->highmemMMIOSize); + return false; + } + } + break; + case VIR_DOMAIN_FEATURE_MSRS: case VIR_DOMAIN_FEATURE_TCG: case VIR_DOMAIN_FEATURE_ASYNC_TEARDOWN: @@ -27903,6 +27971,34 @@ virDomainFeatureTCGFormat(virBuffer *buf, } =20 =20 +/** + * virDomainFeaturesPCIDefFormat: + * @buf: buffer to write XML data to + * @pci: PCI feature data to format + * + * Format the PCI feature configuration as XML under features/pci. + */ +static void +virDomainFeaturesPCIDefFormat(virBuffer *buf, + const virDomainPCIDef *pci) +{ + g_auto(virBuffer) attrBuf =3D VIR_BUFFER_INITIALIZER; + g_auto(virBuffer) childBuf =3D VIR_BUFFER_INIT_CHILD(buf); + + if (!pci) + return; + + if (pci->highmemMMIOSize > 0) { + virBufferAddLit(&attrBuf, " unit=3D'G'"); + virBufferAsprintf(&childBuf, "%llu\n", + virBufferCurrentContent(&attrBuf), + pci->highmemMMIOSize / (1024 * 1024 * 1024)); + } + + virXMLFormatElement(buf, "pci", NULL, &childBuf); +} + + static int virDomainDefFormatFeatures(virBuffer *buf, virDomainDef *def) @@ -28261,6 +28357,11 @@ virDomainDefFormatFeatures(virBuffer *buf, virDomainAIATypeToString(def->features[i])); break; =20 + case VIR_DOMAIN_FEATURE_PCI: + if (def->features[i] =3D=3D VIR_TRISTATE_SWITCH_ON) + virDomainFeaturesPCIDefFormat(&childBuf, def->pci); + break; + case VIR_DOMAIN_FEATURE_LAST: break; } --=20 2.46.0