From nobody Tue Aug 25 00:11:21 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) client-ip=38.145.34.151; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; arc=pass (i=1 dmarc=pass fromdomain=nutanix.com); dmarc=pass(p=none dis=none) header.from=nutanix.com ARC-Seal: i=2; a=rsa-sha256; t=1783415360; cv=pass; d=zohomail.com; s=zohoarc; b=C+QYs6FE88Ril+ZUUK+cH9p6dpBypRd7vi9EFHysj3zCT0Quip2fevh89MtRpZ2xeGrHCbmt+kY54GFxjk6dMABOSJs9j2DY4w4d3pE+bRffJGwIDNk5TWe4gcMWNkgQMGpnXIRPMYTiQn1EJcp8CKoGZmPrsb4bJZFNZXyxoxQ= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783415360; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=heAfW9VOkgeaW94SiDC3ERMnBVq+TVb+mNh5AT56SuI=; b=WtbugEcE0R5fblu4eRdWJIFu0V/8DcZLWkDBj6fI95P0hj0MMusYGUyWhuPSM54mz3PXucmBBTrwxOY/PA9/Mkxk/KFXt7ui6H5UGsuf3/V8s+qsm9PngFTKZuE8r0sYUVLGja+szeznDp8kYCSN3AIZ7mRUog+lEPiQA7exfs8= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; arc=pass (i=1 dmarc=pass fromdomain=nutanix.com); dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [38.145.34.151]) by mx.zohomail.com with SMTPS id 1783415360728959.3817864182721; Tue, 7 Jul 2026 02:09:20 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 6F23441B06; Tue, 7 Jul 2026 05:09:19 -0400 (EDT) Received: from [172.19.199.7] (unknown [10.16.107.18]) by lists.libvirt.org (Postfix) with ESMTP id D3B4641DE0; Tue, 7 Jul 2026 05:04:57 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 6C13341976; Tue, 7 Jul 2026 05:04:00 -0400 (EDT) Received: from mx0b-002c1b01.pphosted.com (mx0b-002c1b01.pphosted.com [148.163.155.12]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 6C12E41CC7 for ; Tue, 7 Jul 2026 05:01:16 -0400 (EDT) Received: from pps.filterd (m0127844.ppops.net [127.0.0.1]) by mx0b-002c1b01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6678FHG01860467 for ; Tue, 7 Jul 2026 02:01:15 -0700 Received: from bn1pr04cu002.outbound.protection.outlook.com (mail-eastus2azon11020086.outbound.protection.outlook.com [52.101.56.86]) by mx0b-002c1b01.pphosted.com (PPS) with ESMTPS id 4f71q05sfe-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT) for ; Tue, 07 Jul 2026 02:01:15 -0700 (PDT) Received: from DS0PR02MB10202.namprd02.prod.outlook.com (2603:10b6:8:1aa::10) by MN2PR02MB6622.namprd02.prod.outlook.com (2603:10b6:208:1df::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.181.14; Tue, 7 Jul 2026 09:01:14 +0000 Received: from DS0PR02MB10202.namprd02.prod.outlook.com ([fe80::6312:3f4:fe13:41d5]) by DS0PR02MB10202.namprd02.prod.outlook.com ([fe80::6312:3f4:fe13:41d5%4]) with mapi id 15.21.0181.008; Tue, 7 Jul 2026 09:01:14 +0000 X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-3.9 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RCVD_IN_DNSWL_LOW,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nutanix.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= proofpoint20171006; bh=heAfW9VOkgeaW94SiDC3ERMnBVq+TVb+mNh5AT56S uI=; b=JApDC9/dMawooM6PGKLVZWPQl2kJBDYnh8pYFsd6jIAJIoWR/AuP/KoQs dB5L27HGr61qBH/OFBHc4Dh1HL9D2mq2csqM7gvi/XDbtQByV9DS5w342owWKA33 fdAmWKP5ObZdCKH5TD9Ae3DLJeRfupfg6213TLo9skKLuha7dcQASoiOUUU+ooi3 nf2++UiEGIDfU0rutPGM6fZkm75JgOzlSVSPsesw2jNdGGuOhiipW8yjAlQgfasX ZBSJZfZhgimzT2S3Txv1Yh1+Zf46m/SDZgv466XaX8P+3w8N8p6tLlTIYYdcA2KD EnIX3LzQb+oxuleBY8WXVzEQPL0lw== ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Pq+Fnhox9B9fcCvYXULgK7+CtY5MeDum1RSCTIeqSGUQiDVauhiCuP11d/Cg91OiHIjRD01gEciI9fq/741uI9Pzep4XTBh0MemS1iYQ2dZrO9DYxbt8pzLFHlh0DRK6H1oiNgJP5X1tKo57Ual3indqvVeWmSsDVFyij2l4XnhsUFt9g0UHc30JL9wG9TtLaVMTwuDdTjZ4P+GxqJd3DXWbEQCo5oEvl5zxlffHEO4pu6qCe4jaFGV9mAkoO+mK6402XVDSLXQCoQwZmeJ4tmZsnD4Rsy3EoTXi2rlAntEeDgb0D5tQUZvxxsNAM7llcIdZ8t4DJMtsIfzHANYVoA== 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=heAfW9VOkgeaW94SiDC3ERMnBVq+TVb+mNh5AT56SuI=; b=K1NK6s9iZofRzGWT9pM7SEfM0G2L5EYkGQJVXWPSP/Cphthjse1/fvuYNF/28ex5NpizkEauB3tE+YyQOjd2UvE4hkae3AXcUzFRvoIr72wTTcGxwsGbJt2qai7fRB23dF+MiPjEy5/i3XC12fdFdUmoDmsXK4gsIOevGs8biAxcgs9h74kW6keoKwTPJICKsbF727+Dp0t9VG1CCW8xEnSr5TUf9VBmnx7iIUrfpmnY3ddbX9x8hsPrPHxk9tVoO6NRlt/9CcdaEQYctyG9vEZ5qpS/oWrUMECIYeix5cfWVdajLFj6MG8wOhFbL1VhCgItUNqinOW6soDsrOKGAg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nutanix.com; dmarc=pass action=none header.from=nutanix.com; dkim=pass header.d=nutanix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nutanix.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=heAfW9VOkgeaW94SiDC3ERMnBVq+TVb+mNh5AT56SuI=; b=UQl95iZkVKu7q6hCH2Ot8/fbwlUoFl3agdaPaNL1lBEodTiCoUnDbbRXjcICl+YIsi2Kq2EAErZXH9nsdqvVIYs0iyr5hSYuMPTwedqjiq/bKtLYGCulT4LdOQRXEIRLxRI8NMDRTMjPu/UmIJFiDPaEri5eqDUKMqIyQlADUx1zRDF0mCQZfVYa3AseJAdPP5E0aQAka6ck+WK16H3dDHwumYa3t9YOUA25JfLQRH2e9jxpFC7nvYqCpjpOgqgQw2xBeiLdZ5fntDfd9ZZYegMZrQw2K3hG0tIWokOngM+SzQP2suzTxTA44tVf7ShlDUd6N3yy2+GBDiVcPUcjiA== From: sandesh.patel@nutanix.com To: devel@lists.libvirt.org Subject: [RFC PATCH v2 2/5] Add support to query ARM CPU property values Date: Tue, 7 Jul 2026 08:23:57 +0000 Message-ID: <20260707083129.1138945-3-sandesh.patel@nutanix.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260707083129.1138945-1-sandesh.patel@nutanix.com> References: <20260707083129.1138945-1-sandesh.patel@nutanix.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: CYZPR10CA0004.namprd10.prod.outlook.com (2603:10b6:930:8a::9) To DS0PR02MB10202.namprd02.prod.outlook.com (2603:10b6:8:1aa::10) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS0PR02MB10202:EE_|MN2PR02MB6622:EE_ X-MS-Office365-Filtering-Correlation-Id: 2ecdeb58-86e5-458a-bd80-08dedc064c42 x-proofpoint-crosstenant: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|23010399003|1800799024|366016|18002099003|22082099003|6133799003|56012099006; X-Microsoft-Antispam-Message-Info: ovR15EFzsUucgiGOnFD0O3Gw8tIyXUOXOq/1E2zT+qCQUYG6r+5vKbYRopdYSwG8lDNGntuQBrRNTjL/WwEIdW+T8p613ySmAb58W7uT0p45WTPDbKqxKTXHCmGS8+Wv9njtzK/NeriiAemcdoytElPRJXRBqsbMIN/k4I9m6GaWi5rQ/yjmayYuOj0gGOXPArmmc01Yts/fbf3AMsIv4rLJjmndUGanq5Wpqyh/rw3ystSh9Kqrk+JSQyMHRy1sVn9PJfozakFl1JcJK0nbfLEufq6/ZGvzlQmb59NPxwEXmw4fh+i6AUu5I5vkuHrhrEd33sPNhTXdVyqh0hfA/Yjp8c+iletbYEu6pzOyZyPcSG0eiIx9FRbIFWSofYDXnU0tT3IeHj154WIspkrID/0K0Vo67VJbWn5bIagdGaSX76V3wJXcySBpmVC24Pkt1PoTxvvm6d5Da5WioXmq8d4/ENoU3+GfGyyako+OmuNr2AsE9aPkea3Tfvi8H3+PVSkV0w4jlAupDxeC4SbfW93MJSG4DzE3aa6o6OHfqQGO7d5OtG3zd0j8uRtmXM5GQsi/rlSoJ/eWkWnNMhMjUcCxtfxGtw8M4HKUtOlgH4PRm2zrT7ZIE3iTaR9iPWe8oFMaa1k+LLi9OrHOAIaf/onYG4OTO0XdgD8Rfs5gwts= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS0PR02MB10202.namprd02.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(23010399003)(1800799024)(366016)(18002099003)(22082099003)(6133799003)(56012099006);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?mdDnfGr8jfFJU0Wxg5Fem4g6TjpfnFFbStIhM1MyipkdwHd0vPcx9oqm86g1?= =?us-ascii?Q?dCq4wtdfA0Fa0eeXBJ/WXAY4usOd+o1vggtg0ZIoQvcG85emzatZkOmvI6T5?= =?us-ascii?Q?M9XEY1pwJtNaQ+u8oAaiAopXSmBzsbLR6HzDxQJ2sn3Yihh79aLPqQnC1HgY?= =?us-ascii?Q?TMLpvCCs5E2VEDj0LPLUlgPFxCpDdI3jJBcXd1aq38k5Ms5jmimH40+8k0tK?= =?us-ascii?Q?9LANOVfLbMwwjn04ZPT2gxedZFcnG45nCZ/5UH4ORA8g9TEMvx6tT5G/YZf7?= =?us-ascii?Q?vsOu28gGVwqpbO5MtceS1f1Y7zwvZF9XzcZdD1Z+h8e4/jZFpgvB5nPnwin0?= =?us-ascii?Q?uLOwtKKzvnLiQL5UJRdMgdV3rK1VQ2SLurSOLtrus7HeMQ0XaJqMFEfdcSs+?= =?us-ascii?Q?XGisP92cqDLy3SgmpjdVXdzlmx2he5f2919f2Ks4/R0yGsMaYF4UTf0xs4zX?= =?us-ascii?Q?PDU35mQ4Areki7OiYv3bUJC8vIppkwEfKs0Q1zjufw9mrDeTzXbrcpNg1K9k?= =?us-ascii?Q?QFpx0KkqMXeV/0hw2H0Pvivfh9cdeJJkL3tDwnanwMrbzkSCPiHyU/U+0L+v?= =?us-ascii?Q?bQyu5k/Sm+NxFLsoGcsROi7IDa8QRLMzbWfnXEtBSNDee1MLzMvbisn8CNHs?= =?us-ascii?Q?qAI+t8rV6eCuFAglzWxO4YbWCzjTdh62huQHCwqAQWEcIhBjRr2RVT2kzW1y?= =?us-ascii?Q?PJhvh3O77IKxZcgiVgLaobZR/9ethSvX5ZtTr6H7lP+xdoCOacrVJxZVqcp/?= =?us-ascii?Q?xrXXCWuWojJXowowXx8Skg5yS8srJl1/hge2ggOvt9G4F0bXR2B7RHzjgTPw?= =?us-ascii?Q?nFzEmYvdy0nExVVr0X/TkyxhABDHdsNy0U9fvfkrc87pgBY8hghNR2peWCiy?= =?us-ascii?Q?DuUE+d24tK/UqiWh8kS1axF8+9yf206sQBOca1n5yYwQ+tPscAPRKxbfAzA7?= =?us-ascii?Q?+3dBRMoeemOuCk+gQRUgDYTNodW0Q7iDBG8ptR1LtQglkb9NnznrZUgU9sJD?= =?us-ascii?Q?psKbSLt3Om+JMz0l+CGyXWJ3kwGzh/2axUz/+cXawxcd9keJB2E8P8gJ536y?= =?us-ascii?Q?aNVt+C7D5I/FhJstznfiyP0ECGn8Sd4BwkfPySL/s33Ypv847rLGAK7YLH7q?= =?us-ascii?Q?bzD55+WxaAbZdRtvaX/N5QG+ZQqInPSCtFt8D9a5bui8+ay+ICJ5LV0HiBC0?= =?us-ascii?Q?KiqEJEAfzVm68ckNyh3sFDKwyPE6XryRsnyzbHN2Ii8LLRBHNKUoBhmyCc7k?= =?us-ascii?Q?FTkOJoHH4aiwvTJM5ivF+ClsjZLJJpHtdw93GebojZnJtSnv5rD5DUvXruK0?= =?us-ascii?Q?Q45yWV2TxSliQcxDD23euSKw1GHH/lAdAwZoYxIJTwgg2zWh6CfUXTMjFxSd?= =?us-ascii?Q?bVgJBP6HIdHU4BoajxR9Zx8Vx68pIUEJZbulNYqp45mTccwQ9uKA6Vu13829?= =?us-ascii?Q?tohSqRFpBTMrDqnpEPmBxcqzbzTbNhtQriOVxfXy+Jo0UDgwOqIAD6HWQWqf?= =?us-ascii?Q?txcpQ3yH10Niw/g5r8cDw8nGlWTRKY5mTn9Lgyetwur6Dml/4Qfem9i9p/pd?= =?us-ascii?Q?uKeb8ebbzKVbWU/MddAqkz+OOnC6AFbD0yS7bWjMlHzRTwx08jTt98Pb0xgS?= =?us-ascii?Q?44EPzs95ncOXi8+p9K7lVMka4/J0e5kiF7FLLw6WjHZw9rcUInVRADVR93Rm?= =?us-ascii?Q?c1nSuF21xnK44jFSZfHyE4WLhX0HFj7gMTJc3O/0yT7R6+0bsmSsyyoh49Wl?= =?us-ascii?Q?XpL7sSoxojB1BcVYug6OYSXXVFcPBrM=3D?= X-Exchange-RoutingPolicyChecked: FBYxQXDMHeTZ0UFGZ4gdkypfVwaRJkG1msm1tEoRBL1qD+pzvfXVNsDVPUW89LfQ4Amn98SpLBwflJ7HDklsCEyu7ofFRJ/6bOuEhtzksPuAEbU1mqCRidSDsobmpF2nvk5pYDgjMkREIwGAkyZtTa0yLytSYNfaqaYCD5wyG+C8Kjo8HcDCPL5Ntj846f9EZ7KzcD0Y63YfYawXg83lPkoa0ypPoZ4Z5dFxhf1QowWOdOYjH89YM21+88QnCvr3pn2lLVIo2XkHVoxzKhXYwh0gqOg6rsTTBrpFuYga5uskDfnqGCJdg52irXthVj/0wbH8l7iOQHY9qfOBLspVRA== X-OriginatorOrg: nutanix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2ecdeb58-86e5-458a-bd80-08dedc064c42 X-MS-Exchange-CrossTenant-AuthSource: DS0PR02MB10202.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jul 2026 09:01:14.2722 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: bb047546-786f-4de1-bd75-24e5b6f79043 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: bM9cBDQezqPyVtesYO7K5+gdSAuPG04IO4UEMn0BbLQ9T04y2NqbAG1jicbZBdMjyPH69uIWEGYUWxCV3LbjmX6y7cuLI7wTPYFZ0JYx/+s= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR02MB6622 X-Authority-Analysis: v=2.4 cv=M/N97Sws c=1 sm=1 tr=0 ts=6a4cc05b cx=c_pps a=WS7M4Vp6MtIIvztawIUZGg==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=RAioF0-LDSMA:10 a=0kUYKlekyDsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=VofLwUrZ8Iiv6rRUPXIb:22 a=0LlEyIVc8U2lsR7dKhuH:22 a=64Cc0HZtAAAA:8 a=ybTZXA7WAAAA:8 a=JvOjMtc4jLZ1dNUK0XsA:9 a=HcEtEu571YGEX4aK26Fo:22 X-Proofpoint-Spam-Info: AW1haW4tMjYwNzA3MDA4NiBTYWx0ZWRfX6q1cAciVwyDT 74bJx4ZsaQKr+zMfh1G9+aA3/xq2EdCHK3+MzMG5eLy5wC4zFa2tm4Cy4kdPajKaco34Qkd5cVp Dkqn8zymvpVtwqfMQGQBKnxB7Sge+4Q= X-Proofpoint-ORIG-GUID: _HCD2WPdhjDDAYYj481FtSUZLCCk3gFD X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzA3MDA4NiBTYWx0ZWRfXxdDqgIhhRMUZ p1ROdEcu5VbsoL2Lf411g/KMg14PLzTTVtrHnhvddd8JIHGNYVvy0XSJYFIgELxLt8G3io4tvoF OFCU4MCbX4KlrXEQJwjeHCLZoMuqZbfjjrGFFJnIbSiYv7eJWFZLj730cBXuhllI03q16+ctY6w /M+yEY5JVQoNm0zvouZSHx8C67vEKabtreE9tBXkwD5pokS64P6Bu9+yijrCYBZrpmUNkxljiLu zhLbldSo7AVsmLR9YJOdN5iXhIxHQ0C5oWY8lmnU+/0rVocJcFsLFI40UXLLoBVbnBAr0iYPFM+ b9eg2I8hKm1s+KuNZVvhE2mw9uSLDieq8VMq6xC5LMy3rDIdibWDrg71bukn2xq1UCZr0DAopmf sZ9tVAFHIM+YOcV2wulip7FlN9axa16QzACk2g7edO9vOoqqiasex41PL8M4I/jQYyw2e4rKv8D VMX4GGriR4oF4SBF99w== X-Proofpoint-GUID: _HCD2WPdhjDDAYYj481FtSUZLCCk3gFD X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-07_02,2026-07-06_02,2025-10-01_01 X-Proofpoint-Spam-Reason: safe Message-ID-Hash: NUNZ4CFN6SNBRJGK3GGR2I7QP4SUSHGX X-Message-ID-Hash: NUNZ4CFN6SNBRJGK3GGR2I7QP4SUSHGX X-MailFrom: sandesh.patel@nutanix.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: shaju.abraham@nutanix.com, khushit.shah@nutanix.com, Sandesh Patel X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: pass (identity @nutanix.com) X-ZM-MESSAGEID: 1783415361774158500 Content-Type: text/plain; charset="utf-8" From: Sandesh Patel Unlike x86 boolean CPU features, ARM CPU features are exposed by QEMU as multi-valued properties whose accepted values depend on the host; only a subset of the possible values are valid on any given host. Add infra to query and hold CPU properties info. Signed-off-by: Sandesh Patel --- src/qemu/qemu_capabilities.c | 11 ++++++ src/qemu/qemu_monitor.c | 52 ++++++++++++++++++++++++++++ src/qemu/qemu_monitor.h | 26 ++++++++++++++ src/qemu/qemu_monitor_json.c | 66 ++++++++++++++++++++++++++++++++++++ src/qemu/qemu_monitor_json.h | 5 +++ 5 files changed, 160 insertions(+) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index e9a97f0cf5..d79941f6bd 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -813,6 +813,7 @@ struct _virQEMUCapsAccel { virQEMUCapsMachineType *machineTypes; virQEMUCapsHostCPUData hostCPU; qemuMonitorCPUDefs *cpuModels; + qemuMonitorCPUPropsInfoList *cpuProps; /* currently only populated on = ARM + KVM */ }; =20 =20 @@ -2094,6 +2095,7 @@ virQEMUCapsAccelCopy(virQEMUCapsAccel *dst, virQEMUCapsHostCPUDataCopy(&dst->hostCPU, &src->hostCPU); =20 dst->cpuModels =3D qemuMonitorCPUDefsCopy(src->cpuModels); + dst->cpuProps =3D qemuMonitorCPUPropsInfoListCopy(src->cpuProps); } =20 =20 @@ -2159,6 +2161,7 @@ virQEMUCapsAccelClear(virQEMUCapsAccel *caps) =20 virQEMUCapsHostCPUDataClear(&caps->hostCPU); qemuMonitorCPUDefsFree(caps->cpuModels); + qemuMonitorCPUPropsInfoListFree(caps->cpuProps); } =20 =20 @@ -3455,6 +3458,14 @@ virQEMUCapsProbeQMPHostCPU(virQEMUCaps *qemuCaps, } =20 accel->hostCPU.info =3D g_steal_pointer(&modelInfo); + + /* Query the ARM CPU property info. Only applicable on ARM + KVM. */ + if (ARCH_IS_ARM(qemuCaps->arch) && + virQEMUCapsTypeIsAccelerated(virtType) && + virQEMUCapsGet(qemuCaps, QEMU_CAPS_QUERY_ARM_CPU_PROPS_INFO) && + qemuMonitorGetCPUPropsInfoList(mon, &accel->cpuProps) < 0) + return -1; + return 0; } =20 diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index baa78dd6fe..a770054c38 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -3339,6 +3339,58 @@ qemuMonitorGetCPUModelComparison(qemuMonitor *mon, } =20 =20 +int +qemuMonitorGetCPUPropsInfoList(qemuMonitor *mon, + qemuMonitorCPUPropsInfoList **props_list) +{ + QEMU_CHECK_MONITOR(mon); + + return qemuMonitorJSONGetCPUPropsInfoList(mon, props_list); +} + + +void +qemuMonitorCPUPropsInfoListFree(qemuMonitorCPUPropsInfoList *list) +{ + size_t i; + + if (!list) + return; + + for (i =3D 0; i < list->nprops; i++) { + g_free(list->props[i].name); + g_free(list->props[i].composite); + g_strfreev(list->props[i].supportedValues); + } + g_free(list->props); + g_free(list); +} + + +qemuMonitorCPUPropsInfoList * +qemuMonitorCPUPropsInfoListCopy(const qemuMonitorCPUPropsInfoList *orig) +{ + qemuMonitorCPUPropsInfoList *copy; + size_t i; + + if (!orig) + return NULL; + + copy =3D g_new0(qemuMonitorCPUPropsInfoList, 1); + copy->nprops =3D orig->nprops; + copy->props =3D g_new0(qemuMonitorCPUPropsInfo, orig->nprops); + + for (i =3D 0; i < orig->nprops; i++) { + copy->props[i].name =3D g_strdup(orig->props[i].name); + copy->props[i].type =3D orig->props[i].type; + copy->props[i].supportedValues =3D g_strdupv(orig->props[i].suppor= tedValues); + copy->props[i].composite =3D g_strdup(orig->props[i].composite); + } + + return copy; +} + + void qemuMonitorCPUModelInfoFree(qemuMonitorCPUModelInfo *model_info) { diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index c2afb580e4..1653d63722 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -1455,6 +1455,20 @@ struct _qemuMonitorCPUModelInfo { bool migratability; }; =20 +typedef struct _qemuMonitorCPUPropsInfo qemuMonitorCPUPropsInfo; +struct _qemuMonitorCPUPropsInfo { + char *name; + qemuMonitorCPUPropertyType type; + GStrv supportedValues; + char *composite; +}; + +typedef struct _qemuMonitorCPUPropsInfoList qemuMonitorCPUPropsInfoList; +struct _qemuMonitorCPUPropsInfoList { + size_t nprops; + qemuMonitorCPUPropsInfo *props; +}; + typedef enum { QEMU_MONITOR_CPU_MODEL_EXPANSION_STATIC, QEMU_MONITOR_CPU_MODEL_EXPANSION_STATIC_FULL, @@ -1490,6 +1504,18 @@ qemuMonitorGetCPUModelComparison(qemuMonitor *mon, qemuMonitorCPUModelInfo * qemuMonitorCPUModelInfoCopy(const qemuMonitorCPUModelInfo *orig); =20 +int +qemuMonitorGetCPUPropsInfoList(qemuMonitor *mon, + qemuMonitorCPUPropsInfoList **props_list); + +void +qemuMonitorCPUPropsInfoListFree(qemuMonitorCPUPropsInfoList *list); + +G_DEFINE_AUTOPTR_CLEANUP_FUNC(qemuMonitorCPUPropsInfoList, qemuMonitorCPUP= ropsInfoListFree); + +qemuMonitorCPUPropsInfoList * +qemuMonitorCPUPropsInfoListCopy(const qemuMonitorCPUPropsInfoList *orig); + GHashTable * qemuMonitorGetCommandLineOptions(qemuMonitor *mon); =20 diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index 28f7d93834..d44a6ab270 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -5727,6 +5727,72 @@ qemuMonitorJSONGetCPUModelComparison(qemuMonitor *mo= n, } =20 =20 +int +qemuMonitorJSONGetCPUPropsInfoList(qemuMonitor *mon, + qemuMonitorCPUPropsInfoList **props_lis= t) +{ + g_autoptr(virJSONValue) cmd =3D NULL; + g_autoptr(virJSONValue) reply =3D NULL; + g_autoptr(qemuMonitorCPUPropsInfoList) props_info =3D NULL; + virJSONValue *data; + size_t nprops; + size_t i; + + if (!(cmd =3D qemuMonitorJSONMakeCommand("query-arm-cpu-props-info", N= ULL))) + return -1; + + if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0) + return -1; + + if (!(data =3D qemuMonitorJSONGetReply(cmd, reply, VIR_JSON_TYPE_ARRAY= ))) + return -1; + + nprops =3D virJSONValueArraySize(data); + + props_info =3D g_new0(qemuMonitorCPUPropsInfoList, 1); + props_info->nprops =3D nprops; + props_info->props =3D g_new0(qemuMonitorCPUPropsInfo, nprops); + + for (i =3D 0; i < nprops; i++) { + virJSONValue *item =3D virJSONValueArrayGet(data, i); + virJSONValue *sv_array; + const char *name; + const char *type_str; + int type; + + if (!(name =3D virJSONValueObjectGetString(item, "name"))) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("query-arm-cpu-props-info reply is missing 'n= ame'")); + return -1; + } + + if (!(type_str =3D virJSONValueObjectGetString(item, "type"))) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("query-arm-cpu-props-info reply for '%1$s' is= missing 'type'"), + name); + return -1; + } + + if ((type =3D qemuMonitorCPUPropertyTypeFromString(type_str)) < 0)= { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("query-arm-cpu-props-info reply for '%1$s' ha= s unknown type '%2$s'"), + name, type_str); + return -1; + } + + props_info->props[i].name =3D g_strdup(name); + props_info->props[i].type =3D type; + props_info->props[i].composite =3D g_strdup(virJSONValueObjectGetS= tring(item, "composite")); + + if ((sv_array =3D virJSONValueObjectGetArray(item, "supported-valu= es"))) + props_info->props[i].supportedValues =3D virJSONValueArrayToSt= ringList(sv_array); + } + + *props_list =3D g_steal_pointer(&props_info); + return 0; +} + + static int qemuMonitorJSONGetCommandLineOptionsWorker(size_t pos G_GNUC_UNUSED, virJSONValue *item, diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h index f4c093d717..11b07a6770 100644 --- a/src/qemu/qemu_monitor_json.h +++ b/src/qemu/qemu_monitor_json.h @@ -446,6 +446,11 @@ qemuMonitorJSONGetCPUModelComparison(qemuMonitor *mon, char **result) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3); =20 +int +qemuMonitorJSONGetCPUPropsInfoList(qemuMonitor *mon, + qemuMonitorCPUPropsInfoList **props_lis= t) + ATTRIBUTE_NONNULL(2); + GHashTable * qemuMonitorJSONGetCommandLineOptions(qemuMonitor *mon); =20 --=20 2.43.7