From nobody Fri Oct 31 11:29:11 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=amd.com); dmarc=pass(p=quarantine dis=none) header.from=amd.com ARC-Seal: i=2; a=rsa-sha256; t=1748335808; cv=pass; d=zohomail.com; s=zohoarc; b=RXu4valnVbtvFrIY2sPCskxpWaABqvfMu+BBggyrzdGTwpl5bxth+diQ/LfRTlrFrfySChiVm/s9OWn2aC2uM+iwwlfNso6ZD+mbkY7TQiUdd0mS8jjG7ImHNtLFgz8taMSMiq8+/wyEpNXuMXK2sncqf8BwOFe/Xohg12UmrvU= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1748335808; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=GM8OZuCvDFaV06J9Gzt1WwF6Tfxsr646qNHeVMRmifA=; b=Wtwh3yA/3VUc0bSuZDyfTAiQ2Ocew7AtuS7XxxYXOdHhBdgq9TBCH+DkQIp6dR0ERB1ynb96e3xbDA90KP/Ot8x2Yof8LY6J/whY4GfYG4Ij+w8IC4X6HvoYwEC8s57cnhrtoI8avb6wCj8wluK+6LXZNjdekmXDHRi8tOYMUn8= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=amd.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1748335808286400.089991954713; Tue, 27 May 2025 01:50:08 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.997943.1378744 (Exim 4.92) (envelope-from ) id 1uJpzy-0003EU-K0; Tue, 27 May 2025 08:49:26 +0000 Received: by outflank-mailman (output) from mailman id 997943.1378744; Tue, 27 May 2025 08:49:26 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uJpzy-0003EL-Gl; Tue, 27 May 2025 08:49:26 +0000 Received: by outflank-mailman (input) for mailman id 997943; Tue, 27 May 2025 08:49:24 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uJpzw-0002ks-UW for xen-devel@lists.xenproject.org; Tue, 27 May 2025 08:49:24 +0000 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on20609.outbound.protection.outlook.com [2a01:111:f403:2412::609]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 78a08d85-3ad7-11f0-b894-0df219b8e170; Tue, 27 May 2025 10:49:18 +0200 (CEST) Received: from MW4PR04CA0155.namprd04.prod.outlook.com (2603:10b6:303:85::10) by SJ1PR12MB6026.namprd12.prod.outlook.com (2603:10b6:a03:48b::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.27; Tue, 27 May 2025 08:49:15 +0000 Received: from SJ5PEPF000001F6.namprd05.prod.outlook.com (2603:10b6:303:85:cafe::55) by MW4PR04CA0155.outlook.office365.com (2603:10b6:303:85::10) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8746.30 via Frontend Transport; Tue, 27 May 2025 08:49:14 +0000 Received: from SATLEXMB04.amd.com (165.204.84.17) by SJ5PEPF000001F6.mail.protection.outlook.com (10.167.242.74) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8769.18 via Frontend Transport; Tue, 27 May 2025 08:49:14 +0000 Received: from penny-System-Product-Name.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Tue, 27 May 2025 03:49:09 -0500 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 78a08d85-3ad7-11f0-b894-0df219b8e170 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=nY/VuKhGIY2Cjxz6Qe0YYIWYqJzIp+UMHZvjmDpHVNr33Le8UQUHgmZ7FS3KBD9ReAv46PGwH2Vj4HuHbV+YfT4UO2FKVAXy4rG7Acy7Lj5T3/hveOutHuTrmq6UDyTfFZmRuHX9jxMPPAlJS649tnODzn2dCJHZ3cI/s1IBabhNF00NMsTl/XDkIJA1awi+RCXR3UdOD3SQEioivr5ivEqCUBZm7vjrCX45duWWVEVmaRFGeMthPzwcgJfppRbdlI82kXuVKx9EBd9M+nf4b7wKI5utt3lxLPFyD6edkPjWHyRWbMrggF+S0AfqzGQGtTIzmd1+XJINOmBH4fMFUg== 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=GM8OZuCvDFaV06J9Gzt1WwF6Tfxsr646qNHeVMRmifA=; b=ehVusa4wf7oNcsLdZM3n3cAHASPCh/eGANM9bFBF0dzVgr/haOpDMhryL18ZfrufyRbFwY/9SGONsxVtiCAU/z2inhw2SKq2aJJ40l15u2CTZdEXVC3Yl5iwkfKDZoElf8G6W8C5qCKXiAQ5rQsQw/AsRqmZYEiqetLH5+YJmSIiBQbvuAOZX7WUDrkBpUeusPycCldIPiJazBEulkcn0MZIEZHSftvzCZSkRapRNDzG5wA3MUI3azKpqovr0AkfUUnkqQxGSKsvlCitMmL978WF0a6VQdswoMpDDvex7Ta2iSPWZI1iES7EfLVxeDdJP+IeE3ezSn9rz4eql+YnWA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=GM8OZuCvDFaV06J9Gzt1WwF6Tfxsr646qNHeVMRmifA=; b=YCqE/ruBk0VGbR9WnEbaYlFpMKvcmxiCwF5k6lUff0iFff/4g08hUIcVbozc3e3KISrqvzLXDwtOOMvVZ9nMYvpbP3hgzxJYNytWXdfNqqhuUsnXuaWyNzrcsGiUKJ1cO7V29XHSoiGkhU1cWJ/NgDgeoIC8yG6lqbQ5C1bh58E= X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C From: Penny Zheng To: CC: , Penny Zheng , Jan Beulich Subject: [PATCH v5 01/18] xen/pmstat: guard perf.states[] access with XEN_PX_INIT Date: Tue, 27 May 2025 16:48:16 +0800 Message-ID: <20250527084833.338427-2-Penny.Zheng@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250527084833.338427-1-Penny.Zheng@amd.com> References: <20250527084833.338427-1-Penny.Zheng@amd.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ5PEPF000001F6:EE_|SJ1PR12MB6026:EE_ X-MS-Office365-Filtering-Correlation-Id: 1cf9b58e-c9eb-4852-bbc0-08dd9cfb5be3 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|82310400026|36860700013|376014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?i7MnWAohelBN//pyrp9s1twi4DqIhkVlXGAWuJLyKzDmNiSbrbnUv4lAiNjJ?= =?us-ascii?Q?+C158nMOcy5tu9oa8+/daHIvRiLF/gbqcMZ/ioU+NlS8ebC1xmc1iEQ3Itmg?= =?us-ascii?Q?AQhFACE3syFflzS3PIblNng8U9DrnpP7gkT4XD+6x/kIrp7BArhYNA+Phq0L?= =?us-ascii?Q?oajVkrIa6PCqzBiV1u1mZ3H6Ts+SjRO0JrYyUqvOA5EJ5cw9tAcjTtJvGItv?= =?us-ascii?Q?KtDqsxfLGu8aAMjBBIdpNiI/LjoZUfmfg45yUg5pVjFd/Hmn6s1u11TvQSjU?= =?us-ascii?Q?FswAK8XWEaXNF38Ev3el8P9TyiZfz9Jat8KLv0bIbZ3x80K3GQw23hrt7VeA?= =?us-ascii?Q?1mFkQ/jxC9xX0bAHRgHwjsY3V9yr9US9dV6imh+xjQokZ+PtodpEGAzYW1Ks?= =?us-ascii?Q?Lc9M0WRX03GA5Rb/rUrEluw7lRlx0tmdmWmEwjxGg3u9f08F5rNzaQwb7ysT?= =?us-ascii?Q?N6VDMgdqmzY1B2axky1aVUeDGk9iavgcNgqE2JXkktkJ+mjVgCklAabZtg+V?= =?us-ascii?Q?ELSDN8jWK7cHykAYYnzV5by/7YaAnKFO0pZnxRBHPQEXgkxAvrYN0708nEmv?= =?us-ascii?Q?biQ5jxk11+TeR9PYNMkSAX/LCDYR9EeiNk0rvUhknDDBkpn2VukZkzh4YoWL?= =?us-ascii?Q?OMxjFDlLB9RqdeMGh79dMXYKzGW3+mfr9daQeJzqWQnD+u1wk8m7Jbs2+c2i?= =?us-ascii?Q?kJ8cjXCTwnfGVCwSr7LAxSOOKJkJ5v29D3oqW2DP5OkJZbdJo93nJTyA2Gx7?= =?us-ascii?Q?SA7Z+dRlQxK+v8fqrcKBuym1IceL2Kj4bapIwoGWLspfMPjmlSZ2Sht38puq?= =?us-ascii?Q?dsQPIAT7DLDKWlOvZ+stFUsO9n2V3WduZyASbHYFKfyhelUkIBoCJaHMPd1T?= =?us-ascii?Q?ZHisVQKw1BXhChAW9J3KIPM1HP0nDMGh9xC3+KpqXlgniOPFdlCbZrDWOHJs?= =?us-ascii?Q?AFmuUozhtDPVyciOwez9jH0m3kBifbrA7/P/PrNLdIreCBxxV6cp/60gN0Yr?= =?us-ascii?Q?r1HoLooJzqgAT/Mj2974IJWrFHU1s+RLtmAYoI0kFMvi9nTD5GkimyWD9ZZr?= =?us-ascii?Q?PsNMazTzCbdy4gGYJmH1Mrqe9DYgMtorG4mwJD8PBxIJ1bt8AhVHFk/B1aUS?= =?us-ascii?Q?HjDO0uLbSqDYd/PeFZamE4B5OvggqNfyOcijWzOvptq9zTiGFd8Z6q+KEQDe?= =?us-ascii?Q?ho+RlxY6wdfVNPYc+PTCCi3i2BzT3qR6SmnmJjiESoDERuPXYgtkjwmGPxuZ?= =?us-ascii?Q?Ykm9CXaYNmpXnzQouURMJAIftRhz2JPLnVZHIitNtr+Hn/xFA+LsVxTuPORH?= =?us-ascii?Q?j7nqfdjX9azvVp3GQMFP8/xk9T1gU7WaunoaSqVGCTlKvsiB1Bmx9N/12qtJ?= =?us-ascii?Q?7mFqSTDcf4rr/S6s8HYgWOd24Fbt48aWZeYFxdaVXN8Eh9LhIyCh/nM4Hqcm?= =?us-ascii?Q?SWoFE4/nFxQtluZ0G7b74mXuoAUePdVyPhYSCCweVXCG5Rv3T+1S8VPvddC3?= =?us-ascii?Q?nDkCY4N1Im9pF1J1Nj5q1ek9DByjLhoAE1PY?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(1800799024)(82310400026)(36860700013)(376014);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 May 2025 08:49:14.7514 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 1cf9b58e-c9eb-4852-bbc0-08dd9cfb5be3 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: SJ5PEPF000001F6.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ1PR12MB6026 X-ZohoMail-DKIM: pass (identity @amd.com) X-ZM-MESSAGEID: 1748335809330116600 Content-Type: text/plain; charset="utf-8" Accessing to perf.states[] array shall not be only guarded with user-defined hypercall input, so we add XEN_PX_INIT check to gain safety. Signed-off-by: Penny Zheng --- v4 -> v5: - new commit --- xen/drivers/acpi/pmstat.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/xen/drivers/acpi/pmstat.c b/xen/drivers/acpi/pmstat.c index c51b9ca358..b7fcc02db9 100644 --- a/xen/drivers/acpi/pmstat.c +++ b/xen/drivers/acpi/pmstat.c @@ -228,10 +228,13 @@ static int get_cpufreq_para(struct xen_sysctl_pm_op *= op) ret =3D copy_to_guest(op->u.get_para.affected_cpus, data, op->u.get_para.cpu_num); =20 - for ( i =3D 0; i < op->u.get_para.freq_num; i++ ) - data[i] =3D pmpt->perf.states[i].core_frequency * 1000; - ret +=3D copy_to_guest(op->u.get_para.scaling_available_frequencies, - data, op->u.get_para.freq_num); + if ( pmpt->perf.init & XEN_PX_INIT ) + { + for ( i =3D 0; i < op->u.get_para.freq_num; i++ ) + data[i] =3D pmpt->perf.states[i].core_frequency * 1000; + ret +=3D copy_to_guest(op->u.get_para.scaling_available_frequencie= s, + data, op->u.get_para.freq_num); + } =20 xfree(data); if ( ret ) --=20 2.34.1 From nobody Fri Oct 31 11:29:11 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=amd.com); dmarc=pass(p=quarantine dis=none) header.from=amd.com ARC-Seal: i=2; a=rsa-sha256; t=1748335806; cv=pass; d=zohomail.com; s=zohoarc; b=O0EV3ZJ1yme8ITMR9saMVGzvDgCyDjIBoGGl2pz9Bsrb8yljrydhjDS7SiwLMLCVYRYDGClV3UioPQwVPhgjcuB4nJpQRBxmVpJXxL4zbnvEbo/ysnPxIkbGe2uym7PbR89NmqJX7qsqXjEoWnNUxZPdhpK9+sS8fyKPIvU8ats= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1748335806; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=fi/3Ae0XClQrJGJypXXAtKw9kybaw/jzcKrEH2+kynE=; b=YeQBBOlxL6uZ+tHMa17qXCJIExSmS4xo+eHqFdbKdD4Ch9JVpWAyTVHuB0dAKiJZbGRoCBSFEPar/jTpC+w3YOeLowQGHUI9GX7mX4XOnG/N5EV9ovyCl3FgLYO8KZS5TL/vK7uWJUZWuvIpEiZpakeNiDmsHSP5uuNGaorJ6eQ= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=amd.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 17483358063261009.1594897449443; Tue, 27 May 2025 01:50:06 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.997941.1378724 (Exim 4.92) (envelope-from ) id 1uJpzw-0002mS-54; Tue, 27 May 2025 08:49:24 +0000 Received: by outflank-mailman (output) from mailman id 997941.1378724; Tue, 27 May 2025 08:49:24 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uJpzw-0002mL-1O; Tue, 27 May 2025 08:49:24 +0000 Received: by outflank-mailman (input) for mailman id 997941; Tue, 27 May 2025 08:49:23 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uJpzv-0002ks-9W for xen-devel@lists.xenproject.org; Tue, 27 May 2025 08:49:23 +0000 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (mail-bn8nam11on2060f.outbound.protection.outlook.com [2a01:111:f403:2414::60f]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 7887d64a-3ad7-11f0-b894-0df219b8e170; Tue, 27 May 2025 10:49:17 +0200 (CEST) Received: from MW4PR04CA0152.namprd04.prod.outlook.com (2603:10b6:303:85::7) by SA1PR12MB9470.namprd12.prod.outlook.com (2603:10b6:806:459::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.22; Tue, 27 May 2025 08:49:16 +0000 Received: from SJ5PEPF000001F6.namprd05.prod.outlook.com (2603:10b6:303:85:cafe::66) by MW4PR04CA0152.outlook.office365.com (2603:10b6:303:85::7) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8769.21 via Frontend Transport; Tue, 27 May 2025 08:49:15 +0000 Received: from SATLEXMB04.amd.com (165.204.84.17) by SJ5PEPF000001F6.mail.protection.outlook.com (10.167.242.74) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8769.18 via Frontend Transport; Tue, 27 May 2025 08:49:15 +0000 Received: from penny-System-Product-Name.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Tue, 27 May 2025 03:49:10 -0500 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 7887d64a-3ad7-11f0-b894-0df219b8e170 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=XH+1rhaavDfDwBCH8HXrYcrbqNOTupBCt8lI50yyBM95NoYZEUTZohZHLKfkHe2ksOmext4rkgoqB3YNWrXf7D69rUd/5VHHx4j8XBZZHTv4px/bfaktemi56+cg89WvNnuwQvrovtVTMOPmyfPuxn3DSSI8Tu7F5D/EQJPlC8rt6KMxzhTCgjNEEfF97GCL9d4ZwMkC5gHP9KsS0FR0l3FvyiijmXBkeYfsfmu5MQKtt+vQ+QF5Tbdf/y+ls4deVwOX4L8wabnvN0FnndH5R55aJRb3pLWuW2zPopp8Hh0BSmpK6XAYzYGDIhfF14IJ/oubmr0SBWGxsqTLkYlrpQ== 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=fi/3Ae0XClQrJGJypXXAtKw9kybaw/jzcKrEH2+kynE=; b=sFQytABQGmyw7FNdyPK/+EqLWKVhmfk76xJ1oZN2h+ZX2O0f8OIBCha2tVbd6K8I7AzmVaQjC//ZZf0nzPWDe2BP4V1eVyBchx2xZ+OOd2rcb3vEduXGwSM1nO9QS1S7PFM/Kb9ch7xFgUXAbGiT2WK2ZWANjxy2Li543aN0y4bJj2++Ba8IF7Tn9+zCOi5o2d2JUcHJQf8PHhJxm8Mk4hsCSGzkUUGJciXBJeAuRvvRFZn//uTtO+0Xh6aK0Ro1Uh8Y0RzhRGGhrA8pGosrYl32IIilXTOrrqA1zFS/vvCiaxZjtURipNdDKOjVaLq0ytkgnw5oaTNtxiL2tuiSVA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=fi/3Ae0XClQrJGJypXXAtKw9kybaw/jzcKrEH2+kynE=; b=S+XZkPPCdXAJWXXEr7+0JY00sZMNIz+fP86JRXIVQIKEGkdu1yh+3rNuL+Bf0a/ZfSre8znrT3+qgba6uSAc9EccMpT+sJ/nr75GjBD5STWzuVLOQ+yaAwOU+nnlsE0wC2HD4hL+MEBBoC55CFsV/ENHXqR1/8X0DuOcFy35Hnw= X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C From: Penny Zheng To: CC: , Penny Zheng , Jan Beulich Subject: [PATCH v5 02/18] xen/cpufreq: move "init" flag into common structure Date: Tue, 27 May 2025 16:48:17 +0800 Message-ID: <20250527084833.338427-3-Penny.Zheng@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250527084833.338427-1-Penny.Zheng@amd.com> References: <20250527084833.338427-1-Penny.Zheng@amd.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ5PEPF000001F6:EE_|SA1PR12MB9470:EE_ X-MS-Office365-Filtering-Correlation-Id: 1fbeb641-8768-4968-9ca5-08dd9cfb5c52 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|82310400026|36860700013|376014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?v3k7aF9UT+SK3STyAWHp4/4GGkyDW9KbQoaTc78Sqz+bFxnZZZSz5wxX3kaV?= =?us-ascii?Q?9JEd75MrHaclknsdzvwDILk6e1vNrXZ1fQr8QMIm76HXj8BdI1iV+pX0rv0t?= =?us-ascii?Q?5p4moyUlNIMRSM3VeoxGwv3e7pGSMUngD589rqX5eb2UMXI4ESev/tbu/M6B?= =?us-ascii?Q?0cVy86IIaHbUbr2BndxHwj2UmGbIsoG717ijJX2mFiCF8WybPOj44RuhKdag?= =?us-ascii?Q?N1aS+rt2Dut311bjS8VlAmMSxa5NZUGWOg7FpKHgKlPwMEV2yu9VHPbrSr7G?= =?us-ascii?Q?JxB0GoAoiBpobEtKtdqhWrX2SIHenoZLqpW4f0gERrsdzb+kwguCh7qAsOS3?= =?us-ascii?Q?IFibDTNJXhlyX1aaiOG8y6CnK3EFNmn0Qth/SGAr27G6xPEkURPrCj+W4hSC?= =?us-ascii?Q?KbGh5v7yfW2CveBfaZKKRO75NbiTl7L0e27/NXrt2Df5sgutKAWsdUohdRlY?= =?us-ascii?Q?euhTnQG6o5o+EGGDZ9Kz0lFxQVNccoqbflagOmn2onUOHN4YRudBuhTElBQy?= =?us-ascii?Q?wmDdKEmPCniwPe0ETgNNOv+IqhPdB39BLtgC97NQtjKSU06qw6H017gdaTh1?= =?us-ascii?Q?Yw/EedZGWepA9blJ+T4+5PIhLE7irs4y/q1ylTDdWxPVtWj1CBLbyxjDFhmw?= =?us-ascii?Q?NeA0ioNAsMo7GGOnieKOlc7OvVzjppkD2kL7P+j0u0XrGaKbQ6Nqd2w39X47?= =?us-ascii?Q?PcN2bkT9YPlqjRiu/gjFTXNSIeZLi1s9C7aycixA9+LeIO3fkQUH5JFEjSdY?= =?us-ascii?Q?t8X2y5ni98yxEhyqDiAgwQTmX4CsgMG4NNoPUwRZ1k5+a6t3/e/IPmuweSOA?= =?us-ascii?Q?EU1QHFYfD3pDpZRepWKvOzuxmQqxgAXrIsVWRgV8wUYabT1crqcY9Vx6akUj?= =?us-ascii?Q?ueFBfboYnA5tCmveukqYrNKfeNY36sXfk+TRED6d/hlLjXdaT6orTJNee+hB?= =?us-ascii?Q?Y9mMvtcxWIrOwBMdpTbfa//3St1Smh+NUG8oPmzbGVMUBD7W7Mp7xUJ90vFB?= =?us-ascii?Q?Jkdxzvk2YM6PY2orI5mwuBx0Z7BAwz8KSLupJirpRMjrzlQRYpJWRX/WA447?= =?us-ascii?Q?DOR8K24/NcMqqSN0kfPGzfwPs6j0HzJhKXMCtGFNjpih5JV1QL1ihs3KpaBO?= =?us-ascii?Q?4R7x253QHyC0/BpdA367z64KLn23B+FsE8l3rQViqaThWA0cgWg+/JepM0ns?= =?us-ascii?Q?o+/YRkZS4+RYBNM+8//b0FToqNiXHZu/SZydmHYnKZ+6+RjzooXdNsIpG/oL?= =?us-ascii?Q?ts5P4N00ezLU6gK6B+npzIID0VeG57mYJJQcgXlzHQHcBOpJTSz7tnVuoEKZ?= =?us-ascii?Q?0V00m+GSi9w3Lh1cMvveEYGM2RS/33E9iO6mSsU3oAtxYuMn0vZozhgwnPsb?= =?us-ascii?Q?SBoPoSaEuGglzu+Xlg75fgLnYYutupJRzgjckas6lfair0IlYpid6yDZPD26?= =?us-ascii?Q?llBPX+Rok6NJ0iDekkFfXzviIUQR0rlboXeHME8eejigp0s4lzG1GYySOOcO?= =?us-ascii?Q?gOUs5Xn3U3+Nhz+XDXPXC+SY0U4/m6b8fvxV?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(1800799024)(82310400026)(36860700013)(376014);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 May 2025 08:49:15.4858 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 1fbeb641-8768-4968-9ca5-08dd9cfb5c52 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: SJ5PEPF000001F6.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB9470 X-ZohoMail-DKIM: pass (identity @amd.com) X-ZM-MESSAGEID: 1748335807470116600 Content-Type: text/plain; charset="utf-8" AMD cpufreq cores will be intialized in two modes, legacy P-state mode, and CPPC mode. So "init" flag shall be extracted from px-specific "struct xen_processor_perf", and placed in the common "struct processor_pminfo". Otherwise, later when introducing a new sub-hypercall to propagate CPPC data, we need to pass irrelevant px-specific "struct xen_processor_perf" to just set init flag. Signed-off-by: Penny Zheng Acked-by: Jan Beulich --- v3 -> v4: - new commit --- v4 -> v5: - commit message refactor --- xen/drivers/acpi/pmstat.c | 6 +++--- xen/drivers/cpufreq/cpufreq.c | 8 ++++---- xen/include/acpi/cpufreq/processor_perf.h | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/xen/drivers/acpi/pmstat.c b/xen/drivers/acpi/pmstat.c index b7fcc02db9..6a1a900f78 100644 --- a/xen/drivers/acpi/pmstat.c +++ b/xen/drivers/acpi/pmstat.c @@ -68,7 +68,7 @@ int do_get_pm_info(struct xen_sysctl_get_pmstat *op) return -ENODEV; if ( hwp_active() ) return -EOPNOTSUPP; - if ( !pmpt || !(pmpt->perf.init & XEN_PX_INIT) ) + if ( !pmpt || !(pmpt->init & XEN_PX_INIT) ) return -EINVAL; break; default: @@ -228,7 +228,7 @@ static int get_cpufreq_para(struct xen_sysctl_pm_op *op) ret =3D copy_to_guest(op->u.get_para.affected_cpus, data, op->u.get_para.cpu_num); =20 - if ( pmpt->perf.init & XEN_PX_INIT ) + if ( pmpt->init & XEN_PX_INIT ) { for ( i =3D 0; i < op->u.get_para.freq_num; i++ ) data[i] =3D pmpt->perf.states[i].core_frequency * 1000; @@ -466,7 +466,7 @@ int do_pm_op(struct xen_sysctl_pm_op *op) case CPUFREQ_PARA: if ( !(xen_processor_pmbits & XEN_PROCESSOR_PM_PX) ) return -ENODEV; - if ( !pmpt || !(pmpt->perf.init & XEN_PX_INIT) ) + if ( !pmpt || !(pmpt->init & XEN_PX_INIT) ) return -EINVAL; break; } diff --git a/xen/drivers/cpufreq/cpufreq.c b/xen/drivers/cpufreq/cpufreq.c index 19e2992335..08d027317c 100644 --- a/xen/drivers/cpufreq/cpufreq.c +++ b/xen/drivers/cpufreq/cpufreq.c @@ -209,7 +209,7 @@ int cpufreq_add_cpu(unsigned int cpu) =20 perf =3D &processor_pminfo[cpu]->perf; =20 - if ( !(perf->init & XEN_PX_INIT) ) + if ( !(processor_pminfo[cpu]->init & XEN_PX_INIT) ) return -EINVAL; =20 if (!cpufreq_driver.init) @@ -373,7 +373,7 @@ int cpufreq_del_cpu(unsigned int cpu) =20 perf =3D &processor_pminfo[cpu]->perf; =20 - if ( !(perf->init & XEN_PX_INIT) ) + if ( !(processor_pminfo[cpu]->init & XEN_PX_INIT) ) return -EINVAL; =20 if (!per_cpu(cpufreq_cpu_policy, cpu)) @@ -569,7 +569,7 @@ int set_px_pminfo(uint32_t acpi_id, struct xen_processo= r_performance *perf) if ( cpufreq_verbose ) print_PPC(pxpt->platform_limit); =20 - if ( pxpt->init =3D=3D XEN_PX_INIT ) + if ( pmpt->init =3D=3D XEN_PX_INIT ) { ret =3D cpufreq_limit_change(cpu); goto out; @@ -578,7 +578,7 @@ int set_px_pminfo(uint32_t acpi_id, struct xen_processo= r_performance *perf) =20 if ( perf->flags =3D=3D ( XEN_PX_PCT | XEN_PX_PSS | XEN_PX_PSD | XEN_P= X_PPC ) ) { - pxpt->init =3D XEN_PX_INIT; + pmpt->init =3D XEN_PX_INIT; =20 ret =3D cpufreq_cpu_init(cpu); goto out; diff --git a/xen/include/acpi/cpufreq/processor_perf.h b/xen/include/acpi/c= pufreq/processor_perf.h index 301104e16f..5f2612b15a 100644 --- a/xen/include/acpi/cpufreq/processor_perf.h +++ b/xen/include/acpi/cpufreq/processor_perf.h @@ -29,14 +29,14 @@ struct processor_performance { struct xen_processor_px *states; struct xen_psd_package domain_info; uint32_t shared_type; - - uint32_t init; }; =20 struct processor_pminfo { uint32_t acpi_id; uint32_t id; struct processor_performance perf; + + uint32_t init; }; =20 extern struct processor_pminfo *processor_pminfo[NR_CPUS]; --=20 2.34.1 From nobody Fri Oct 31 11:29:11 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=amd.com); dmarc=pass(p=quarantine dis=none) header.from=amd.com ARC-Seal: i=2; a=rsa-sha256; t=1748335796; cv=pass; d=zohomail.com; s=zohoarc; b=Zp1Z1ZIIZj0VzQEP8eez7S3skXE955LWLZeL8cFNv1NqobqdhhcRs3eeVIMi3yQpraNbpQhPq/OqRFDTGxD6kZrW0085RagJhQDpmXoCYD51DnEvSGQfjitZ7A6W/8XLONb8v1EB2TDW9/BXbKSzyoS8qzra26ZB2v+KPq0of3I= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1748335796; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=d4m9MyBy1xfClJaMl4Tf2AJuBzOa30FJWa7hBBPvoTo=; b=fQawDu46yJ5RH1J2HJXsRYnnRxfT8hbHrr/as3oVK7qRyGzRSrLL/E4FQo+4FE5rBokYx6cV7OfMx43JymWyh3M4iSBGSh06ie+GtUri5RSUNGmtkqHdgOotTqOHvln5XxHIqySjtX+cAF8QLWrhzMu6MECQfeigrlrn2TE6AHU= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=amd.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1748335796146505.25532448744457; Tue, 27 May 2025 01:49:56 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.997944.1378751 (Exim 4.92) (envelope-from ) id 1uJpzz-0003I0-0S; Tue, 27 May 2025 08:49:27 +0000 Received: by outflank-mailman (output) from mailman id 997944.1378751; Tue, 27 May 2025 08:49:26 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uJpzy-0003HT-Pl; Tue, 27 May 2025 08:49:26 +0000 Received: by outflank-mailman (input) for mailman id 997944; Tue, 27 May 2025 08:49:25 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uJpzx-00031E-M4 for xen-devel@lists.xenproject.org; Tue, 27 May 2025 08:49:25 +0000 Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on20621.outbound.protection.outlook.com [2a01:111:f403:2418::621]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 7c02f8df-3ad7-11f0-a2fd-13f23c93f187; Tue, 27 May 2025 10:49:23 +0200 (CEST) Received: from MW4PR04CA0177.namprd04.prod.outlook.com (2603:10b6:303:85::32) by PH0PR12MB7907.namprd12.prod.outlook.com (2603:10b6:510:28d::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.22; Tue, 27 May 2025 08:49:16 +0000 Received: from SJ5PEPF000001F6.namprd05.prod.outlook.com (2603:10b6:303:85:cafe::d9) by MW4PR04CA0177.outlook.office365.com (2603:10b6:303:85::32) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8769.19 via Frontend Transport; Tue, 27 May 2025 08:49:15 +0000 Received: from SATLEXMB04.amd.com (165.204.84.17) by SJ5PEPF000001F6.mail.protection.outlook.com (10.167.242.74) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8769.18 via Frontend Transport; Tue, 27 May 2025 08:49:15 +0000 Received: from penny-System-Product-Name.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Tue, 27 May 2025 03:49:12 -0500 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 7c02f8df-3ad7-11f0-a2fd-13f23c93f187 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=wCG2C4Bp7gqVUeII16p7l9MRN65Vyg95KVcVdTfuIC46Grbh/Ols386RnS71jm4hKiqQlqzLVdxkxyrgm33bpLB4NqWPHAJ+ABKQPLQuxzjLZLC1eRuo9tQeBhUIIxDNnBXPOKGx9UxGgwnHk2u2hnNTnErW2XH/PKVdQSkFwprDa39Dp1aPbCMXIimVXMG6PZNZqtAydP0oKxKdrVdxKVsnbyhpoXuultnzDFsOgLekq5Y1RQsULq5nzIcdZin3esWnuQ7DiPG/11M062L652qqQqOyLw5obz5+dm28d/JYfUn+j/9Vjdv10ctT5VtpTT0vnZuYT908+LxlmFtb4A== 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=d4m9MyBy1xfClJaMl4Tf2AJuBzOa30FJWa7hBBPvoTo=; b=u0QyNsvVTBbQwVnquXp2D0i9fljA/+7NMpZhx9HH8phlnHbVeqKTQhd2p1RX8w/ltXJdoKY/+ABQVvuVXrAqHIQYwrfm1ZllIdkQ7NbtkxN3WwGyUmf45opBfe2fGdm1Lb9spcz9NxksN9bYpBLjnAcYu3aMYwtVwCU6ww/BsrkX23eQmwfk3sbHFd+xUf6fnOg+ehSf1VWqLD0r5Fd5MHLvFRaPfNOVvdPMmABpuJtscNZ8iZzDGjf+YBmF48neyXL19tnv2BlIwcbGVT9hJ6IjVDEOtpyaPWkXnI0TxNAIkOQ3Vq+st7S2BLjTFHZfK3j2IfyT8ndWYloPgDXWJA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=d4m9MyBy1xfClJaMl4Tf2AJuBzOa30FJWa7hBBPvoTo=; b=tOY2/r9mbe22cU5cUDWjaEOV4slyYU00KBqJChQXuzDuFr9pBz1R5S16+FAbknnMV99s3TOTb6L7xIOxCsadcicB8k2hOy79fXJkBJv1h8PX1yXhRlUpY+V0Kx4tAKtU/cWA0Y3xaIKkzjatZk4/zWBnihjd+egjqeqTLEKGf7Q= X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C From: Penny Zheng To: CC: , Penny Zheng , Jan Beulich Subject: [PATCH v5 03/18] xen/cpufreq: extract _PSD info from "struct xen_processor_performance" Date: Tue, 27 May 2025 16:48:18 +0800 Message-ID: <20250527084833.338427-4-Penny.Zheng@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250527084833.338427-1-Penny.Zheng@amd.com> References: <20250527084833.338427-1-Penny.Zheng@amd.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ5PEPF000001F6:EE_|PH0PR12MB7907:EE_ X-MS-Office365-Filtering-Correlation-Id: 5f459e77-b13c-45de-f145-08dd9cfb5c67 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|1800799024|82310400026|376014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?m2p9VgpfY6RUQzZGqRdRJKY2TfFV55f5LcdIP7Zhm8TFhjfGLoeSNRngv9NN?= =?us-ascii?Q?u9FBwiqnufte5I98HK+lEnLPZ8VTKTJE+JcpxHOKAFCb4oW8pibLIVuomtMa?= =?us-ascii?Q?nrzVeJZ9wOVEXX4YNbMWt2vTndsSe/L46GJsHUZtd+HBPhiTUrShToBz8ssf?= =?us-ascii?Q?NXofj6WhJTucIpYW2iOjupv7iHkGXfCuwHDf2yY1aCC7S2o1mGOStpeoDYYM?= =?us-ascii?Q?HKBkJiKcAV99P1wdj9EXhMr2smIn1UWqnNiF0F2ps7TPE3B7rfps1Hq5O68u?= =?us-ascii?Q?ppjVRURvqUhQqmjFGp4QJnq/vxE+GQgvBLOxrkS3+Yt8PUKSvAEAvsEBf6BH?= =?us-ascii?Q?Ndq20gS9NSQbmPDUYe8vkgQhWE1YYARiZWi5+EAN085EhQ5EISivAIYUjjDK?= =?us-ascii?Q?399D6fCuwzOOTsIHH3ATsgzFDaWbtAOf37UwFP02VHH1pUpcSk6kQgeyhOxC?= =?us-ascii?Q?PSfHgJGLxfWrsUo2uwCwjEBrBYLvwGqbigD/GulExveF9cIut2PKmYr91PIW?= =?us-ascii?Q?vMU3EjotFt/OQv8ow5da0N+OJUsdPYa0Heg9RXM+R9eAzJcA47bjo3A3h3hh?= =?us-ascii?Q?oOs+Vtq+oYXqwmWMxRX66S4e9+HSHcOvTSYbYBnnuoA0aFTyuzUM1tsi1wG0?= =?us-ascii?Q?uvxHQIcibTStHHpGinUTbd9lsa6IaETrBLz2CF4ww8gW1Uzy3PyvvY1cSk4b?= =?us-ascii?Q?QIRDryl/HnNwoxQxHyaIdlZd8XRemMikJb4Fxlss42s7m4R4kPrZCJ1oYm59?= =?us-ascii?Q?zRwEbRm0lfEniV7ofT6T8m+5IVhwEeC0Butu1bY1CEwu8IooDl3QIbCxPsJm?= =?us-ascii?Q?FBpQymnzn2ar/uBu13X3wszxg9uC+FdkoJFEyI8Mtzrmg1QMzxJXqg06/jJN?= =?us-ascii?Q?VJIAKMvgLVbyYQ1XlAX11RPmp9MeElXWGL0T1izWdCCo9gZEwcAQMyn2VRy4?= =?us-ascii?Q?Gk3CvI52XORqaohMSkcWwZagz3ysuNRuIMjM1MVXK7pfTW84p5QP/EJLzP+F?= =?us-ascii?Q?b0GP75uvmRhO6JvxX7IzMEohZgaq3wFIZIRFr75u6UQH/CQJiOvs981CTNHx?= =?us-ascii?Q?hBJJ30Iy/5CfSVtfyHlFsWHJaA0Dqd+1Tx56QPFna3oL4ElwLYjTx4ToQL9+?= =?us-ascii?Q?JHNRz1QhyLvBVILL2uq5UT6hP0GKmOkYhOFzlNvnJAkxh9xT1nyTkN1A0s3x?= =?us-ascii?Q?+cOU6oa6w23pNdI6J+3ZzVa3XmlELX6w1yvFweCxH7+PRlnRosKCoNqR4RAt?= =?us-ascii?Q?QANYpEJjsw+C4gvqnn2BbZjdZaVNyPIT1UDWvhDJwVHMhQeu3IHSeMih8fod?= =?us-ascii?Q?maROHB5BXVUlTtt04AhoCkPiMvsro9XjFzKBuEbXDvKQJyqGBTQEWt1QkJnB?= =?us-ascii?Q?qkuZLSOjM6VkpvqvxE2n2CAYvvDXpDhHkHc47xQZLyuB7t1aAsx8oYaeYTl1?= =?us-ascii?Q?nsTIL3Y6WX122OxQVIVj+/Q/KHSo6sTCWrXAe+rBzCS1c1swIFuSDzvXQZ5H?= =?us-ascii?Q?B85Y1p1nK4rgjY7Allq4IrOp6KEr+rIEtAKQ?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(36860700013)(1800799024)(82310400026)(376014);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 May 2025 08:49:15.6264 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 5f459e77-b13c-45de-f145-08dd9cfb5c67 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: SJ5PEPF000001F6.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR12MB7907 X-ZohoMail-DKIM: pass (identity @amd.com) X-ZM-MESSAGEID: 1748335797515116600 Content-Type: text/plain; charset="utf-8" _PSD info, consisted of "shared_type" and "struct xen_psd_package", will not only be provided from px-specific "struct xen_processor_performance", but a= lso in CPPC data. In cpufreq_add/del_cpu(), a new helper get_psd_info() is introduced to extract common _PSD info from px-specific "struct xen_processor_performance= ", in the meantime, the following style corrections get applied at the same ti= me: - add extra space before and after bracket of if() - remove redundant parenthesis - no need to put brace for printk() at a seperate line Signed-off-by: Penny Zheng --- v3 -> v4: - new commit --- v4 -> v5: - let check_psd_pminfo() pass in "uint32_t shared_type" - replace unnessary parameter "uint32_t init" with processor_pminfo[cpu]->i= nit - replace structure copy with const pointer delivery through "const struct xen_psd_package **" - blank line between non-fall-through switch-case blocks - remove unnessary "define XEN_CPUPERF_SHARED_TYPE_xxx" movement --- xen/drivers/cpufreq/cpufreq.c | 111 ++++++++++++++++++++++++---------- 1 file changed, 79 insertions(+), 32 deletions(-) diff --git a/xen/drivers/cpufreq/cpufreq.c b/xen/drivers/cpufreq/cpufreq.c index 08d027317c..9567221d97 100644 --- a/xen/drivers/cpufreq/cpufreq.c +++ b/xen/drivers/cpufreq/cpufreq.c @@ -191,9 +191,29 @@ int cpufreq_limit_change(unsigned int cpu) return __cpufreq_set_policy(data, &policy); } =20 -int cpufreq_add_cpu(unsigned int cpu) +static int get_psd_info(unsigned int cpu, uint32_t *shared_type, + const struct xen_psd_package **domain_info_ptr) { int ret =3D 0; + + switch ( processor_pminfo[cpu]->init ) + { + case XEN_PX_INIT: + *shared_type =3D processor_pminfo[cpu]->perf.shared_type; + *domain_info_ptr =3D &processor_pminfo[cpu]->perf.domain_info; + break; + + default: + ret =3D -EINVAL; + break; + } + + return ret; +} + +int cpufreq_add_cpu(unsigned int cpu) +{ + int ret; unsigned int firstcpu; unsigned int dom, domexist =3D 0; unsigned int hw_all =3D 0; @@ -201,14 +221,14 @@ int cpufreq_add_cpu(unsigned int cpu) struct cpufreq_dom *cpufreq_dom =3D NULL; struct cpufreq_policy new_policy; struct cpufreq_policy *policy; - struct processor_performance *perf; + const struct xen_psd_package *domain_info; + const struct xen_psd_package **domain_info_ptr =3D &domain_info; + uint32_t shared_type; =20 /* to protect the case when Px was not controlled by xen */ if ( !processor_pminfo[cpu] || !cpu_online(cpu) ) return -EINVAL; =20 - perf =3D &processor_pminfo[cpu]->perf; - if ( !(processor_pminfo[cpu]->init & XEN_PX_INIT) ) return -EINVAL; =20 @@ -218,10 +238,15 @@ int cpufreq_add_cpu(unsigned int cpu) if (per_cpu(cpufreq_cpu_policy, cpu)) return 0; =20 - if (perf->shared_type =3D=3D CPUFREQ_SHARED_TYPE_HW) + ret =3D get_psd_info(cpu, &shared_type, domain_info_ptr); + if ( ret ) + return ret; + domain_info =3D *domain_info_ptr; + + if ( shared_type =3D=3D CPUFREQ_SHARED_TYPE_HW ) hw_all =3D 1; =20 - dom =3D perf->domain_info.domain; + dom =3D domain_info->domain; =20 list_for_each(pos, &cpufreq_dom_list_head) { cpufreq_dom =3D list_entry(pos, struct cpufreq_dom, node); @@ -244,21 +269,30 @@ int cpufreq_add_cpu(unsigned int cpu) cpufreq_dom->dom =3D dom; list_add(&cpufreq_dom->node, &cpufreq_dom_list_head); } else { + uint32_t firstcpu_shared_type; + const struct xen_psd_package *firstcpu_domain_info; + const struct xen_psd_package **firstcpu_domain_info_ptr =3D + &firstcpu_domain_i= nfo; + /* domain sanity check under whatever coordination type */ firstcpu =3D cpumask_first(cpufreq_dom->map); - if ((perf->domain_info.coord_type !=3D - processor_pminfo[firstcpu]->perf.domain_info.coord_type) || - (perf->domain_info.num_processors !=3D - processor_pminfo[firstcpu]->perf.domain_info.num_processors)) { - + ret =3D get_psd_info(firstcpu, &firstcpu_shared_type, + firstcpu_domain_info_ptr); + if ( ret ) + return ret; + firstcpu_domain_info =3D *firstcpu_domain_info_ptr; + + if ( domain_info->coord_type !=3D firstcpu_domain_info->coord_type= || + domain_info->num_processors !=3D + firstcpu_domain_info->num_processors ) + { printk(KERN_WARNING "cpufreq fail to add CPU%d:" "incorrect _PSD(%"PRIu64":%"PRIu64"), " "expect(%"PRIu64"/%"PRIu64")\n", - cpu, perf->domain_info.coord_type, - perf->domain_info.num_processors, - processor_pminfo[firstcpu]->perf.domain_info.coord_type, - processor_pminfo[firstcpu]->perf.domain_info.num_proces= sors - ); + cpu, domain_info->coord_type, + domain_info->num_processors, + firstcpu_domain_info->coord_type, + firstcpu_domain_info->num_processors); return -EINVAL; } } @@ -304,8 +338,9 @@ int cpufreq_add_cpu(unsigned int cpu) if (ret) goto err1; =20 - if (hw_all || (cpumask_weight(cpufreq_dom->map) =3D=3D - perf->domain_info.num_processors)) { + if ( hw_all || cpumask_weight(cpufreq_dom->map) =3D=3D + domain_info->num_processors ) + { memcpy(&new_policy, policy, sizeof(struct cpufreq_policy)); =20 /* @@ -360,29 +395,35 @@ err0: =20 int cpufreq_del_cpu(unsigned int cpu) { + int ret; unsigned int dom, domexist =3D 0; unsigned int hw_all =3D 0; struct list_head *pos; struct cpufreq_dom *cpufreq_dom =3D NULL; struct cpufreq_policy *policy; - struct processor_performance *perf; + uint32_t shared_type; + const struct xen_psd_package *domain_info; + const struct xen_psd_package **domain_info_ptr =3D &domain_info; =20 /* to protect the case when Px was not controlled by xen */ if ( !processor_pminfo[cpu] || !cpu_online(cpu) ) return -EINVAL; =20 - perf =3D &processor_pminfo[cpu]->perf; - if ( !(processor_pminfo[cpu]->init & XEN_PX_INIT) ) return -EINVAL; =20 if (!per_cpu(cpufreq_cpu_policy, cpu)) return 0; =20 - if (perf->shared_type =3D=3D CPUFREQ_SHARED_TYPE_HW) + ret =3D get_psd_info(cpu, &shared_type, domain_info_ptr); + if ( ret ) + return ret; + domain_info =3D *domain_info_ptr; + + if ( shared_type =3D=3D CPUFREQ_SHARED_TYPE_HW ) hw_all =3D 1; =20 - dom =3D perf->domain_info.domain; + dom =3D domain_info->domain; policy =3D per_cpu(cpufreq_cpu_policy, cpu); =20 list_for_each(pos, &cpufreq_dom_list_head) { @@ -398,8 +439,8 @@ int cpufreq_del_cpu(unsigned int cpu) =20 /* for HW_ALL, stop gov for each core of the _PSD domain */ /* for SW_ALL & SW_ANY, stop gov for the 1st core of the _PSD domain */ - if (hw_all || (cpumask_weight(cpufreq_dom->map) =3D=3D - perf->domain_info.num_processors)) + if ( hw_all || cpumask_weight(cpufreq_dom->map) =3D=3D + domain_info->num_processors ) __cpufreq_governor(policy, CPUFREQ_GOV_STOP); =20 cpufreq_statistic_exit(cpu); @@ -464,6 +505,17 @@ static void print_PPC(unsigned int platform_limit) printk("\t_PPC: %d\n", platform_limit); } =20 +static int check_psd_pminfo(uint32_t shared_type) +{ + /* check domain coordination */ + if ( shared_type !=3D CPUFREQ_SHARED_TYPE_ALL && + shared_type !=3D CPUFREQ_SHARED_TYPE_ANY && + shared_type !=3D CPUFREQ_SHARED_TYPE_HW ) + return -EINVAL; + + return 0; +} + int set_px_pminfo(uint32_t acpi_id, struct xen_processor_performance *perf) { int ret =3D 0, cpu; @@ -545,14 +597,9 @@ int set_px_pminfo(uint32_t acpi_id, struct xen_process= or_performance *perf) =20 if ( perf->flags & XEN_PX_PSD ) { - /* check domain coordination */ - if ( perf->shared_type !=3D CPUFREQ_SHARED_TYPE_ALL && - perf->shared_type !=3D CPUFREQ_SHARED_TYPE_ANY && - perf->shared_type !=3D CPUFREQ_SHARED_TYPE_HW ) - { - ret =3D -EINVAL; + ret =3D check_psd_pminfo(perf->shared_type); + if ( ret ) goto out; - } =20 pxpt->shared_type =3D perf->shared_type; memcpy(&pxpt->domain_info, &perf->domain_info, --=20 2.34.1 From nobody Fri Oct 31 11:29:11 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=amd.com); dmarc=pass(p=quarantine dis=none) header.from=amd.com ARC-Seal: i=2; a=rsa-sha256; t=1748335792; cv=pass; d=zohomail.com; s=zohoarc; b=kb92IdrxBsvA5NGNR3eFhm0RuAvkxwwWwzUMfxvLBcSlATcsFahxrU4beis+k5ubGw56Szge2K72WfkiAA743yBGkEBVwzbDgEdoJljeMpAa9aH5o/PY1jkohhwtKJUTGwSgY8NhIHOrEtqHcihEo5HAmB16k0s+Q1YyCDIZurE= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1748335792; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=hPo1OVjRKmEYvcsDmuocigHTLx4OfLHa+FzOOo/dHs4=; b=jMFeD3v23bmVNFOmC7tC7i4jUYASnfhkvurOPc+zmPkPYmw9gjLAsLP7k6kGOkVhG51s0h1hwfZO5zBl7bnD+TQ0NP1hhcuDRF3pLaeZo9f+dRs6FJX15ysDlj5WLHdZZYFEI8xlHinxiXobcVN7zMDPaEcRSRSNxtgbYIfR3dg= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=amd.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1748335792820731.4346669160147; Tue, 27 May 2025 01:49:52 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.997945.1378756 (Exim 4.92) (envelope-from ) id 1uJpzz-0003OH-92; Tue, 27 May 2025 08:49:27 +0000 Received: by outflank-mailman (output) from mailman id 997945.1378756; Tue, 27 May 2025 08:49:27 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uJpzz-0003Mc-3m; Tue, 27 May 2025 08:49:27 +0000 Received: by outflank-mailman (input) for mailman id 997945; Tue, 27 May 2025 08:49:26 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uJpzy-0002ks-3d for xen-devel@lists.xenproject.org; Tue, 27 May 2025 08:49:26 +0000 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2060a.outbound.protection.outlook.com [2a01:111:f403:2412::60a]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 7a2f0480-3ad7-11f0-b894-0df219b8e170; Tue, 27 May 2025 10:49:20 +0200 (CEST) Received: from MW4PR04CA0172.namprd04.prod.outlook.com (2603:10b6:303:85::27) by MW6PR12MB8867.namprd12.prod.outlook.com (2603:10b6:303:249::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.25; Tue, 27 May 2025 08:49:18 +0000 Received: from SJ5PEPF000001F6.namprd05.prod.outlook.com (2603:10b6:303:85:cafe::7a) by MW4PR04CA0172.outlook.office365.com (2603:10b6:303:85::27) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8746.30 via Frontend Transport; Tue, 27 May 2025 08:49:18 +0000 Received: from SATLEXMB04.amd.com (165.204.84.17) by SJ5PEPF000001F6.mail.protection.outlook.com (10.167.242.74) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8769.18 via Frontend Transport; Tue, 27 May 2025 08:49:18 +0000 Received: from penny-System-Product-Name.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Tue, 27 May 2025 03:49:14 -0500 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 7a2f0480-3ad7-11f0-b894-0df219b8e170 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=BK/v4no0pxDIAg1xZeHEzqp6jGARdlUNRlbr1oKnRnBpuAxZAVa/qKpln88Zw8MDPfzlCc1h02yaDs8ZF01rDKLSdC6k10eA0393d1UnC0G5Vled3sgfEZQcbm7WTwHgNhYxio6yogHN7slQtfukWH62k1VgF+WQTc2wPfgESNHr0hiByxdIw5hSg29y2sBMgRp/bt7yuhEsP9K+q4FhDlX7ubW+Gandj03g8Gm7+NJGbkRH7mAifGFp1NVKzhOvlAquTu9giJ1GI3dGXCG+YD3ZPaMiqYBMVEh57eOfzrlkBXHv28u+87pgH+AveK4PvxIWqVuCD8OCfhVGqXzqpQ== 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=hPo1OVjRKmEYvcsDmuocigHTLx4OfLHa+FzOOo/dHs4=; b=OdOjmHS68nJ+xtTqRd2vgj3M61kXKpO0bfFY5Qke7bKvDTR27YVbODonMm6wY4vowdi/zKfCmFUkTmTMrHTg4dVDJDwHMOgGfrhkn3fPDQS3MGzuTA26n6rpE3MI+aQPGL85I6t2PAagwbUjVd3kC/lpRpLzwXrm67c8cXJ7aCsI7JyeJFJQDarCyJARMl8D255i+9f3CRB6oSrrwlwXU27zvOzqb0/W543tWp7TxTKBREOU86kEN3k753egJLuz0fRcJRrgqe+HUImvKUASZDCFFkdwJPKPR1vbODL2kB68o6TCPb4KZXLraIspMo8Lpmy6CDRoQ/kt4HA0UoG1rg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=hPo1OVjRKmEYvcsDmuocigHTLx4OfLHa+FzOOo/dHs4=; b=F1YOfno3r7ZPa1eCmwWqH26SVthXqzp5TCWWcGmZZl2KO2KnqXibWr66aReEQ3kwJ8z654ns8M/aJ7k6EzDI+eNQOT392JnRQCNIc4mJPOKm99n9G1/w4aQCkLA4H4a2dMcxL42Wp8ZTBXMzc1lpGocjt9pDxXD2Bg2t12GfPLc= X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C From: Penny Zheng To: CC: , Penny Zheng , Jan Beulich , Andrew Cooper , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Anthony PERARD , Michal Orzel , "Julien Grall" , Stefano Stabellini Subject: [PATCH v5 04/18] xen/cpufreq: introduce new sub-hypercall to propagate CPPC data Date: Tue, 27 May 2025 16:48:19 +0800 Message-ID: <20250527084833.338427-5-Penny.Zheng@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250527084833.338427-1-Penny.Zheng@amd.com> References: <20250527084833.338427-1-Penny.Zheng@amd.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ5PEPF000001F6:EE_|MW6PR12MB8867:EE_ X-MS-Office365-Filtering-Correlation-Id: 0f462b3d-7960-4e39-c4f0-08dd9cfb5de0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|376014|1800799024|82310400026; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?Hlp5v/MTcFRpei0U8ECjawVR3ADYLqsJ/Oo1RhBr7oji48nPXwnEc2rl59Gz?= =?us-ascii?Q?IKAfwpdqLTStWj3pbl7BBLr73Cb89iXeLnjcd+d5sgFJp7M/W9faN/8qgq2J?= =?us-ascii?Q?pPQdQeSw2FhpNoqdp97EvLbjl/iOw+OTb1v5XMZ3ImjLyHL+1gwFLNe3k2Xr?= =?us-ascii?Q?bQgQ9A6n8KHw4x93J8nu2atL4j3Ma6X/vTfQzbgIwxGLrRmpqRNkiIxVYa0V?= =?us-ascii?Q?Ei9GgU3kzxmw4tLgRxSkl0lvHbdsc+NTquNLJTsvWeU75dSd6Yv9T0UFxryh?= =?us-ascii?Q?tpz4/XfUnicWwsuz9/EBVcYdHr3Qmualuep9TL+PuyM736A62ZmQqKIZDEN0?= =?us-ascii?Q?QGK0gi8rYXr5sX9UkY7hBpptFW3eagmGq5YTtrSf97q3gNzocY54V6gfJofl?= =?us-ascii?Q?3ntGPpDnzgXQf2R841f2hirANxMomnmPsPPqjz36pLK8hflDpD53vTRDQenT?= =?us-ascii?Q?54wY+suRO5pgXRHzh04EQCKgrtE1Anaph++1szi2UBqk6ArLvbJWl+Rjwp+5?= =?us-ascii?Q?u1Jp7BXD7jcKq0GIP07zHNLD+EOmB/py3lcKT4ouGbIe6gUEkoMHfntTo1BR?= =?us-ascii?Q?5B9j9RKH7RRIvaDqpGNQoBbEpyIHsuE+m6WFla5cIfIse5JAR9oiwIHNm/W2?= =?us-ascii?Q?RK7HGBJsFTma00B7o0KIHxLOMDXV+2EAq73FxS9VgeRCQlbjWvPs17nYhPTp?= =?us-ascii?Q?0Eapgh+qLV4JMeinH661qv/cUMNG6ZumNZd2ygJ7RGQQA0VhsFn7Oem7ldy2?= =?us-ascii?Q?BbLS/N7ieXE7ZBhIWO+TBNYmXQoVqQdgipYPaR9AWfnXGRYXlxLhWIc5V7Iu?= =?us-ascii?Q?3cJpyN/JWxjt0z/FAMF37CNoQ4DgyZK81LHAaRY1SBbwAtAIQLHKe4ougTpb?= =?us-ascii?Q?mobk6+eysy74rbb1kByQ+mO60epa8FW8BbAwqEUzloF+0Os+Jp9vqxCfb/qd?= =?us-ascii?Q?sF0qQYDjuoydtoqRTWH1HtCiByAu+2YPJ+sEb9KTqC020/3PMUlZnP3n8j9A?= =?us-ascii?Q?y4dgnHOBmuBgBqt5DDoCCqIo1ETCrpVOuBf6m4NGSlTxoPOtk4h8X5yrtIZq?= =?us-ascii?Q?dKgYUYVn3EsyMvFW/kaNNL4D5r9AHrqRIvPr3/R396cdMYQ0tGrTf06wD5Xu?= =?us-ascii?Q?K71buSQNnTJd2b6OnsedFUv5AxpVNRzCMGgyhYyTQkp8PE/oIiz+TzoGwQlm?= =?us-ascii?Q?mcQDq3YWHjPDUHJlHPrAxnXlHBZP4BJvCjGeRBmNy3gL//K2uQVrthYdtXCf?= =?us-ascii?Q?CBljRecCkAU1aQnf7+R6PgkneZ6FjR877lV7H2/M+EXkGWtIVtLdppEtzKss?= =?us-ascii?Q?OaUcgEmW8VC29Krg02bFL80u7MV+CBhswNmfZTl8MtoKJfp9XbRPAl6EahTv?= =?us-ascii?Q?PDkitABnkUN/bzQ/JEsDKOemY/PKrgRy4+gkwLa99HCsoBGjLqZj1K/wI/1b?= =?us-ascii?Q?ULKoxio7zk5Im1fRIjAMsb9ES8WIdz69nr2ZNXLoSLO1OHvt1xnZ3DSTTKZY?= =?us-ascii?Q?JsY2lJLfhB89h+85xf2Cbx1Q4VOCllbdeFJs?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(36860700013)(376014)(1800799024)(82310400026);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 May 2025 08:49:18.0951 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 0f462b3d-7960-4e39-c4f0-08dd9cfb5de0 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: SJ5PEPF000001F6.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW6PR12MB8867 X-ZohoMail-DKIM: pass (identity @amd.com) X-ZM-MESSAGEID: 1748335793488116600 Content-Type: text/plain; charset="utf-8" In order to provide backward compatibility with existing governors that represent performance as frequency, like ondemand, the _CPC table can optionally provide processor frequency range values, Lowest frequency and Nominal frequency, to let OS use Lowest Frequency/ Performance and Nominal Frequency/Performance as anchor points to create linear mapping of CPU frequency to CPPC performance. As Xen is uncapable of parsing the ACPI dynamic table, we'd like to introduce a new sub-hypercall "XEN_PM_CPPC" to propagate required CPPC data from dom0 kernel to Xen. In the according handler set_cppc_pminfo(), we do _CPC and _PSD sanitization check, as both _PSD and _CPC info are necessary for correctly initializing cpufreq cores in CPPC mode. Users shall be warned that if we failed at this point, no fallback scheme, like legacy P-state could be switched to. A new flag "XEN_CPPC_INIT" is also introduced to differentiate cpufreq core initialised in Px mode. Then all .init flag checking shall be updated to consider "XEN_CPPC_INIT" too. Signed-off-by: Penny Zheng --- v1 -> v2: - Remove unnecessary figure braces - Pointer-to-const for print_CPPC and set_cppc_pminfo - Structure allocation shall use xvzalloc() - Unnecessary memcpy(), and change it to a (type safe) structure assignment - Add comment for struct xen_processor_cppc, and keep the chosen fields in the order _CPC has them - Obey to alphabetic sorting, and prefix compat structures with ? instead of ! --- v2 -> v3: - Trim too long line - Re-place set_cppc_pminfo() past set_px_pminfo() - Fix Misra violations: Declaration and definition ought to agree in parameter names - Introduce a new flag XEN_PM_CPPC to reflect processor initialised in CPPC mode --- v3 -> v4: - Refactor commit message - make "acpi_id" unsigned int - Add warning message when cpufreq_cpu_init() failed only under debug mode - Expand "struct xen_processor_cppc" to include _PSD and shared type - add sanity check for ACPI CPPC data --- v4 -> v5: - remove the ordering check between lowest_nonlinear_perf and lowest_perf - use printk_once() for cppc perf value warning - complement comment for cppc perf value check - remove redundant check and pointless parenthesizing - use dprintk() for warning under #ifndef NDEBUG - refactor warning message when having non-zero ret of cpufreq_cpu_init() - With introduction of "struct xen_psd_package" in "struct xen_processor_cp= pc", use ! and the respective XLAT_* macro(s) to wrap. --- xen/arch/x86/platform_hypercall.c | 5 + xen/arch/x86/x86_64/cpufreq.c | 19 ++++ xen/arch/x86/x86_64/platform_hypercall.c | 3 + xen/drivers/acpi/pmstat.c | 4 +- xen/drivers/cpufreq/cpufreq.c | 128 +++++++++++++++++++++- xen/include/acpi/cpufreq/processor_perf.h | 4 +- xen/include/public/platform.h | 30 +++++ xen/include/xen/pmstat.h | 5 + xen/include/xlat.lst | 1 + 9 files changed, 194 insertions(+), 5 deletions(-) diff --git a/xen/arch/x86/platform_hypercall.c b/xen/arch/x86/platform_hype= rcall.c index 90abd3197f..49717e9ca9 100644 --- a/xen/arch/x86/platform_hypercall.c +++ b/xen/arch/x86/platform_hypercall.c @@ -572,6 +572,11 @@ ret_t do_platform_op( break; } =20 + case XEN_PM_CPPC: + ret =3D set_cppc_pminfo(op->u.set_pminfo.id, + &op->u.set_pminfo.u.cppc_data); + break; + default: ret =3D -EINVAL; break; diff --git a/xen/arch/x86/x86_64/cpufreq.c b/xen/arch/x86/x86_64/cpufreq.c index e4f3d5b436..8d57f67c2e 100644 --- a/xen/arch/x86/x86_64/cpufreq.c +++ b/xen/arch/x86/x86_64/cpufreq.c @@ -54,3 +54,22 @@ int compat_set_px_pminfo(uint32_t acpi_id, =20 return set_px_pminfo(acpi_id, xen_perf); } + +int compat_set_cppc_pminfo(unsigned int acpi_id, + const struct compat_processor_cppc *cppc_data) + +{ + struct xen_processor_cppc *xen_cppc; + unsigned long xlat_page_current; + + xlat_malloc_init(xlat_page_current); + + xen_cppc =3D xlat_malloc_array(xlat_page_current, + struct xen_processor_cppc, 1); + if ( unlikely(xen_cppc =3D=3D NULL) ) + return -EFAULT; + + XLAT_processor_cppc(xen_cppc, cppc_data); + + return set_cppc_pminfo(acpi_id, xen_cppc); +} diff --git a/xen/arch/x86/x86_64/platform_hypercall.c b/xen/arch/x86/x86_64= /platform_hypercall.c index 9ab631c17f..0288f68df9 100644 --- a/xen/arch/x86/x86_64/platform_hypercall.c +++ b/xen/arch/x86/x86_64/platform_hypercall.c @@ -14,6 +14,9 @@ EMIT_FILE; #define efi_get_info efi_compat_get_info #define efi_runtime_call(x) efi_compat_runtime_call(x) =20 +#define xen_processor_cppc compat_processor_cppc +#define set_cppc_pminfo compat_set_cppc_pminfo + #define xen_processor_performance compat_processor_performance #define set_px_pminfo compat_set_px_pminfo =20 diff --git a/xen/drivers/acpi/pmstat.c b/xen/drivers/acpi/pmstat.c index 6a1a900f78..f7351f219d 100644 --- a/xen/drivers/acpi/pmstat.c +++ b/xen/drivers/acpi/pmstat.c @@ -201,7 +201,7 @@ static int get_cpufreq_para(struct xen_sysctl_pm_op *op) pmpt =3D processor_pminfo[op->cpuid]; policy =3D per_cpu(cpufreq_cpu_policy, op->cpuid); =20 - if ( !pmpt || !pmpt->perf.states || + if ( !pmpt || ((pmpt->init & XEN_PX_INIT) && !pmpt->perf.states) || !policy || !policy->governor ) return -EINVAL; =20 @@ -466,7 +466,7 @@ int do_pm_op(struct xen_sysctl_pm_op *op) case CPUFREQ_PARA: if ( !(xen_processor_pmbits & XEN_PROCESSOR_PM_PX) ) return -ENODEV; - if ( !pmpt || !(pmpt->init & XEN_PX_INIT) ) + if ( !pmpt || !(pmpt->init & (XEN_PX_INIT | XEN_CPPC_INIT)) ) return -EINVAL; break; } diff --git a/xen/drivers/cpufreq/cpufreq.c b/xen/drivers/cpufreq/cpufreq.c index 9567221d97..d6b6c844d8 100644 --- a/xen/drivers/cpufreq/cpufreq.c +++ b/xen/drivers/cpufreq/cpufreq.c @@ -40,6 +40,7 @@ #include #include #include +#include #include #include =20 @@ -203,6 +204,11 @@ static int get_psd_info(unsigned int cpu, uint32_t *sh= ared_type, *domain_info_ptr =3D &processor_pminfo[cpu]->perf.domain_info; break; =20 + case XEN_CPPC_INIT: + *shared_type =3D processor_pminfo[cpu]->cppc_data.shared_type; + *domain_info_ptr =3D &processor_pminfo[cpu]->cppc_data.domain_info; + break; + default: ret =3D -EINVAL; break; @@ -229,7 +235,7 @@ int cpufreq_add_cpu(unsigned int cpu) if ( !processor_pminfo[cpu] || !cpu_online(cpu) ) return -EINVAL; =20 - if ( !(processor_pminfo[cpu]->init & XEN_PX_INIT) ) + if ( !(processor_pminfo[cpu]->init & (XEN_PX_INIT | XEN_CPPC_INIT)) ) return -EINVAL; =20 if (!cpufreq_driver.init) @@ -409,7 +415,7 @@ int cpufreq_del_cpu(unsigned int cpu) if ( !processor_pminfo[cpu] || !cpu_online(cpu) ) return -EINVAL; =20 - if ( !(processor_pminfo[cpu]->init & XEN_PX_INIT) ) + if ( !(processor_pminfo[cpu]->init & (XEN_PX_INIT | XEN_CPPC_INIT)) ) return -EINVAL; =20 if (!per_cpu(cpufreq_cpu_policy, cpu)) @@ -635,6 +641,124 @@ out: return ret; } =20 +static void print_CPPC(const struct xen_processor_cppc *cppc_data) +{ + printk("\t_CPC: highest_perf=3D%u, lowest_perf=3D%u, " + "nominal_perf=3D%u, lowest_nonlinear_perf=3D%u, " + "nominal_mhz=3D%uMHz, lowest_mhz=3D%uMHz\n", + cppc_data->cpc.highest_perf, cppc_data->cpc.lowest_perf, + cppc_data->cpc.nominal_perf, cppc_data->cpc.lowest_nonlinear_pe= rf, + cppc_data->cpc.nominal_mhz, cppc_data->cpc.lowest_mhz); +} + +int set_cppc_pminfo(unsigned int acpi_id, + const struct xen_processor_cppc *cppc_data) +{ + int ret =3D 0, cpuid; + struct processor_pminfo *pm_info; + + cpuid =3D get_cpu_id(acpi_id); + if ( cpuid < 0 || !cppc_data ) + { + ret =3D -EINVAL; + goto out; + } + + if ( cppc_data->pad[0] || cppc_data->pad[1] || cppc_data->pad[2] ) + { + ret =3D -EINVAL; + goto out; + } + + if ( cpufreq_verbose ) + printk("Set CPU acpi_id(%u) cpuid(%d) CPPC State info:\n", + acpi_id, cpuid); + + pm_info =3D processor_pminfo[cpuid]; + if ( !pm_info ) + { + pm_info =3D xvzalloc(struct processor_pminfo); + if ( !pm_info ) + { + ret =3D -ENOMEM; + goto out; + } + processor_pminfo[cpuid] =3D pm_info; + } + pm_info->acpi_id =3D acpi_id; + pm_info->id =3D cpuid; + pm_info->cppc_data =3D *cppc_data; + + if ( cppc_data->flags & XEN_CPPC_PSD ) + { + ret =3D check_psd_pminfo(cppc_data->shared_type); + if ( ret ) + goto out; + } + + if ( cppc_data->flags & XEN_CPPC_CPC ) + { + if ( cppc_data->cpc.highest_perf =3D=3D 0 || + cppc_data->cpc.highest_perf > UINT8_MAX || + cppc_data->cpc.nominal_perf =3D=3D 0 || + cppc_data->cpc.nominal_perf > UINT8_MAX || + cppc_data->cpc.lowest_nonlinear_perf =3D=3D 0 || + cppc_data->cpc.lowest_nonlinear_perf > UINT8_MAX || + cppc_data->cpc.lowest_perf =3D=3D 0 || + cppc_data->cpc.lowest_perf > UINT8_MAX || + cppc_data->cpc.lowest_perf > + cppc_data->cpc.nominal_perf || + cppc_data->cpc.lowest_nonlinear_perf > + cppc_data->cpc.nominal_perf || + cppc_data->cpc.nominal_perf > cppc_data->cpc.highest_perf ) + /* + * Right now, Xen doesn't actually use highest_perf/nominal_pe= rf/ + * lowest_nonlinear_perf/lowest_perf values read from ACPI _CPC + * table. Xen reads CPPC capability MSR to get these four valu= es. + * So warning is enough. + */ + printk_once(XENLOG_WARNING + "Broken CPPC perf values: lowest(%u), nonlinear_lo= west(%u), nominal(%u), highest(%u)\n", + cppc_data->cpc.lowest_perf, + cppc_data->cpc.lowest_nonlinear_perf, + cppc_data->cpc.nominal_perf, + cppc_data->cpc.highest_perf); + + /* lowest_mhz and nominal_mhz are optional value */ + if ( cppc_data->cpc.lowest_mhz > cppc_data->cpc.nominal_mhz ) + { + printk_once(XENLOG_WARNING + "Broken CPPC freq values: lowest(%u), nominal(%u)\= n", + cppc_data->cpc.lowest_mhz, + cppc_data->cpc.nominal_mhz); + /* Re-set with zero values, instead of keeping invalid values = */ + pm_info->cppc_data.cpc.nominal_mhz =3D 0; + pm_info->cppc_data.cpc.lowest_mhz =3D 0; + } + } + + if ( cppc_data->flags =3D=3D (XEN_CPPC_PSD | XEN_CPPC_CPC) ) + { + if ( cpufreq_verbose ) + { + print_PSD(&pm_info->cppc_data.domain_info); + print_CPPC(&pm_info->cppc_data); + } + + pm_info->init =3D XEN_CPPC_INIT; + ret =3D cpufreq_cpu_init(cpuid); +#ifndef NDEBUG + if ( ret ) + dprintk(XENLOG_WARNING, + "CPU %u failed to be initialized with amd-cppc mode, a= nd users could only reboot and re-define cmdline with \"cpufreq=3Dxen\"", + cpuid); +#endif + } + + out: + return ret; +} + static void cpufreq_cmdline_common_para(struct cpufreq_policy *new_policy) { if (usr_max_freq) diff --git a/xen/include/acpi/cpufreq/processor_perf.h b/xen/include/acpi/c= pufreq/processor_perf.h index 5f2612b15a..f1f4f3138d 100644 --- a/xen/include/acpi/cpufreq/processor_perf.h +++ b/xen/include/acpi/cpufreq/processor_perf.h @@ -5,7 +5,8 @@ #include #include =20 -#define XEN_PX_INIT 0x80000000U +#define XEN_CPPC_INIT 0x40000000U +#define XEN_PX_INIT 0x80000000U =20 unsigned int powernow_register_driver(void); unsigned int get_measured_perf(unsigned int cpu, unsigned int flag); @@ -35,6 +36,7 @@ struct processor_pminfo { uint32_t acpi_id; uint32_t id; struct processor_performance perf; + struct xen_processor_cppc cppc_data; =20 uint32_t init; }; diff --git a/xen/include/public/platform.h b/xen/include/public/platform.h index 2725b8d104..0bf7543fff 100644 --- a/xen/include/public/platform.h +++ b/xen/include/public/platform.h @@ -363,6 +363,7 @@ DEFINE_XEN_GUEST_HANDLE(xenpf_getidletime_t); #define XEN_PM_PX 1 #define XEN_PM_TX 2 #define XEN_PM_PDC 3 +#define XEN_PM_CPPC 4 =20 /* Px sub info type */ #define XEN_PX_PCT 1 @@ -370,6 +371,10 @@ DEFINE_XEN_GUEST_HANDLE(xenpf_getidletime_t); #define XEN_PX_PPC 4 #define XEN_PX_PSD 8 =20 +/* CPPC sub info type */ +#define XEN_CPPC_PSD 1 +#define XEN_CPPC_CPC 2 + struct xen_power_register { uint32_t space_id; uint32_t bit_width; @@ -457,6 +462,30 @@ struct xen_processor_performance { typedef struct xen_processor_performance xen_processor_performance_t; DEFINE_XEN_GUEST_HANDLE(xen_processor_performance_t); =20 +struct xen_processor_cppc { + uint8_t flags; /* flag for CPPC sub info type */ + uint8_t pad[3]; /* padding and must be zero */ + /* + * Subset _CPC fields useful for CPPC-compatible cpufreq + * driver's initialization + */ + struct { + uint32_t highest_perf; + uint32_t nominal_perf; + uint32_t lowest_nonlinear_perf; + uint32_t lowest_perf; + uint32_t lowest_mhz; + uint32_t nominal_mhz; + } cpc; + /* Coordination type of this processor */ +#define XEN_CPUPERF_SHARED_TYPE_HW 1 /* HW does needed coordination */ +#define XEN_CPUPERF_SHARED_TYPE_ALL 2 /* All dependent CPUs should set fr= eq */ +#define XEN_CPUPERF_SHARED_TYPE_ANY 3 /* Freq can be set from any depende= nt CPU */ + uint32_t shared_type; + struct xen_psd_package domain_info; /* _PSD */ +}; +typedef struct xen_processor_cppc xen_processor_cppc_t; + struct xenpf_set_processor_pminfo { /* IN variables */ uint32_t id; /* ACPI CPU ID */ @@ -465,6 +494,7 @@ struct xenpf_set_processor_pminfo { struct xen_processor_power power;/* Cx: _CST/_CSD */ struct xen_processor_performance perf; /* Px: _PPC/_PCT/_PSS/_P= SD */ XEN_GUEST_HANDLE(uint32) pdc; /* _PDC */ + xen_processor_cppc_t cppc_data; /* _CPC and _PSD */ } u; }; typedef struct xenpf_set_processor_pminfo xenpf_set_processor_pminfo_t; diff --git a/xen/include/xen/pmstat.h b/xen/include/xen/pmstat.h index 8350403e95..1f21f43a13 100644 --- a/xen/include/xen/pmstat.h +++ b/xen/include/xen/pmstat.h @@ -7,8 +7,13 @@ =20 int set_px_pminfo(uint32_t acpi_id, struct xen_processor_performance *perf= ); long set_cx_pminfo(uint32_t acpi_id, struct xen_processor_power *power); +int set_cppc_pminfo(unsigned int acpi_id, + const struct xen_processor_cppc *cppc_data); =20 #ifdef CONFIG_COMPAT +struct compat_processor_cppc; +int compat_set_cppc_pminfo(unsigned int acpi_id, + const struct compat_processor_cppc *cppc_data); struct compat_processor_performance; int compat_set_px_pminfo(uint32_t acpi_id, struct compat_processor_perform= ance *perf); struct compat_processor_power; diff --git a/xen/include/xlat.lst b/xen/include/xlat.lst index 3c7b6c6830..a800671f2f 100644 --- a/xen/include/xlat.lst +++ b/xen/include/xlat.lst @@ -168,6 +168,7 @@ ! processor_performance platform.h ! processor_power platform.h ? processor_px platform.h +! processor_cppc platform.h ! psd_package platform.h ? xenpf_enter_acpi_sleep platform.h ? xenpf_pcpu_version platform.h --=20 2.34.1 From nobody Fri Oct 31 11:29:11 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=amd.com); dmarc=pass(p=quarantine dis=none) header.from=amd.com ARC-Seal: i=2; a=rsa-sha256; t=1748335801; cv=pass; d=zohomail.com; s=zohoarc; b=TNeznnpFm3fbc4iouJmhUzf59TGprJd7kFj+BGytvXGme/l/2pQ/cBd0g86aXO4TrPaORhsGFoPhO7DINWDiQeQd1txya7W6v5wtpd7Io8GuBDHHmjVtWtQUTE0P5mFeVnZZ3o5P+/6+S2xxsOJJVf7GB6TXRXb0Ni6sCkP17ic= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1748335801; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=7Jy/8v14iiBy4RKFkuZ6/LcMiLpi/ycMhiWhZ/kpWtk=; b=Eg8VR5v67yW3Pg79K0oT1Nh+gDZZO56cOFQidNCWJyUEDUmo6BknDhk3UWSZy0ZAKy/+C1iQ/pDHv1RMGz8BjXGdp2BmX5fj6N9JOka391StVwBoAH+WNzRO7UGRIPwMfoXwtwvx7JF1XiYVr+u80SQmmMP99Ka+UyYQ3WJxSXk= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=amd.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 174833580102674.98066464655255; Tue, 27 May 2025 01:50:01 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.997946.1378774 (Exim 4.92) (envelope-from ) id 1uJq01-0003x7-Ny; Tue, 27 May 2025 08:49:29 +0000 Received: by outflank-mailman (output) from mailman id 997946.1378774; Tue, 27 May 2025 08:49:29 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uJq01-0003wv-Jp; Tue, 27 May 2025 08:49:29 +0000 Received: by outflank-mailman (input) for mailman id 997946; Tue, 27 May 2025 08:49:27 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uJpzz-0002ks-Fb for xen-devel@lists.xenproject.org; Tue, 27 May 2025 08:49:27 +0000 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (mail-dm6nam12on20630.outbound.protection.outlook.com [2a01:111:f403:2417::630]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 7b5d7f03-3ad7-11f0-b894-0df219b8e170; Tue, 27 May 2025 10:49:22 +0200 (CEST) Received: from MW4PR04CA0163.namprd04.prod.outlook.com (2603:10b6:303:85::18) by CY8PR12MB7611.namprd12.prod.outlook.com (2603:10b6:930:9b::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.26; Tue, 27 May 2025 08:49:20 +0000 Received: from SJ5PEPF000001F6.namprd05.prod.outlook.com (2603:10b6:303:85:cafe::a1) by MW4PR04CA0163.outlook.office365.com (2603:10b6:303:85::18) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8769.19 via Frontend Transport; Tue, 27 May 2025 08:49:18 +0000 Received: from SATLEXMB04.amd.com (165.204.84.17) by SJ5PEPF000001F6.mail.protection.outlook.com (10.167.242.74) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8769.18 via Frontend Transport; Tue, 27 May 2025 08:49:18 +0000 Received: from penny-System-Product-Name.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Tue, 27 May 2025 03:49:17 -0500 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 7b5d7f03-3ad7-11f0-b894-0df219b8e170 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=yIeZ2eQo10zwcE1r+5ujiBRNlSsmDquBZcKsyQ7mhD+q7b+HZsGJcY+vkQiT6cbXTw/XdSAK8uUHTJWsZ943VY9rZ/JGpWAI1Xd4d8YnKy79ijWg6RnZHGZt08pOX/uQx69HEt8GdQjD3kqgnFaSJBYw5FJAJYMKsKaCHDw6P+fdOy/YfSnUPvXsrQMgWoliO8PR2ZgbQUrWF6lr9y6Qs7XyOI1txW/7rwvjJKfd8pU1Mw0OeV1/Gzq0VqtErLM4Z9u9Ds5YJ5IFkDnUmQKGGyQeniogX0kReTcu1EEyAPHlXWJMPddlWq7F2MVTNirtPRvON5zRcWXMYypF41eClA== 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=7Jy/8v14iiBy4RKFkuZ6/LcMiLpi/ycMhiWhZ/kpWtk=; b=f7SeKjaxeaZ4Hm5x0xcKMDOIrjT6vJ6BBpMU8eM94swkYeM+sAp+NfQu3p/3ZV9btyJKaXT1s9gPUBPMjxAcsyvB8KV4TrSwQ77Z5rgqWfgkA4OYQRH5JUen9gk7Jmya5J+pHQ6b8YHHtMagXq+gpyHb4ddZO7A9Thw89QVyrjyZCMhfp+PZfUduTY/8bLMMh7QvvPO6+bZv8ANNMxm4TCJMHel8bq2k46uUmZYbxISL9tyRrAPwMPsxGK7685TSmz29R8JG1AkiUiUAIA8YOZvfFKWEr+W2Ck0NsW5ixX6Fjw0Ph4rmaGfqJewB3PrVtRAHuBDeC6CNDGlB7BbA0w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=7Jy/8v14iiBy4RKFkuZ6/LcMiLpi/ycMhiWhZ/kpWtk=; b=sMeEUm+9pMjaQA4UzpqSyyz7spoaY1e8ymZ7ATkV5vbkXaMEGEfhFyrTQVa6xK4LJCm5BwGoNmlAr5XaQqRzfgBdy8Op7GiCIZkuLDzxPxNhTuKs7zbDpiZS+KXybs/kofpXQRNymkhmnq1Bp9alF+3RUuOxHZMIaxoDHOGhmy0= X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C From: Penny Zheng To: CC: , Penny Zheng , Jan Beulich Subject: [PATCH v5 05/18] xen/cpufreq: refactor cmdline "cpufreq=xxx" Date: Tue, 27 May 2025 16:48:20 +0800 Message-ID: <20250527084833.338427-6-Penny.Zheng@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250527084833.338427-1-Penny.Zheng@amd.com> References: <20250527084833.338427-1-Penny.Zheng@amd.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ5PEPF000001F6:EE_|CY8PR12MB7611:EE_ X-MS-Office365-Filtering-Correlation-Id: 87963892-470d-472a-bfdf-08dd9cfb5e49 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|1800799024|36860700013|376014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?OqJJzblkk6wbTBFBY4VTGPtyIJsK8ia7ADdNaueXzcLIQ0JHxVTZnCMfQdFs?= =?us-ascii?Q?w24/b3+G1kg4NbaKVqcqcjgkZybJafnz+J0zSfhg2Rku+GLqkvwqCcjkTS7m?= =?us-ascii?Q?MG1xja7Srw7LLgcB8jcEEsosEx157YqWw0vkBwz7AczEFn6ibOWZu+l4jp3I?= =?us-ascii?Q?kz0THwUUmcGOw/Tee7O3yeoy4A7IkWFDn1xsnDDr+LbTD1yl5EuveiPXI9m+?= =?us-ascii?Q?cp00//bIoWm0sBbS5MB+WRMLTmf8Mw9mg9Wg52ZjIDvt2mn9oT++K3t55glJ?= =?us-ascii?Q?XBSyo9KWZV/bsJjXuoayNh1wlLXZ0vdjsyc0hNAUVrQUlAwucDTZqDXkB81k?= =?us-ascii?Q?KDVYE+xwBMNARUBuCQa9SJbVS2mTygg5dXjvPRBLXnVsZGFEMcfIguw10LF5?= =?us-ascii?Q?VbU9M4Tj5LWtczcX2k2q52Kbtj9sLMjx+3icdRfb1i1TXmbQosE2GuvckIgB?= =?us-ascii?Q?ozcSTGPX1s+dvkOAdJ/dcVGEZfyJ83qHXkiaWXIKJjW9GkiznYdHjZpDqKYf?= =?us-ascii?Q?rTnR54QV18cmn0aYmGsjJebtqQdCRxIA3LvEP586jcZJdSr8CI3yAIwrn980?= =?us-ascii?Q?lBhP2RnyGjbXR7x+POaa1yVVuvVuiFlq1pQL7pbXt1cKSUGn55lxgWni2Vel?= =?us-ascii?Q?1/MDWdrz2yC2uWmmIVJNMzSwA2SYS1MZ9p6yzOw41YXMSiEE4+VkiA3WPg/r?= =?us-ascii?Q?jcuoKkRXkvSPI9lPEF36Zsqbm2vufeCmy7nq7uiAhL8h5mEwigBv8s/YAbbp?= =?us-ascii?Q?wlsxTWtKE7Cl5TH9G3qsb9CErqy+ZSWf9p2av8wQBC2Vy43EJ03Gi6N6AsoY?= =?us-ascii?Q?QWoNeFpbf6X3LFv6ZVbELGS8ggv9RH2I50MdOVROKm7VPMzDXb5ghtx5f2Dq?= =?us-ascii?Q?1BP2pPPsADcNy9f6calrZPOfCn54+iMOlBpD6gFbZ2ZcBMNaYTDZoUxB1QRQ?= =?us-ascii?Q?+US0qoXAT0YurgJH6KsVMIMhSm+uywtKrgCxdClo8rMdTiR/BmV/M1vKT9nr?= =?us-ascii?Q?Nl/JRT5AXn2iA4SSNZDrvtzqbDICDduvIPGLDYFMtgiLhLeyuKkIyTR3hNOC?= =?us-ascii?Q?oP3DK5/tv/T5pXFy9WMnhfqjw1GN/fyRO72EFVsvc2uqggQ0MTHyWY9W8JtZ?= =?us-ascii?Q?fg3SahfiRWfmKMw2lwGxHkalxi+m/HfcEBSzzeWCOdgV4eIfZqfC+QPn/C4Y?= =?us-ascii?Q?8cXl47kC11ec6jLaqqN4UTm/0tAhi4fqJnwXBze/xdIA139usWvWnZvzyuQk?= =?us-ascii?Q?jXL3AEYd0izKgGGls5/eD0c13YY/QdqxiKH5M8HWnQdRwsDcuQJX/IuqajsE?= =?us-ascii?Q?ix+eSTQMYtEOHDGumKUvTyYGUrFRychsCv2s7go9cDgqzFdgtqX2Usu49myF?= =?us-ascii?Q?aRvuF6sFXVGx93NeT0ffq+304Pt1rmJzoBbKjx9wYEFtw/ErPO3fZ8Ifqf5C?= =?us-ascii?Q?kUV52GieTjyYBCPefafWVYbpUnbkYLD9V+V2cxoVbwQMvBdLXKGKAX1sVLOr?= =?us-ascii?Q?i3FE4lenjpfrtNU19UABRXyt01jS3iA7+YOP?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(82310400026)(1800799024)(36860700013)(376014);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 May 2025 08:49:18.7827 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 87963892-470d-472a-bfdf-08dd9cfb5e49 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: SJ5PEPF000001F6.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY8PR12MB7611 X-ZohoMail-DKIM: pass (identity @amd.com) X-ZM-MESSAGEID: 1748335801339116600 Content-Type: text/plain; charset="utf-8" A helper function handle_cpufreq_cmdline() is introduced to tidy different handling pathes. We also add a new helper cpufreq_opts_contain() to ignore and warn user redundant setting, like "cpufreq=3Dhwp;hwp;xen" Signed-off-by: Penny Zheng --- v2 -> v3: - new commit --- v3 -> v4: - add one single helper to do the tidy work - ignore and warn user redundant setting --- v4 -> v5: - make "cpufreq_opts_str" static and the string literals end up in .init.rodata. - use "CPUFREQ_xxx" as array slot index - blank line between non-fall-through case blocks --- xen/drivers/cpufreq/cpufreq.c | 57 ++++++++++++++++++++++++++++++----- 1 file changed, 49 insertions(+), 8 deletions(-) diff --git a/xen/drivers/cpufreq/cpufreq.c b/xen/drivers/cpufreq/cpufreq.c index d6b6c844d8..d1b51c8dd0 100644 --- a/xen/drivers/cpufreq/cpufreq.c +++ b/xen/drivers/cpufreq/cpufreq.c @@ -69,8 +69,55 @@ enum cpufreq_xen_opt __initdata cpufreq_xen_opts[2] =3D = { CPUFREQ_xen, CPUFREQ_none }; unsigned int __initdata cpufreq_xen_cnt =3D 1; =20 +static const char __initconst cpufreq_opts_str[][5] =3D { + [CPUFREQ_none] =3D "none", + [CPUFREQ_xen] =3D "xen", + [CPUFREQ_hwp] =3D "hwp", +}; + static int __init cpufreq_cmdline_parse(const char *s, const char *e); =20 +static bool __init cpufreq_opts_contain(enum cpufreq_xen_opt option) +{ + unsigned int count =3D cpufreq_xen_cnt; + + while ( count ) + { + if ( cpufreq_xen_opts[--count] =3D=3D option ) + return true; + } + + return false; +} + +static int __init handle_cpufreq_cmdline(enum cpufreq_xen_opt option) +{ + int ret =3D 0; + + if ( cpufreq_opts_contain(option) ) + { + printk(XENLOG_WARNING "Duplicate cpufreq driver option: %s\n", + cpufreq_opts_str[option]); + return 0; + } + + cpufreq_controller =3D FREQCTL_xen; + cpufreq_xen_opts[cpufreq_xen_cnt++] =3D option; + switch ( option ) + { + case CPUFREQ_hwp: + case CPUFREQ_xen: + xen_processor_pmbits |=3D XEN_PROCESSOR_PM_PX; + break; + + default: + ret =3D -EINVAL; + break; + } + + return ret; +} + static int __init cf_check setup_cpufreq_option(const char *str) { const char *arg =3D strpbrk(str, ",:;"); @@ -114,20 +161,14 @@ static int __init cf_check setup_cpufreq_option(const= char *str) =20 if ( choice > 0 || !cmdline_strcmp(str, "xen") ) { - xen_processor_pmbits |=3D XEN_PROCESSOR_PM_PX; - cpufreq_controller =3D FREQCTL_xen; - cpufreq_xen_opts[cpufreq_xen_cnt++] =3D CPUFREQ_xen; - ret =3D 0; + ret =3D handle_cpufreq_cmdline(CPUFREQ_xen); if ( arg[0] && arg[1] ) ret =3D cpufreq_cmdline_parse(arg + 1, end); } else if ( IS_ENABLED(CONFIG_INTEL) && choice < 0 && !cmdline_strcmp(str, "hwp") ) { - xen_processor_pmbits |=3D XEN_PROCESSOR_PM_PX; - cpufreq_controller =3D FREQCTL_xen; - cpufreq_xen_opts[cpufreq_xen_cnt++] =3D CPUFREQ_hwp; - ret =3D 0; + ret =3D handle_cpufreq_cmdline(CPUFREQ_hwp); if ( arg[0] && arg[1] ) ret =3D hwp_cmdline_parse(arg + 1, end); } --=20 2.34.1 From nobody Fri Oct 31 11:29:11 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=amd.com); dmarc=pass(p=quarantine dis=none) header.from=amd.com ARC-Seal: i=2; a=rsa-sha256; t=1748335794; cv=pass; d=zohomail.com; s=zohoarc; b=m0WiDvsIfxTdKB7bPrkt6ou2ttInI8pFK38emd/snOh675iFFAnQbtP2kSiPqLHn6vap2SfOo4cDgCQsU3CChU4KeL3iLu9QNt2T7xGsETO9lb+6u6ssdy3sRWuUDtvoqqyIKbsOz/qkD8KD/ZHyKE7VUODrI0MVKhaVSBT3lQU= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1748335794; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=h9erWVpE/ZTcLZIIbo/RSG1FVEIUzVM1kHU7GnlvLeo=; b=DvtNKINNNUewULKIpCe7lW45+C8ufYB14JHgsOufhQTQnhHUD555/3zM+wk7eGMRmMnY2p13XAS7MriOdu2pB18ZJtj2YoVIfhcil1K1AYd/MGEJINq3UlQPoPeBm784GynqpPrUcUB+eyu7W5FNRsz9Dy93aNwI0RrS869o300= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=amd.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 174833579439060.713499688400134; Tue, 27 May 2025 01:49:54 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.997947.1378784 (Exim 4.92) (envelope-from ) id 1uJq03-0004Ci-0B; Tue, 27 May 2025 08:49:31 +0000 Received: by outflank-mailman (output) from mailman id 997947.1378784; Tue, 27 May 2025 08:49:30 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uJq02-0004CX-T5; Tue, 27 May 2025 08:49:30 +0000 Received: by outflank-mailman (input) for mailman id 997947; Tue, 27 May 2025 08:49:30 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uJq02-00031E-C6 for xen-devel@lists.xenproject.org; Tue, 27 May 2025 08:49:30 +0000 Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2061d.outbound.protection.outlook.com [2a01:111:f403:200a::61d]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 7f506cf6-3ad7-11f0-a2fd-13f23c93f187; Tue, 27 May 2025 10:49:29 +0200 (CEST) Received: from MW4PR04CA0160.namprd04.prod.outlook.com (2603:10b6:303:85::15) by MN2PR12MB4128.namprd12.prod.outlook.com (2603:10b6:208:1dd::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.27; Tue, 27 May 2025 08:49:22 +0000 Received: from SJ5PEPF000001F6.namprd05.prod.outlook.com (2603:10b6:303:85:cafe::b9) by MW4PR04CA0160.outlook.office365.com (2603:10b6:303:85::15) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8769.23 via Frontend Transport; Tue, 27 May 2025 08:49:21 +0000 Received: from SATLEXMB04.amd.com (165.204.84.17) by SJ5PEPF000001F6.mail.protection.outlook.com (10.167.242.74) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8769.18 via Frontend Transport; Tue, 27 May 2025 08:49:21 +0000 Received: from penny-System-Product-Name.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Tue, 27 May 2025 03:49:18 -0500 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 7f506cf6-3ad7-11f0-a2fd-13f23c93f187 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=N3rh5QKtwSeme2xscV4SNSIuuAmwinGmBtE2B0k4FMB0zhw6ivkt3HPRRDeSDcZadikvP4Wqi/f5AbsBukuryZlUCHTkfTZsgpI20h3ZSjbm1mMIOGC10KTCjTBvJmhyCxZQ2REZlvlykF2SisJw8rWRclSknJrWo2e2yw2z8/yiWF1r9AGQXHHn0iP/J1z+zBNqXYA7RSDXmvoMlzYssV7xdqCaD7V4QPkq+ph1kdyLQoPSeZCw+pOgaZerxHa22ywrIwEMehtB/sefYmvgrbZzPafZGKn5TeiM9K8O9c2MXmKuKy3QBu0BhDPUx1pHmQSx+/nGLUDNbqHFATY89g== 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=h9erWVpE/ZTcLZIIbo/RSG1FVEIUzVM1kHU7GnlvLeo=; b=mPwkGpujwNQtWKC0LV4RCtNG8vcO6NOGM74dHrcwLJ002ELAEaGOlRHtFWh4RchfbqwaLb4FWbjYR5GAZojClGCC9pEg2a20v/qJDEUVtcO5zcznjZDRB7gM6usTFYtmLLjMe8kvsABMVGOB6vP1BbJa1Tw5E5iSdUFfXFcigQsTJO2m/SMYnCO5eTNTc7dXd+NG3CeaNjUifn+W+yQFcLcUA3xPtqwbm9KbnoiJlSnf+AKZ1DMVBRxSSF/Lg+HdzgqGazgLvH6KmH6a7YHfG3wykVYFb9JiL6wMD/hWi/1gkJymvkmgi+K44ZH8RNjWbBQAzrNwBRXX7aJqQNYA0w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=h9erWVpE/ZTcLZIIbo/RSG1FVEIUzVM1kHU7GnlvLeo=; b=EtAbKtMcKs8+SKkK+gaHmKUumMiN+wzp0WOU9fFRYBC0K/rSBpdSZS2StDSj9alc0xqpRZT18y4PhUaMluVAOSJ/Gm6UotT3UObmD+r+iWJC38UW8+m/5/e6H8no4PHsUagjz4AWnbji8O9WovJsUWRXAsNDTP0ezMRcQ5QIILc= X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C From: Penny Zheng To: CC: , Penny Zheng , Andrew Cooper , Anthony PERARD , Michal Orzel , Jan Beulich , "Julien Grall" , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Stefano Stabellini Subject: [PATCH v5 06/18] xen/x86: introduce "cpufreq=amd-cppc" xen cmdline Date: Tue, 27 May 2025 16:48:21 +0800 Message-ID: <20250527084833.338427-7-Penny.Zheng@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250527084833.338427-1-Penny.Zheng@amd.com> References: <20250527084833.338427-1-Penny.Zheng@amd.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ5PEPF000001F6:EE_|MN2PR12MB4128:EE_ X-MS-Office365-Filtering-Correlation-Id: 09ce0d71-04b9-47c8-1ea7-08dd9cfb600a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|36860700013|82310400026|376014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?UJXu5iH9JqbJlHz3O7eEbqJVQ8WynXcwnG3NZPTn+gRCKT5s7H6xP5+j2rcc?= =?us-ascii?Q?5OOQIr+WP8vWlTsUWbUiAn6GG33xspDhPQ+FV7B/jzSQVVxj/q6ZGw2CoomK?= =?us-ascii?Q?HcHEFtPELLCJOjhO+q9hVBKQLJeQORjUhbv9GqAj3KMxlsBPl9f9SXW9tnxg?= =?us-ascii?Q?IQgG/7mfwnN5sdyIONo/2uPCP+NtNJclmKv91WAyxaOHgCwzooFpyGGXX+KW?= =?us-ascii?Q?IPBDcU29Fvd0/8vCVgoTC2lfro0JroZTLezfdxid4LWcpIkMunHrJ8lkv2JS?= =?us-ascii?Q?AKgHys0WNAI9EcUzbn93O4wAGYAJ+rp6OKQ6r4kuZDnh0wq3+ZToVsP0FZNp?= =?us-ascii?Q?8btAMBmE2GlCyZcyHwg14OQmwT1Xhut3xYMdq++qBF98q8DFjhYlIS+hHCda?= =?us-ascii?Q?Xad+umHgrTvCfy0qqew9x2jrcoseQUzTrxLPwgb6pKt4kZsUCpR+MQLmoDK0?= =?us-ascii?Q?bIS8VN93lrgtj1LWDl7lbIy1BhrKlmUB7/D2pZus1k5ut+qNquBTidKkH/qy?= =?us-ascii?Q?IEHM0iI+PHnliUO2UxpO1EboOyLbQPHywMkjAmaKlpgE5rg21sE7/eiGYMo+?= =?us-ascii?Q?aE9Ovxfe/ME7TU8RRGAcArRqmEZRgdwFQnEhgfvRAnXABZ2inrDi7OsItqiX?= =?us-ascii?Q?2o8Ep6bRcfdtxgHQDFiz35oMIAHk0C8MduZTekIJYz6jMOLrFt4o4j52Etd+?= =?us-ascii?Q?8PEVd9l6zIlbMydoBBVSegkDvrN+oQc49Gwxkn7l1LUY4AduAkFZUt1Lx1vT?= =?us-ascii?Q?X5vda2y3douDxc7c5wjhlpdgy9n4BDVILg7MPnuzYrrQ5+fjRKsJiU/nFF2m?= =?us-ascii?Q?GhYE8iV+4kAVaEOK9gknryLsFsOwWjZaJyATSbvTDNupSOvPoXeIr8FfX++J?= =?us-ascii?Q?3lRemqbecFUmDV+x4dKW1xS5DWVeQjfUP9IweFl8/OpSowJ+cMjTq2xo6Iaf?= =?us-ascii?Q?hdee8Wac50OoZqBMRkyiMMPNwUY46gehbB+h8X/Y3VEjixrrNez669ftywzx?= =?us-ascii?Q?yEv1y4ta3f6CMtsIZ4I6TF/y7mQIYTWumehtduvhI6DG1RyF3G2sNRG7x4Ha?= =?us-ascii?Q?dKWQGYrhNspfzjOTN4icIe8iG2wKh64FoncXr5cUUbKftzL51mO2a268lfCN?= =?us-ascii?Q?hCLMDVFTmCuX55dQpd/saEKMT4gQI8YI41qJ1xWhi+vQ1HjrxH2RP9T5lNK7?= =?us-ascii?Q?EmoKGNulWsUYD0vEnfN/VaBomJf21da2UTxhnlj6IItgNvcvcbG1afw2Dd0s?= =?us-ascii?Q?wRkJqRSwiD25x3QXsa1ZrcXVdF2nsKNjYs9v9Zy7taoCjlF/upmVeHFa1PM9?= =?us-ascii?Q?CV63+BzAhCjNuF1SDBSgthH/5PTo4DK/DfRmmKhoYKgbHy1WFg+vRgRGggKS?= =?us-ascii?Q?GyoO4bU2Sj3S8slWmxtx0/u/sEaCVZjb/fFgkS2GE0E230B4MDIUN08sR4g3?= =?us-ascii?Q?I/WOi4J195mLcPgPbyt/DsrU0E0Q7zui73iFKq8zmoV4RapI39uEfJTgaqmm?= =?us-ascii?Q?cScBpJ4WimPB85LNS2KpWx1wPEJXkYU/KK2K?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(1800799024)(36860700013)(82310400026)(376014);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 May 2025 08:49:21.7202 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 09ce0d71-04b9-47c8-1ea7-08dd9cfb600a X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: SJ5PEPF000001F6.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR12MB4128 X-ZohoMail-DKIM: pass (identity @amd.com) X-ZM-MESSAGEID: 1748335795535116600 Content-Type: text/plain; charset="utf-8" Users need to set "cpufreq=3Damd-cppc" in xen cmdline to enable amd-cppc driver, which selects ACPI Collaborative Performance and Power Control (CPPC) on supported AMD hardware to provide a finer grained frequency control mechanism. `verbose` option can also be included to support verbose print. When users setting "cpufreq=3Damd-cppc", a new amd-cppc driver shall be registered and used. All hooks for amd-cppc driver are transiently missing and will be implemented in the ongoing commits. New xen-pm internal flag XEN_PROCESSOR_PM_CPPC is introduced, to be differentiated with legacy XEN_PROCESSOR_PM_PX. We define XEN_PROCESSOR_PM_CPPC 0x100, as it is the next value to use after 8-bits wi= de public xen-pm options. All xen-pm flag checking involving XEN_PROCESSOR_PM_= PX shall also be updated to consider XEN_PROCESSOR_PM_CPPC now. Xen is not expected to support both or mixed mode (CPPC & legacy PSS, _PCT, _PPC) operations, so only one cpufreq driver gets registerd, either amd-cppc or legacy P-states driver, which is reflected and asserted by the incompati= ble flags XEN_PROCESSOR_PM_PX and XEN_PROCESSOR_PM_CPPC. Signed-off-by: Penny Zheng --- v1 -> v2: - Obey to alphabetic sorting and also strict it with CONFIG_AMD - Remove unnecessary empty comment line - Use __initconst_cf_clobber for pre-filled structure cpufreq_driver - Make new switch-case code apply to Hygon CPUs too - Change ENOSYS with EOPNOTSUPP - Blanks around binary operator - Change all amd_/-pstate defined values to amd_/-cppc --- v2 -> v3 - refactor too long lines - Make sure XEN_PROCESSOR_PM_PX and XEN_PROCESSOR_PM_CPPC incompatible flags after cpufreq register registrantion --- v3 -> v4: - introduce XEN_PROCESSOR_PM_CPPC in xen internal header - complement "Hygon" in log message - remove unnecessary if() - grow cpufreq_xen_opts[] array --- v4 -> v5: - remove XEN_PROCESSOR_PM_xxx flag sanitization from individual driver - prefer ! over "=3D=3D 0" in purely boolean contexts - Blank line between non-fall-through case blocks - add build-time checking between internal and public XEN_PROCESSOR_PM_* values - define XEN_PROCESSOR_PM_CPPC with 0x100, as it is the next value to use after public interface, and public mask SIF_PM_MASK is 8 bits wide. - as Dom0 will send the CPPC/Px data whenever it could, the return value sh= all be 0 instead of -ENOSYS/EOPNOTSUP when platform doesn't require these data. --- docs/misc/xen-command-line.pandoc | 7 ++- xen/arch/x86/acpi/cpufreq/Makefile | 1 + xen/arch/x86/acpi/cpufreq/amd-cppc.c | 68 +++++++++++++++++++++++ xen/arch/x86/acpi/cpufreq/cpufreq.c | 63 ++++++++++++++++++++- xen/arch/x86/platform_hypercall.c | 13 ++++- xen/drivers/acpi/pmstat.c | 3 +- xen/drivers/cpufreq/cpufreq.c | 18 +++++- xen/include/acpi/cpufreq/cpufreq.h | 6 +- xen/include/acpi/cpufreq/processor_perf.h | 3 + xen/include/public/sysctl.h | 1 + 10 files changed, 175 insertions(+), 8 deletions(-) create mode 100644 xen/arch/x86/acpi/cpufreq/amd-cppc.c diff --git a/docs/misc/xen-command-line.pandoc b/docs/misc/xen-command-line= .pandoc index 89db6e83be..9ef847a336 100644 --- a/docs/misc/xen-command-line.pandoc +++ b/docs/misc/xen-command-line.pandoc @@ -515,7 +515,7 @@ If set, force use of the performance counters for oprof= ile, rather than detectin available support. =20 ### cpufreq -> `=3D none | {{ | xen } { [:[powersave|performance|ondemand|use= rspace][,[]][,[]]] } [,verbose]} | dom0-kernel | hwp[:[][,verbose]]` +> `=3D none | {{ | xen } { [:[powersave|performance|ondemand|use= rspace][,[]][,[]]] } [,verbose]} | dom0-kernel | hwp[:[][,verbose]] | amd-cppc[:[verbose]]` =20 > Default: `xen` =20 @@ -526,7 +526,7 @@ choice of `dom0-kernel` is deprecated and not supported= by all Dom0 kernels. * `` and `` are integers which represent max and min pro= cessor frequencies respectively. * `verbose` option can be included as a string or also as `verbose=3D` - for `xen`. It is a boolean for `hwp`. + for `xen`. It is a boolean for `hwp` and `amd-cppc`. * `hwp` selects Hardware-Controlled Performance States (HWP) on supported = Intel hardware. HWP is a Skylake+ feature which provides better CPU power management. The default is disabled. If `hwp` is selected, but hardware @@ -534,6 +534,9 @@ choice of `dom0-kernel` is deprecated and not supported= by all Dom0 kernels. * `` is a boolean to enable Hardware Duty Cycling (HDC). HDC enables= the processor to autonomously force physical package components into idle st= ate. The default is enabled, but the option only applies when `hwp` is enable= d. +* `amd-cppc` selects ACPI Collaborative Performance and Power Control (CPP= C) + on supported AMD hardware to provide finer grained frequency control + mechanism. The default is disabled. =20 There is also support for `;`-separated fallback options: `cpufreq=3Dhwp;xen,verbose`. This first tries `hwp` and falls back to `xe= n` if diff --git a/xen/arch/x86/acpi/cpufreq/Makefile b/xen/arch/x86/acpi/cpufreq= /Makefile index e7dbe434a8..a2ba34bda0 100644 --- a/xen/arch/x86/acpi/cpufreq/Makefile +++ b/xen/arch/x86/acpi/cpufreq/Makefile @@ -1,4 +1,5 @@ obj-$(CONFIG_INTEL) +=3D acpi.o +obj-$(CONFIG_AMD) +=3D amd-cppc.o obj-y +=3D cpufreq.o obj-$(CONFIG_INTEL) +=3D hwp.o obj-$(CONFIG_AMD) +=3D powernow.o diff --git a/xen/arch/x86/acpi/cpufreq/amd-cppc.c b/xen/arch/x86/acpi/cpufr= eq/amd-cppc.c new file mode 100644 index 0000000000..9e64bf957a --- /dev/null +++ b/xen/arch/x86/acpi/cpufreq/amd-cppc.c @@ -0,0 +1,68 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * amd-cppc.c - AMD Processor CPPC Frequency Driver + * + * Copyright (C) 2025 Advanced Micro Devices, Inc. All Rights Reserved. + * + * Author: Penny Zheng + * + * AMD CPPC cpufreq driver introduces a new CPU performance scaling design + * for AMD processors using the ACPI Collaborative Performance and Power + * Control (CPPC) feature which provides finer grained frequency control r= ange. + */ + +#include +#include +#include +#include + +static bool __init amd_cppc_handle_option(const char *s, const char *end) +{ + int ret; + + ret =3D parse_boolean("verbose", s, end); + if ( ret >=3D 0 ) + { + cpufreq_verbose =3D ret; + return true; + } + + return false; +} + +int __init amd_cppc_cmdline_parse(const char *s, const char *e) +{ + do { + const char *end =3D strpbrk(s, ",;"); + + if ( !amd_cppc_handle_option(s, end) ) + { + printk(XENLOG_WARNING + "cpufreq/amd-cppc: option '%.*s' not recognized\n", + (int)((end ?: e) - s), s); + + return -EINVAL; + } + + s =3D end ? end + 1 : NULL; + } while ( s && s < e ); + + return 0; +} + +static const struct cpufreq_driver __initconst_cf_clobber +amd_cppc_cpufreq_driver =3D +{ + .name =3D XEN_AMD_CPPC_DRIVER_NAME, +}; + +int __init amd_cppc_register_driver(void) +{ + if ( !cpu_has_cppc ) + { + xen_processor_pmbits &=3D ~XEN_PROCESSOR_PM_CPPC; + return -ENODEV; + } + + return cpufreq_register_driver(&amd_cppc_cpufreq_driver); +} diff --git a/xen/arch/x86/acpi/cpufreq/cpufreq.c b/xen/arch/x86/acpi/cpufre= q/cpufreq.c index 61e98b67bd..c40b610c86 100644 --- a/xen/arch/x86/acpi/cpufreq/cpufreq.c +++ b/xen/arch/x86/acpi/cpufreq/cpufreq.c @@ -148,6 +148,11 @@ static int __init cf_check cpufreq_driver_init(void) case CPUFREQ_none: ret =3D 0; break; + + default: + printk(XENLOG_WARNING + "Unsupported cpufreq driver for vendor Intel\n"= ); + break; } =20 if ( ret !=3D -ENODEV ) @@ -157,7 +162,63 @@ static int __init cf_check cpufreq_driver_init(void) =20 case X86_VENDOR_AMD: case X86_VENDOR_HYGON: - ret =3D IS_ENABLED(CONFIG_AMD) ? powernow_register_driver() : = -ENODEV; + unsigned int i; + + if ( !IS_ENABLED(CONFIG_AMD) ) + { + ret =3D -ENODEV; + break; + } + ret =3D -ENOENT; + + for ( i =3D 0; i < cpufreq_xen_cnt; i++ ) + { + switch ( cpufreq_xen_opts[i] ) + { + case CPUFREQ_xen: + ret =3D powernow_register_driver(); + break; + + case CPUFREQ_amd_cppc: + ret =3D amd_cppc_register_driver(); + break; + + case CPUFREQ_none: + ret =3D 0; + break; + + default: + printk(XENLOG_WARNING + "Unsupported cpufreq driver for vendor AMD or H= ygon\n"); + break; + } + + if ( ret !=3D -ENODEV ) + break; + } + + /* + * After cpufreq driver registeration, XEN_PROCESSOR_PM_CPPC + * and XEN_PROCESSOR_PM_PX shall become exclusive flags. + */ + if ( !ret && i < cpufreq_xen_cnt ) + { + switch ( cpufreq_xen_opts[i] ) + { + case CPUFREQ_amd_cppc: + xen_processor_pmbits &=3D ~XEN_PROCESSOR_PM_PX; + break; + + case CPUFREQ_xen: + xen_processor_pmbits &=3D ~XEN_PROCESSOR_PM_CPPC; + break; + + case CPUFREQ_none: + default: + break; + } + } + break; } } diff --git a/xen/arch/x86/platform_hypercall.c b/xen/arch/x86/platform_hype= rcall.c index 49717e9ca9..231912ed27 100644 --- a/xen/arch/x86/platform_hypercall.c +++ b/xen/arch/x86/platform_hypercall.c @@ -539,9 +539,12 @@ ret_t do_platform_op( case XEN_PM_PX: if ( !(xen_processor_pmbits & XEN_PROCESSOR_PM_PX) ) { - ret =3D -ENOSYS; + ret =3D 0; break; } + /* Xen doesn't support mixed mode */ + ASSERT(!(xen_processor_pmbits & XEN_PROCESSOR_PM_CPPC)); + ret =3D set_px_pminfo(op->u.set_pminfo.id, &op->u.set_pminfo.u= .perf); break; =20 @@ -573,6 +576,14 @@ ret_t do_platform_op( } =20 case XEN_PM_CPPC: + if ( !(xen_processor_pmbits & XEN_PROCESSOR_PM_CPPC) ) + { + ret =3D 0; + break; + } + /* Xen doesn't support mixed mode */ + ASSERT(!(xen_processor_pmbits & XEN_PROCESSOR_PM_PX)); + ret =3D set_cppc_pminfo(op->u.set_pminfo.id, &op->u.set_pminfo.u.cppc_data); break; diff --git a/xen/drivers/acpi/pmstat.c b/xen/drivers/acpi/pmstat.c index f7351f219d..330bc3a1c2 100644 --- a/xen/drivers/acpi/pmstat.c +++ b/xen/drivers/acpi/pmstat.c @@ -464,7 +464,8 @@ int do_pm_op(struct xen_sysctl_pm_op *op) switch ( op->cmd & PM_PARA_CATEGORY_MASK ) { case CPUFREQ_PARA: - if ( !(xen_processor_pmbits & XEN_PROCESSOR_PM_PX) ) + if ( !(xen_processor_pmbits & (XEN_PROCESSOR_PM_PX | + XEN_PROCESSOR_PM_CPPC)) ) return -ENODEV; if ( !pmpt || !(pmpt->init & (XEN_PX_INIT | XEN_CPPC_INIT)) ) return -EINVAL; diff --git a/xen/drivers/cpufreq/cpufreq.c b/xen/drivers/cpufreq/cpufreq.c index d1b51c8dd0..fe55720afd 100644 --- a/xen/drivers/cpufreq/cpufreq.c +++ b/xen/drivers/cpufreq/cpufreq.c @@ -65,14 +65,15 @@ LIST_HEAD_READ_MOSTLY(cpufreq_governor_list); /* set xen as default cpufreq */ enum cpufreq_controller cpufreq_controller =3D FREQCTL_xen; =20 -enum cpufreq_xen_opt __initdata cpufreq_xen_opts[2] =3D { CPUFREQ_xen, +enum cpufreq_xen_opt __initdata cpufreq_xen_opts[3] =3D { CPUFREQ_xen, CPUFREQ_none }; unsigned int __initdata cpufreq_xen_cnt =3D 1; =20 -static const char __initconst cpufreq_opts_str[][5] =3D { +static const char __initconst cpufreq_opts_str[][9] =3D { [CPUFREQ_none] =3D "none", [CPUFREQ_xen] =3D "xen", [CPUFREQ_hwp] =3D "hwp", + [CPUFREQ_amd_cppc] =3D "amd-cppc", }; =20 static int __init cpufreq_cmdline_parse(const char *s, const char *e); @@ -94,6 +95,8 @@ static int __init handle_cpufreq_cmdline(enum cpufreq_xen= _opt option) { int ret =3D 0; =20 + /* Do not occupy bits reserved for public xen-pm */ + BUILD_BUG_ON(MASK_INSR(XEN_PROCESSOR_PM_CPPC, SIF_PM_MASK)); if ( cpufreq_opts_contain(option) ) { printk(XENLOG_WARNING "Duplicate cpufreq driver option: %s\n", @@ -105,6 +108,10 @@ static int __init handle_cpufreq_cmdline(enum cpufreq_= xen_opt option) cpufreq_xen_opts[cpufreq_xen_cnt++] =3D option; switch ( option ) { + case CPUFREQ_amd_cppc: + xen_processor_pmbits |=3D XEN_PROCESSOR_PM_CPPC; + break; + case CPUFREQ_hwp: case CPUFREQ_xen: xen_processor_pmbits |=3D XEN_PROCESSOR_PM_PX; @@ -172,6 +179,13 @@ static int __init cf_check setup_cpufreq_option(const = char *str) if ( arg[0] && arg[1] ) ret =3D hwp_cmdline_parse(arg + 1, end); } + else if ( IS_ENABLED(CONFIG_AMD) && choice < 0 && + !cmdline_strcmp(str, "amd-cppc") ) + { + ret =3D handle_cpufreq_cmdline(CPUFREQ_amd_cppc); + if ( arg[0] && arg[1] ) + ret =3D amd_cppc_cmdline_parse(arg + 1, end); + } else ret =3D -EINVAL; =20 diff --git a/xen/include/acpi/cpufreq/cpufreq.h b/xen/include/acpi/cpufreq/= cpufreq.h index a3c84143af..83050c58b2 100644 --- a/xen/include/acpi/cpufreq/cpufreq.h +++ b/xen/include/acpi/cpufreq/cpufreq.h @@ -28,8 +28,9 @@ enum cpufreq_xen_opt { CPUFREQ_none, CPUFREQ_xen, CPUFREQ_hwp, + CPUFREQ_amd_cppc, }; -extern enum cpufreq_xen_opt cpufreq_xen_opts[2]; +extern enum cpufreq_xen_opt cpufreq_xen_opts[3]; extern unsigned int cpufreq_xen_cnt; struct cpufreq_governor; =20 @@ -277,4 +278,7 @@ int set_hwp_para(struct cpufreq_policy *policy, =20 int acpi_cpufreq_register(void); =20 +int amd_cppc_cmdline_parse(const char *s, const char *e); +int amd_cppc_register_driver(void); + #endif /* __XEN_CPUFREQ_PM_H__ */ diff --git a/xen/include/acpi/cpufreq/processor_perf.h b/xen/include/acpi/c= pufreq/processor_perf.h index f1f4f3138d..9b6466e705 100644 --- a/xen/include/acpi/cpufreq/processor_perf.h +++ b/xen/include/acpi/cpufreq/processor_perf.h @@ -5,6 +5,9 @@ #include #include =20 +/* Internal ability bits */ +#define XEN_PROCESSOR_PM_CPPC 0x100 + #define XEN_CPPC_INIT 0x40000000U #define XEN_PX_INIT 0x80000000U =20 diff --git a/xen/include/public/sysctl.h b/xen/include/public/sysctl.h index b0fec271d3..42997252ef 100644 --- a/xen/include/public/sysctl.h +++ b/xen/include/public/sysctl.h @@ -423,6 +423,7 @@ struct xen_set_cppc_para { uint32_t activity_window; }; =20 +#define XEN_AMD_CPPC_DRIVER_NAME "amd-cppc" #define XEN_HWP_DRIVER_NAME "hwp" =20 /* --=20 2.34.1 From nobody Fri Oct 31 11:29:11 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=amd.com); dmarc=pass(p=quarantine dis=none) header.from=amd.com ARC-Seal: i=2; a=rsa-sha256; t=1748335793; cv=pass; d=zohomail.com; s=zohoarc; b=Ew8Uf09SCW5OQwkh6YOiXKUFSwgF9PAWpWU2kknmszgAWygfzWTweBWB7eiDntCGNqTTllUdjl/82xfokBR0rVxwFyWKF9dtSWbgcyOB+er7X4dnwTfYOA56MbCTVY6se+wsM8K7tJgYNaF2paoLwkXb12U3D6+y3NXlSBHos8A= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1748335793; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=93mFFL37UWEreuoxsuCgjzGv/0KWiWMS2KGPmS4EzyY=; b=BlVEEZbaYKGr7qKAp01pyt84D44rY5IocoIjgmJQFoV516C/cmc6svr+xA0qgL/AZBB7qu+BMKN3DlP2uki5yKD4tbE1xvmHNyiSvfaKWJ+CAEFPbigt8NzZZ7dmKDlRMLalEaBkyEn7bkyx/PeKRnHnqhCczQndsB4SxXsEnOY= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=amd.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1748335793851476.441474964847; Tue, 27 May 2025 01:49:53 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.997948.1378793 (Exim 4.92) (envelope-from ) id 1uJq04-0004Tc-Aj; Tue, 27 May 2025 08:49:32 +0000 Received: by outflank-mailman (output) from mailman id 997948.1378793; Tue, 27 May 2025 08:49:32 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uJq04-0004TH-7A; Tue, 27 May 2025 08:49:32 +0000 Received: by outflank-mailman (input) for mailman id 997948; Tue, 27 May 2025 08:49:31 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uJq03-0002ks-Dk for xen-devel@lists.xenproject.org; Tue, 27 May 2025 08:49:31 +0000 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2062d.outbound.protection.outlook.com [2a01:111:f403:2415::62d]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 7d9f72c5-3ad7-11f0-b894-0df219b8e170; Tue, 27 May 2025 10:49:26 +0200 (CEST) Received: from MW4PR04CA0168.namprd04.prod.outlook.com (2603:10b6:303:85::23) by DS7PR12MB6240.namprd12.prod.outlook.com (2603:10b6:8:94::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.21; Tue, 27 May 2025 08:49:23 +0000 Received: from SJ5PEPF000001F6.namprd05.prod.outlook.com (2603:10b6:303:85:cafe::ad) by MW4PR04CA0168.outlook.office365.com (2603:10b6:303:85::23) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8769.19 via Frontend Transport; Tue, 27 May 2025 08:49:23 +0000 Received: from SATLEXMB04.amd.com (165.204.84.17) by SJ5PEPF000001F6.mail.protection.outlook.com (10.167.242.74) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8769.18 via Frontend Transport; Tue, 27 May 2025 08:49:23 +0000 Received: from penny-System-Product-Name.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Tue, 27 May 2025 03:49:21 -0500 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 7d9f72c5-3ad7-11f0-b894-0df219b8e170 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=HQJuWyfgUcSW5EWmCEOpawdrIcmRWaw44IlnMO/acLFqL150kFStkvIyrIMzLagvVUl10uLnpWIQTFn32ShuYOgQDyZAe33JfCuaxz6rTJQuxd7mZO8bBd9gauwWnz74HE/0OAxi1AmrVrX/yo2/nlFPorJvW4TyRc9PRFrdFRfgjvyYGkNYaAqjrBo0cgZjI7ujoL8iQV6+d5sroEzVjJflUcg/7E4Vdj8Viz8dKezQhoSn6eCP+Pee3QUiMSyzqBve/T6bPWOiRn1AwS6gMkg/q6eHPSwTOEFQwWMvcVIUslWxLEQtB6Qk0+M6ukGqhH5549EmgGrTTUnJ5mLf/Q== 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=93mFFL37UWEreuoxsuCgjzGv/0KWiWMS2KGPmS4EzyY=; b=Br9KoLFEX/Wf5n92tFkIsK9UPqaBogzFgYYaHT96hDnb5i6woXHdvZVDLsfla56rgqeXAI0ZprEIWC9LNXh7kDMvG3aBJLFSuULob0X4WHk4UjsBj/jjxHvygWA7HqhrUJUCdfPG2AUNqaI0TPZkoNVQ1BePu8sL0dkCNHwGMRxKz/pl2xinHdE7BYhPMZsAz61Vn9Ya2tKDeO6aCu+oieNWTrCLXPoxRjbGeUFnoRKaKcS8YpUSW6Ud6VVKW5oHNkbbxAp9kDfB1ZS4eJfRaQKhnXsD/pyi194CZEKTlYY9kCRIgGPirePllVxZlowNgX3c/KeeE/TB5y6IGysUwA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=93mFFL37UWEreuoxsuCgjzGv/0KWiWMS2KGPmS4EzyY=; b=050QCEvHZcvX3U+EgOE6nmGnxThJFlGVfEqI0DwP5X6VAxIbCXFIqNDMDa/wDklWbBxFvVVMWjy2ED9s0BT7eqnJj3nJDyLiHK8VXQwUIwQc4rkyVlNefblL5qrw82rZ5O21fOE4vFJXDp29ZhThugBSBs59VgwyhYyjeRY4d/s= X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C From: Penny Zheng To: CC: , Penny Zheng , Jan Beulich Subject: [PATCH v5 07/18] xen/cpufreq: disable px statistic info in amd-cppc mode Date: Tue, 27 May 2025 16:48:22 +0800 Message-ID: <20250527084833.338427-8-Penny.Zheng@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250527084833.338427-1-Penny.Zheng@amd.com> References: <20250527084833.338427-1-Penny.Zheng@amd.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ5PEPF000001F6:EE_|DS7PR12MB6240:EE_ X-MS-Office365-Filtering-Correlation-Id: 026dcc5b-e27c-48a9-f7df-08dd9cfb60d6 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|82310400026|1800799024|36860700013; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?1uChrA5QQCJsBrY/Lg1/t3Df+4WmQZA83uxtXmWRgue53CLw/eSRv91M6lPQ?= =?us-ascii?Q?dYJZ5/9f/B0gBKgMwfTHCWt5tfwSX8AwggW5Vdy4X1uWmwPXOeyZieYv3M7f?= =?us-ascii?Q?ZLvAsfBCihKyxIxpY6Sk090YKVJAlrMB0Lj34ib2RkupA3uBa2RB8Lw0bO4c?= =?us-ascii?Q?n5tKnp9WOgdoHzWfaN7mWh5dyuuif5Cx0V/xLBP9tFmixJgjIaQK++dt+x2s?= =?us-ascii?Q?DaquNh+yRvF5Zd1by5z4rbRAn8nWEqHU1rtTjjmr135ihmZLT6qi7axTlXkl?= =?us-ascii?Q?8aLZXTwnFtRYJQ1J9OEHZG2Cz24jjgeEVPGqatjdZHzCLbONY5eJcG7uqkTK?= =?us-ascii?Q?afEzSQEYtXFndVjP8+dEdhADxIHc4HBelYyLUUTiZOVcvDHjSriF0kuoMxuV?= =?us-ascii?Q?ysL6fzIrfyM3yoa5QPTkqcevBXR24EnCDCFJooQQdEx7prBJzFnJbH4jx/2p?= =?us-ascii?Q?YOiyDMKnU7a3DeUDAjMc8uEvOyq8SRg11ya18DL0R/xwyzLYJsTOeNY56b2Q?= =?us-ascii?Q?q+rlTrWV9xvCXD3i4T3dwaCfszX2v9TZe3UgnUjiR2lCG+0KDhGp/2qBtEt7?= =?us-ascii?Q?mucGAoTC95NLJDCW8AHKukUlqzoxnBt8rx91kfPyD/P/x89PL7Bz3w0iULos?= =?us-ascii?Q?MGn/LBaO5o3zPST0lah2KLhwc1WDU963+d6OTfMED/3T7/Y4AlKFnFiuF+cL?= =?us-ascii?Q?wnhllMEkNrSe5Hc0XsMQSNNHba5wkkLlPXE1POQt8+G3BiiZ0N0Z+YUGZOto?= =?us-ascii?Q?PYl1dw9GG97OYdGdjzE6gmB/Ag+RhLnPZhZFqTQhK661F+MAH48iuYfOvf51?= =?us-ascii?Q?LjzDILNzYQxwrZbp5mAibIL2IkbzigbNYnCdkNjcr8fAilu4AujYnqQt4s4h?= =?us-ascii?Q?ekGrlvjC3vBr0g6ETitfAbGRycTERhAXROkVuQQx1tmXhtzrfUa/A/JaoALe?= =?us-ascii?Q?alruiAZSnBNQ2A9fa7kl6VzAYg6amJTHzGvM/3GxhPqsSuSLDr3Q5lYe+DN3?= =?us-ascii?Q?NJnApaFMiagli234X8waQ6LUIXETsVN4z8YkwdcEQrlmfFKn1XoFZ+xYTMHn?= =?us-ascii?Q?ZvRGWG1zJEY5qLZ1gIPgpxOr/zqjRuhA9zGcFU2yze25J9FoMx5Nn1jtZF79?= =?us-ascii?Q?HRJws8nFBaRpZ5c4+UDC3NHzgJLWJXfPtQJjsUSTww67/E4y8iNH6xkU76ou?= =?us-ascii?Q?uEuz/p01EWnsEz7y4WZsUbMFw0VQiR9MTyGubctgBaKM1Ytq/aAvELlzWOAr?= =?us-ascii?Q?qKHAXzF9LW2rYyHp0IfsbvduKk+Ss/Ryh3QLCN04dieZzdPJrdYAWZTRM2fw?= =?us-ascii?Q?J7xCq0ivMf8W7XoyUzyMcGc2dLIK9uuQy5KaL9VBx+NUKqxMYMXYW38uawOF?= =?us-ascii?Q?/4QfTMNgwj9eE+kdOr7zPdx2wZS/nedSEKz89ITtfphM3G3903JSVZC+8Qil?= =?us-ascii?Q?/p/ERrhNGU5uzW2n36Q1JjXb9rNZzvsCN+vP2WEF8Hr93vADaeh8Rhohf+Yb?= =?us-ascii?Q?JQAwUi346cz4lcHHOdRtRHSM617HXGHb0oNa?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(376014)(82310400026)(1800799024)(36860700013);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 May 2025 08:49:23.0639 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 026dcc5b-e27c-48a9-f7df-08dd9cfb60d6 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: SJ5PEPF000001F6.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR12MB6240 X-ZohoMail-DKIM: pass (identity @amd.com) X-ZM-MESSAGEID: 1748335795211116600 Content-Type: text/plain; charset="utf-8" We want to bypass construction of px statistic info, while not bypassing cpufreq_statistic_lock initialization for a good reason, in cpufreq_statistic_init() for amd-cppc mode, as P-states is not necessary th= ere. Signed-off-by: Penny Zheng Acked-by: Jan Beulich --- v3 -> v4: - remove unnecessary stub for cpufreq_statistic_exit() --- v4 -> v5: - refactor commit message --- xen/drivers/cpufreq/utility.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/xen/drivers/cpufreq/utility.c b/xen/drivers/cpufreq/utility.c index e690a484f1..b35e2eb1b6 100644 --- a/xen/drivers/cpufreq/utility.c +++ b/xen/drivers/cpufreq/utility.c @@ -98,6 +98,9 @@ int cpufreq_statistic_init(unsigned int cpu) if ( !pmpt ) return -EINVAL; =20 + if ( !(pmpt->init & XEN_PX_INIT) ) + return 0; + spin_lock(cpufreq_statistic_lock); =20 pxpt =3D per_cpu(cpufreq_statistic_data, cpu); --=20 2.34.1 From nobody Fri Oct 31 11:29:11 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=amd.com); dmarc=pass(p=quarantine dis=none) header.from=amd.com ARC-Seal: i=2; a=rsa-sha256; t=1748335807; cv=pass; d=zohomail.com; s=zohoarc; b=k8/gQoP2R60K0K+vXIUhrVV+F20tiEZb+9xWEwDzM+Zs2EUvxGEgZuAadIN+1ixqqP6ngcJd8SCQyV+8VcJ5Wxm1/UreGCFZol9SfiOlZgjfj3DoLhr4hM3pK6rjdujGPWm/rBprJ6o0Mvau6Rg+XkKapqtVJPHLZvI2RDYry5w= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1748335807; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=SqussZlEDCnPtBb5mzZXqL0cjmGI/C8X5Nz/eBwRzwE=; b=Eqffofh/mXw2e9Zeag9iyMWh1qOVlxBczCvl4KxxeKGDJ6X3WBf+Qu5/z4e1kesHKi9fYZtthTG734yyEcD++w4hhLD48MdsBopq94UQhRGz9OhVSYjL4XNhULqv4+DB4rFdnN7zJr7ubZIksVT3CHPDh4sY53Eu6GYHGjoFOZg= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=amd.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1748335807706933.4337510683464; Tue, 27 May 2025 01:50:07 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.997950.1378804 (Exim 4.92) (envelope-from ) id 1uJq06-0004pR-Lc; Tue, 27 May 2025 08:49:34 +0000 Received: by outflank-mailman (output) from mailman id 997950.1378804; Tue, 27 May 2025 08:49:34 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uJq06-0004pA-HZ; Tue, 27 May 2025 08:49:34 +0000 Received: by outflank-mailman (input) for mailman id 997950; Tue, 27 May 2025 08:49:33 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uJq05-0002ks-IU for xen-devel@lists.xenproject.org; Tue, 27 May 2025 08:49:33 +0000 Received: from NAM02-SN1-obe.outbound.protection.outlook.com (mail-sn1nam02on20602.outbound.protection.outlook.com [2a01:111:f403:2406::602]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 7edf1484-3ad7-11f0-b894-0df219b8e170; Tue, 27 May 2025 10:49:27 +0200 (CEST) Received: from MW4PR04CA0111.namprd04.prod.outlook.com (2603:10b6:303:83::26) by SA5PPFF3CB57EDE.namprd12.prod.outlook.com (2603:10b6:80f:fc04::8eb) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8678.27; Tue, 27 May 2025 08:49:26 +0000 Received: from SJ5PEPF000001F2.namprd05.prod.outlook.com (2603:10b6:303:83:cafe::4a) by MW4PR04CA0111.outlook.office365.com (2603:10b6:303:83::26) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8746.30 via Frontend Transport; Tue, 27 May 2025 08:49:26 +0000 Received: from SATLEXMB04.amd.com (165.204.84.17) by SJ5PEPF000001F2.mail.protection.outlook.com (10.167.242.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8769.18 via Frontend Transport; Tue, 27 May 2025 08:49:25 +0000 Received: from penny-System-Product-Name.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Tue, 27 May 2025 03:49:23 -0500 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 7edf1484-3ad7-11f0-b894-0df219b8e170 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=GwoXOERUPPlwihA55ZpHz2ggry8FuEpPnVwi9HdvUVcGYEYfiBs1ZSKb2/LJjdclkjzt9Cqo8u651xvzbnrCwK4hCZKKN4z5QMIecv6VShEp3BOM2dkPVDtky5Mx6ivcroPgFqeg73qh0eqUx+k+aqdOASevopqp6Ta6+NeUT/KQtoOfukNo0cwPod9lUkw50O5bFaGUxpuR5gkAoHWpM83AEPcmj4IxoIdR0apvg9fmpe4Kggh+Uj/NgTFK4to5RabI9BWfbUmN7HcruIixbuou9tmT1uYDOfN8o4+8gS8fn3fkk8arUr4ytHzyVqkI2JeXsyPg/9yJ1kzldpDnYA== 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=SqussZlEDCnPtBb5mzZXqL0cjmGI/C8X5Nz/eBwRzwE=; b=qgr0J63srFFuB7XMSJySF5a4WNFEeSrNsDq6UL4n+7c6s2M5QBv6BYJ6dROVRMf+x+nErmnVMQ8ij2Ck3GeBvy0sCcbvCWLwRxst9YAvd+f44qKMDmg5aAxXoYOnMIc4n9gtew3akiNH24V6/G6LPV+p+l/iPhB961zVhhZ13eBz9Cr/OKXGp+NTTJIR+rx18FyG35ZPqq1lQ/wqbwRPUbGvCVJh1rKLIKwfRRD5/rPsDNZpikyv4QRiFFMR0g6r2x2Xl8Vap+LCanI1NuEsXe48Id7e8ymIpOkKeTEyTGNVEW4W30VCTZ8cZFIVPd20QH6o4/I4OO6YoJGtb8li9Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=SqussZlEDCnPtBb5mzZXqL0cjmGI/C8X5Nz/eBwRzwE=; b=P5mO4zhWgXhB7jTuBFJnf7C1djQ7zx1IgFJYl16cyY81XHZjBBJs78sbSboJvqRCRGxzOUQqoBdkBd06aaY+bE/21UelU39JrzuvwW7ODTXbFiHthNNt0rS5/kSuZPuRhIL29OK128KxceQJ35Eela4qQ6JdOGT7u7I8EaJ6N8s= X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C From: Penny Zheng To: CC: , Penny Zheng , Jan Beulich , Andrew Cooper , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH v5 08/18] xen/cpu: Expand core frequency calculation for AMD Family 1Ah CPUs Date: Tue, 27 May 2025 16:48:23 +0800 Message-ID: <20250527084833.338427-9-Penny.Zheng@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250527084833.338427-1-Penny.Zheng@amd.com> References: <20250527084833.338427-1-Penny.Zheng@amd.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ5PEPF000001F2:EE_|SA5PPFF3CB57EDE:EE_ X-MS-Office365-Filtering-Correlation-Id: c53ac519-4550-44db-00b0-08dd9cfb623e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|82310400026|36860700013|376014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?DX1FKoRp5aCZj7LmXYX31ELx7kEIWUadWj6/jNGNTvxijWJ5As9eM3Y7F4Xz?= =?us-ascii?Q?qDlyH/9niJKKJNJhQlx9aByzjOzUm0Nx40Ml86eoq4pA9YHmWEwtTg39OouM?= =?us-ascii?Q?iNR3Zg0YAv2EW7baQdVUHDTProdbnaRmuZbN00oxwiOFdq7fTE3PfgrHMLIK?= =?us-ascii?Q?5MESZN8un7kzyo3EmG4+/AMlWcXyCf9AJpg1bXLcp2lsXSn+ZvFAWo6xiupj?= =?us-ascii?Q?XI5eHRS2cpU3S95XKHyZ/sglYqAVvVaUrgKsXhJMpI1+8RU/x/m3UoCmNZKi?= =?us-ascii?Q?v5NSAzNL+Ah1IdWmNw065VdAcCGcKZcjv+feDtgUGRZOR2+gWWWtogDIzZYk?= =?us-ascii?Q?SwpbtXJK5php8mkjQS252nsuuABE1863nMd9AXrsEJTQlmi+j0+YZA2Q1o86?= =?us-ascii?Q?YqA8JQ7GTTSirs0oPYUh2yk4tnSkk9oN+G1JdVA7SPzBXGV7FUyg6Iu+oa54?= =?us-ascii?Q?DzSU0ulqbAQvliXiNcU7YNbhvm+eefu55LsJwcNtf4ptRpAKPlMrRBkyCqPm?= =?us-ascii?Q?r2GkOiNWSsU9JO0BfaWdP1Nu7RotboVZd0izUSXhT+QELEzZe0etBZ+UjEce?= =?us-ascii?Q?XdJlJqdCLtyWN3r5xQPSiT+NTPNJ9/Fl6zpEgy/EDCwDyS0D3G3YIWAxCcfb?= =?us-ascii?Q?/qkYCvOaxjdqYopXUxEU7q08w4ABOMGqEv2RP6wkO8+jVlqdow2JyE/9HC0e?= =?us-ascii?Q?ENYTgZSUE/aUDbh3ydHUulYKxa9BUGt/36Edb8v+1raUKpQXGWnmaE0dSqf6?= =?us-ascii?Q?KnLwiffw2B2v3l79DlUqBcYSRBMdvlJnQNrjEAl+diQd2MLRBm4AIL94SAPe?= =?us-ascii?Q?5X3Zx4NkWX/rTMJTHIOoykbs8I5UPh3MlTXkbMrLQzVKiHBOo7ZxQwC2oshh?= =?us-ascii?Q?NvBuie8CliewznvvUSke5tFPXYwA4ZAeEPy29Q3BhJDrL1FjHPw6D7VUNs9f?= =?us-ascii?Q?XEcWOpRDh8G9VVt4c286anA9hc3+78LgCrfp6IvLrI+skIyAzINbMg19caDk?= =?us-ascii?Q?UWos78+HmOv0wp14J8t0qK+BGJ6nxuBfkE/qVEALAabFx74ygioPZoBX67IO?= =?us-ascii?Q?W2rc2RpDr9LqTGAFNIRM7FVix/S2pu2G/dCYuNJoOP/5cme67xySTY6RWIzj?= =?us-ascii?Q?rj1GQjPiZyjKHiKdkzCNaLTICUW8xOwssM25YJulNEqUGXUzOjgb7aswoqKD?= =?us-ascii?Q?FKqjm2DANsBUv+/wUYrDRcMbKtlTpphadLVGsXvtylVgE0s58xM7cNv6ST5Q?= =?us-ascii?Q?Yx6qrLJbKVhShgIRswsHM2H4wS3wzlcpzZaL4ZO9sD+OSWXie2nmHtXaDnac?= =?us-ascii?Q?nbCANK0xpqRpPfRMAeSnqj1u8k6BXGAhRov+F8SE5hYDn/P7R/Vf7goqvDHb?= =?us-ascii?Q?SwSuXPe/qFQmPUWSy19ruI1XQGc/LNCGvcXbVs7qNfJeqPlUL43UNAUzyEBc?= =?us-ascii?Q?oy48+bSLIBiq7Z5e/BLUR5+g6F8TbQ+oAtYi8KjVPVpzGK4kh7TtU28w/Ic1?= =?us-ascii?Q?j6nQUg2rWlYoN7L1tTHPO19GTZ+5FHcoOkz3?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(1800799024)(82310400026)(36860700013)(376014);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 May 2025 08:49:25.4165 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c53ac519-4550-44db-00b0-08dd9cfb623e X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: SJ5PEPF000001F2.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA5PPFF3CB57EDE X-ZohoMail-DKIM: pass (identity @amd.com) X-ZM-MESSAGEID: 1748335809472116600 Content-Type: text/plain; charset="utf-8" AMD Family 1Ah CPU needs a different COF(Core Operating Frequency) formula, due to a change in the PStateDef MSR layout in AMD Family 1Ah. In AMD Family 1Ah, Core current operating frequency in MHz is calculated as follows: CoreCOF =3D Core::X86::Msr::PStateDef[CpuFid[11:0]] * 5MHz We introduce a helper amd_parse_freq() to parse COF(Core Operating Frequenc= y) from PstateDef register, to replace the original macro FREQ(v). amd_parse_freq() is declared as const, as it mainly consists of mathematical conputation. Signed-off-by: Penny Zheng Reviewed-by: Jan Beulich --- v2 -> v3: - new commit --- v3 -> v4: - introduce amd_parse_freq() and declare it as const - express if-else-arry() as switch() --- v4 -> v5: - change title from "fix xxx" to "expand xxx" - change function parameter type and return type to "unsigned int" - blank lines between non-fall-through case blocks --- xen/arch/x86/cpu/amd.c | 49 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 40 insertions(+), 9 deletions(-) diff --git a/xen/arch/x86/cpu/amd.c b/xen/arch/x86/cpu/amd.c index 37d67dd15c..3770d75150 100644 --- a/xen/arch/x86/cpu/amd.c +++ b/xen/arch/x86/cpu/amd.c @@ -583,12 +583,40 @@ static void amd_get_topology(struct cpuinfo_x86 *c) : c->cpu_core_id= ); } =20 +static unsigned int attr_const amd_parse_freq(unsigned int family, + unsigned int value) +{ + unsigned int freq =3D 0; + + switch (family) { + case 0x10 ... 0x16: + freq =3D (((value & 0x3f) + 0x10) * 100) >> ((value >> 6) & 7); + break; + + case 0x17 ... 0x19: + freq =3D ((value & 0xff) * 25 * 8) / ((value >> 8) & 0x3f); + break; + + case 0x1A: + freq =3D (value & 0xfff) * 5; + break; + + default: + printk(XENLOG_ERR + "Unsupported cpu family 0x%x on cpufreq parsing", + family); + break; + } + + return freq; +} + void amd_log_freq(const struct cpuinfo_x86 *c) { unsigned int idx =3D 0, h; uint64_t hi, lo, val; =20 - if (c->x86 < 0x10 || c->x86 > 0x19 || + if (c->x86 < 0x10 || c->x86 > 0x1A || (c !=3D &boot_cpu_data && (!opt_cpu_info || (c->apicid & (c->x86_num_siblings - 1))))) return; @@ -669,19 +697,22 @@ void amd_log_freq(const struct cpuinfo_x86 *c) if (!(lo >> 63)) return; =20 -#define FREQ(v) (c->x86 < 0x17 ? ((((v) & 0x3f) + 0x10) * 100) >> (((v) >>= 6) & 7) \ - : (((v) & 0xff) * 25 * 8) / (((v) >> 8) & 0x3f)) if (idx && idx < h && !rdmsr_safe(0xC0010064 + idx, val) && (val >> 63) && !rdmsr_safe(0xC0010064, hi) && (hi >> 63)) - printk("CPU%u: %lu (%lu ... %lu) MHz\n", - smp_processor_id(), FREQ(val), FREQ(lo), FREQ(hi)); + printk("CPU%u: %u (%u ... %u) MHz\n", + smp_processor_id(), + amd_parse_freq(c->x86, val), + amd_parse_freq(c->x86, lo), + amd_parse_freq(c->x86, hi)); else if (h && !rdmsr_safe(0xC0010064, hi) && (hi >> 63)) - printk("CPU%u: %lu ... %lu MHz\n", - smp_processor_id(), FREQ(lo), FREQ(hi)); + printk("CPU%u: %u ... %u MHz\n", + smp_processor_id(), + amd_parse_freq(c->x86, lo), + amd_parse_freq(c->x86, hi)); else - printk("CPU%u: %lu MHz\n", smp_processor_id(), FREQ(lo)); -#undef FREQ + printk("CPU%u: %u MHz\n", smp_processor_id(), + amd_parse_freq(c->x86, lo)); } =20 void cf_check early_init_amd(struct cpuinfo_x86 *c) --=20 2.34.1 From nobody Fri Oct 31 11:29:11 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=amd.com); dmarc=pass(p=quarantine dis=none) header.from=amd.com ARC-Seal: i=2; a=rsa-sha256; t=1748335798; cv=pass; d=zohomail.com; s=zohoarc; b=bXW/jhKsl1hn0uByDh/tixvo2pbgUPtTJY3maiSnxdO7AhoYbWRK6kX79NEbU1w8tbpZGiCZFrXkyzLdW/sXUcAIHztMnIjbAIdp3qYP/x2aVaQuEj6Ft4Io2b4jUQqxc25pnV4jm91vMo+JTY9Yo2tF1rMhBKja5HGJV9aBphc= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1748335798; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=6BWhhOPQucu2ODRuY7WWAlw1Er6mBiipSyVknf/cvyA=; b=agNjr8q46UcYu5C0F4gGRFCKw3XllrL6YCiEDBY45+p+7H2Ngd9qHnYmUMQfoM6j+nOLI35BItrkXs4JQoa6CXdggQSbvxEKlVsxeNcPw3YgGT/Xd1MnZG34qef8prKjRsjBX+aliHfaShgsUxgO3FBekq7HxqoC2IZv23qfGjU= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=amd.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1748335798274426.84111225027914; Tue, 27 May 2025 01:49:58 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.997952.1378814 (Exim 4.92) (envelope-from ) id 1uJq08-0005Ae-UU; Tue, 27 May 2025 08:49:36 +0000 Received: by outflank-mailman (output) from mailman id 997952.1378814; Tue, 27 May 2025 08:49:36 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uJq08-0005AU-R0; Tue, 27 May 2025 08:49:36 +0000 Received: by outflank-mailman (input) for mailman id 997952; Tue, 27 May 2025 08:49:35 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uJq06-00031E-S4 for xen-devel@lists.xenproject.org; Tue, 27 May 2025 08:49:34 +0000 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on20608.outbound.protection.outlook.com [2a01:111:f403:2412::608]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 822d7d1a-3ad7-11f0-a2fd-13f23c93f187; Tue, 27 May 2025 10:49:34 +0200 (CEST) Received: from MW4PR04CA0118.namprd04.prod.outlook.com (2603:10b6:303:83::33) by PH7PR12MB9076.namprd12.prod.outlook.com (2603:10b6:510:2f6::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.21; Tue, 27 May 2025 08:49:27 +0000 Received: from SJ5PEPF000001F2.namprd05.prod.outlook.com (2603:10b6:303:83:cafe::e9) by MW4PR04CA0118.outlook.office365.com (2603:10b6:303:83::33) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8746.30 via Frontend Transport; Tue, 27 May 2025 08:49:27 +0000 Received: from SATLEXMB04.amd.com (165.204.84.17) by SJ5PEPF000001F2.mail.protection.outlook.com (10.167.242.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8769.18 via Frontend Transport; Tue, 27 May 2025 08:49:27 +0000 Received: from penny-System-Product-Name.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Tue, 27 May 2025 03:49:25 -0500 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 822d7d1a-3ad7-11f0-a2fd-13f23c93f187 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=urRXYl3tw+ppii7D9eVrfmRZztVCoCRuR58fL01kMrhYX8IC2XJwXG6c+sQtPlQd0RgKshAnzgwrceT6orvWs+zt6f0rZEwqZMEkNDDidf31wwL7VlZgjQnOwZjxKawbMEGFPOrL/p0aqUHhZEhIWsfrOqvne6502GCF/lonJzVOoidRF8y078ijc784Ymn/Wb5wnoZLNzUf5xQWDcALcmv/lX2Qx3noqf87b6meo6t5PboBiBgW8fy1saFN+gftiKKny0RZ6Luk7pfgGKNrFP24Hit6qB+kM88W6ULZzWuq9tvVdnFwp3zEq7tGIMYrjyVI7GkDlQ5xzLrKCPy65Q== 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=6BWhhOPQucu2ODRuY7WWAlw1Er6mBiipSyVknf/cvyA=; b=KZRMFERKW1dPcfjzPLA8RYdB7mEZQ3Fa3Jer5FmWIWbeEsEih1Q9/NWbwley/De0QPrBoqWDUPHOdRNd5GzTm6ahLZPiaTxhdi+wJF/x2yHxzcWZhqlNFY/HIHGDYCF6tzGg9gMuX/VEJc2x8lgIL6X/LKK8TeVHRwoOpkIM4A4m3bW7oFXf2BaR1ui7eIei+dkWayvZRojr4Em19rjzGl9FrlfxYzZLCq2j6UNck5fwlrjfUI+d98kT9POixFp9K8Q7ulKDjC7teOJPpRv1nCZMWdSRzHe+yWrwx1ktcFRoTSksy2hYBU2dJBLs0o7T56EZm2EvJr8cgzB3jhl26w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6BWhhOPQucu2ODRuY7WWAlw1Er6mBiipSyVknf/cvyA=; b=m5lDl64Mm0RXJXvvX2cbaqx1+3gAQBxQUJjHgxE6fWR1ypsOlIb8fEUkL9htK8tlPRTBisCwsY4lmQX1byoWuUv4zeHw4hQKr2aOQf+NxC8r46ev4mEooMcr4mhBDYRZVxcb+gfOueNaplmwTjjIjT9/6Nd29a3twsDkI8gtjbw= X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C From: Penny Zheng To: CC: , Penny Zheng , Jan Beulich , Andrew Cooper , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH v5 09/18] xen/amd: introduce amd_process_freq() to get processor frequency Date: Tue, 27 May 2025 16:48:24 +0800 Message-ID: <20250527084833.338427-10-Penny.Zheng@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250527084833.338427-1-Penny.Zheng@amd.com> References: <20250527084833.338427-1-Penny.Zheng@amd.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ5PEPF000001F2:EE_|PH7PR12MB9076:EE_ X-MS-Office365-Filtering-Correlation-Id: 3092af6a-75ee-4d88-0e99-08dd9cfb6336 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|1800799024|36860700013|376014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?hAikFCHUKY9Vdc34o/wCC1vQHcedoivFVBHtZwrSkfoD6SzUfizKv14SIfKY?= =?us-ascii?Q?n3s0D+3O6SDwvA7VqJ1J62qQ0zqdpri6oR0Zylwy3hCP7o7Bl7xhMroa3GB/?= =?us-ascii?Q?4xAA3tDUq/uX0STEvtFKHITVR5Aon9JMPqFR8pn9hRzcmmkEf7Uwgmdu0264?= =?us-ascii?Q?bbLWdtJlRQsZsJMb7mSDh8Wq3G4ueZDmvfbQy2ctqK5RUFDgh3tXSRjfKYLI?= =?us-ascii?Q?3+V3NUCfbsk4SI59ykXrslF+oUnJFP3YlHoi1dPkbrzcSdkZwVckBXex1tYT?= =?us-ascii?Q?9MmMt77ipAsAA/CCCPlTfBQTfAJRah4lVUE72qMvN9j/fPEwM59zzsXRGW+H?= =?us-ascii?Q?+nBZY+C0Ab7RwdwjLMP2GEUF/AtLwdOsNqpFk6x+AK520G9mww9V+0fWX4pD?= =?us-ascii?Q?XuR8aDQZQ610cVv0onuNmZMH/TjIj+roig7pFKKSIgFmAxG2wDJlut37+9Rz?= =?us-ascii?Q?ik+IDAJClwNKEo6sWETdqcDNeE5tCaQ++VJmttKDi5ggvFoLx3RF+uK0HOF0?= =?us-ascii?Q?hj2gZs8JITOlBRKF6I3qZvOzdWQxfuVoDWAFIAwXszHvW2+lTMh6EpM/9bHT?= =?us-ascii?Q?CWGbfKFnVej5sBt979PO1dGrMRQEaPDQ2Ucicygl7r+n/8zL4hxLu4DtVmqU?= =?us-ascii?Q?ya9z+9kWEuPJahRH/c6q069x2m56njVsuQmpei0A+mY96YEedFgn/yEOAEZl?= =?us-ascii?Q?f1rSqmK6b7pJuvXFNJpO56La/FBBVtD62w/ZALCNppzvU/h6TYUwR2tmgLCl?= =?us-ascii?Q?jxFtbyrPtR4V4/Gw65AqqRC2IkacqQ/ZzozPI4nsejbAbqxQyXLAUMGZKceM?= =?us-ascii?Q?KVWiLuwUidxuTMzVsOegFNWFncS4GbHMobzyExfvE7WtCq3ZBR1uvpvPZ4In?= =?us-ascii?Q?dA00OO2Pd89l0KpMNbcJFZOVrTXgBoN42owe0aezo+YBYOIRsiAuyfWir9Mq?= =?us-ascii?Q?voFPWWyLDm/XmoMCedG4pk7+fUmvdZIJVEI5KKTEJIORLZctHhRoZeR3BfWZ?= =?us-ascii?Q?5jMWSQ9imDPQSUwAQTNqo3+dMb58AWr2wjZH+GR1WyenY5XH+gPgxvOUByo6?= =?us-ascii?Q?YhtPJDW8rWajPR/t9yfde7G7kcfFAO5FIhCpkDgcxsO5aPNdN0mS5kR3fS4d?= =?us-ascii?Q?mNHj5RJnSJaF8dHZ9uH3XXPhzmaFV69NsOkgnTaJmmZy3ZYK1AIxJG3UKWOP?= =?us-ascii?Q?ryHryK+vtKYYS0qX8y0a8KKOo7gwhG0YHHL0YdPv/XTc/xJXF+t4AavokwwN?= =?us-ascii?Q?uCoZRWLbbH8nT45NZDNNNM/C275dM1vzwcMANnmUIq0IYxgxxGMMo6nqUlAp?= =?us-ascii?Q?HNR5QOcrNKs+YOCft4uPufciNtHSGGTw+hInaV+2toOgODiZuR0moWE/xtp3?= =?us-ascii?Q?uG/nFsrMBNALWCaT4TZfrABJ4IrclMlWaRU133Ra0lgule7jOOS0Ceufqz4V?= =?us-ascii?Q?fkI6fSy3HPqWwq03B7WxP1dBiSl3IkA14jGxEz1QAI5XQmmML/arXaGNi+Gv?= =?us-ascii?Q?+2imevSLrtwQAAyEDQgTk2QY4/zp8r7I2O3N?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(82310400026)(1800799024)(36860700013)(376014);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 May 2025 08:49:27.0416 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 3092af6a-75ee-4d88-0e99-08dd9cfb6336 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: SJ5PEPF000001F2.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB9076 X-ZohoMail-DKIM: pass (identity @amd.com) X-ZM-MESSAGEID: 1748335801354116600 Content-Type: text/plain; charset="utf-8" When _CPC table could not provide processor frequency range values for Xen governor, we need to read processor max frequency as anchor point. So we extract amd cpu core frequency calculation logic from amd_log_freq(), and wrap it as a new helper amd_process_freq(). Signed-off-by: Penny Zheng Reviewed-by: Jan Beulich --- v1 -> v2: - new commit --- v3 -> v4 - introduce amd_process_freq() --- v4 -> v5: - make amd_process_freq() static to statisfy Misra demand - change "low_mhz", "nom_mhz" and "hi_mhz" parameter to unsigned int - fix order of logged frequencies --- xen/arch/x86/cpu/amd.c | 58 +++++++++++++++++++++++++++++------------- 1 file changed, 40 insertions(+), 18 deletions(-) diff --git a/xen/arch/x86/cpu/amd.c b/xen/arch/x86/cpu/amd.c index 3770d75150..8c985466fa 100644 --- a/xen/arch/x86/cpu/amd.c +++ b/xen/arch/x86/cpu/amd.c @@ -611,14 +611,15 @@ static unsigned int attr_const amd_parse_freq(unsigne= d int family, return freq; } =20 -void amd_log_freq(const struct cpuinfo_x86 *c) +static void amd_process_freq(const struct cpuinfo_x86 *c, + unsigned int *low_mhz, + unsigned int *nom_mhz, + unsigned int *hi_mhz) { unsigned int idx =3D 0, h; uint64_t hi, lo, val; =20 - if (c->x86 < 0x10 || c->x86 > 0x1A || - (c !=3D &boot_cpu_data && - (!opt_cpu_info || (c->apicid & (c->x86_num_siblings - 1))))) + if (c->x86 < 0x10 || c->x86 > 0x1A) return; =20 if (c->x86 < 0x17) { @@ -699,20 +700,20 @@ void amd_log_freq(const struct cpuinfo_x86 *c) =20 if (idx && idx < h && !rdmsr_safe(0xC0010064 + idx, val) && (val >> 63) && - !rdmsr_safe(0xC0010064, hi) && (hi >> 63)) - printk("CPU%u: %u (%u ... %u) MHz\n", - smp_processor_id(), - amd_parse_freq(c->x86, val), - amd_parse_freq(c->x86, lo), - amd_parse_freq(c->x86, hi)); - else if (h && !rdmsr_safe(0xC0010064, hi) && (hi >> 63)) - printk("CPU%u: %u ... %u MHz\n", - smp_processor_id(), - amd_parse_freq(c->x86, lo), - amd_parse_freq(c->x86, hi)); - else - printk("CPU%u: %u MHz\n", smp_processor_id(), - amd_parse_freq(c->x86, lo)); + !rdmsr_safe(0xC0010064, hi) && (hi >> 63)) { + if (nom_mhz) + *nom_mhz =3D amd_parse_freq(c->x86, val); + if (low_mhz) + *low_mhz =3D amd_parse_freq(c->x86, lo); + if (hi_mhz) + *hi_mhz =3D amd_parse_freq(c->x86, hi); + } else if (h && !rdmsr_safe(0xC0010064, hi) && (hi >> 63)) { + if (low_mhz) + *low_mhz =3D amd_parse_freq(c->x86, lo); + if (hi_mhz) + *hi_mhz =3D amd_parse_freq(c->x86, hi); + } else if (low_mhz) + *low_mhz =3D amd_parse_freq(c->x86, lo); } =20 void cf_check early_init_amd(struct cpuinfo_x86 *c) @@ -723,6 +724,27 @@ void cf_check early_init_amd(struct cpuinfo_x86 *c) ctxt_switch_levelling(NULL); } =20 +void amd_log_freq(const struct cpuinfo_x86 *c) +{ + unsigned int low_mhz =3D 0, nom_mhz =3D 0, hi_mhz =3D 0; + + if (c !=3D &boot_cpu_data && + (!opt_cpu_info || (c->apicid & (c->x86_num_siblings - 1)))) + return; + + amd_process_freq(c, &low_mhz, &nom_mhz, &hi_mhz); + + if (!low_mhz && !nom_mhz && !hi_mhz) + printk("CPU%u: %u (%u ... %u) MHz\n", + smp_processor_id(), + nom_mhz, low_mhz, hi_mhz); + else if (!low_mhz && !hi_mhz) + printk("CPU%u: %u ... %u MHz\n", + smp_processor_id(), low_mhz, hi_mhz); + else if (!low_mhz) + printk("CPU%u: %u MHz\n", smp_processor_id(), low_mhz); +} + void amd_init_lfence(struct cpuinfo_x86 *c) { uint64_t value; --=20 2.34.1 From nobody Fri Oct 31 11:29:11 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=amd.com); dmarc=pass(p=quarantine dis=none) header.from=amd.com ARC-Seal: i=2; a=rsa-sha256; t=1748335799; cv=pass; d=zohomail.com; s=zohoarc; b=SNNefIGBDf0+cN+C9nveBbx9z1F11IAB2AvnGG98G6a10/f3U6dOy06jJG1Nwa5KQxW23oZ3BnErIpxmq4LUG6O+pTgyQe4kwmRp2tZZIVMsB54coFo2HRcF6uZ8dLh2pII7Ngqz3FJsOyw/meH9BCd8O01eSxCN1mmPnlET7iY= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1748335799; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=ok2GRvrOFV+vUIk3LP8uwsuOY7g8Xv1FP+QzlfgdZtc=; b=JAEVPCuzxtztbWS0MUsNrmNY8RgYL9xd1xTDj7C9NFxTImHsC1vUmxTgl8qPTAWRhbpBX1Lnvzl8RquRN9sjW4A5QJFvFGQu0P8EgzopJxVkepTYT8u3x1ZLoz21Do0B2ebTi1Q41xqdsaHTFqlIiudovHQo/6ge7TNFbTXpcqE= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=amd.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1748335799890538.7051889506035; Tue, 27 May 2025 01:49:59 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.997956.1378824 (Exim 4.92) (envelope-from ) id 1uJq0B-0005Wj-Hq; Tue, 27 May 2025 08:49:39 +0000 Received: by outflank-mailman (output) from mailman id 997956.1378824; Tue, 27 May 2025 08:49:39 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uJq0B-0005WL-B0; Tue, 27 May 2025 08:49:39 +0000 Received: by outflank-mailman (input) for mailman id 997956; Tue, 27 May 2025 08:49:38 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uJq0A-00031E-G9 for xen-devel@lists.xenproject.org; Tue, 27 May 2025 08:49:38 +0000 Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on20626.outbound.protection.outlook.com [2a01:111:f403:200a::626]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 84d79d29-3ad7-11f0-a2fd-13f23c93f187; Tue, 27 May 2025 10:49:37 +0200 (CEST) Received: from BYAPR01CA0049.prod.exchangelabs.com (2603:10b6:a03:94::26) by DS0PR12MB9447.namprd12.prod.outlook.com (2603:10b6:8:1b4::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.26; Tue, 27 May 2025 08:49:30 +0000 Received: from SJ5PEPF000001F7.namprd05.prod.outlook.com (2603:10b6:a03:94:cafe::9d) by BYAPR01CA0049.outlook.office365.com (2603:10b6:a03:94::26) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8769.18 via Frontend Transport; Tue, 27 May 2025 08:49:41 +0000 Received: from SATLEXMB04.amd.com (165.204.84.17) by SJ5PEPF000001F7.mail.protection.outlook.com (10.167.242.75) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8769.18 via Frontend Transport; Tue, 27 May 2025 08:49:29 +0000 Received: from penny-System-Product-Name.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Tue, 27 May 2025 03:49:26 -0500 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 84d79d29-3ad7-11f0-a2fd-13f23c93f187 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ML3pp4+qWYfy++A+Xm0dOw62UoeZ7ZfJHn/PjWAJjUGK0zRMBy5tENHumA77BlRLZGhv97Uhn2Qgis02zgay9ub1T3SOAV7iWBzEzRrhPNcQ15FLbFBZXE5ZE92Qh73vcuuT0iec4KjCKTxR5yO02Dcp2C6tinwDTQXVIhcZz0hUzS7VuF9Hxz4VL17avKO6Ogt6rpuE48ixap0eAWSZF4GdfvKXYhOsBVteZq3sEITeythCvXACyrSH8+S8QG8qauLWBVFHv/KshshKmtYa/dc2YfmL+YPPxMOyyXlv8ycDHMeqUTfETuTGBxgTJqJXByaIgsmv+YTckxn5qs6juA== 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=ok2GRvrOFV+vUIk3LP8uwsuOY7g8Xv1FP+QzlfgdZtc=; b=vkeSpLsCtf/e0UN4b/WyTzKWEzjOucFUe7gLsIxor9BOK7yN+mJTM9TSui9ZDLjPnhWWHEzdEmANo8r86sfbAKRVBH9L+0mDosnUdHNxXMDTBQ/v+3ltc9zkKLLa3s9pKZugS+E4K+T33zY7/h2Sa31pDukyCjLvLMGVwfkvy8Qu5cA+fmsju2TXGz7Gy99A4pge7YquHFlUCv6l7Qfthoc1W74rKyj+qkrnDc1UrejffiRDlWaVOlKZCvzhTcesM7zmUXe2adZozwGMJZRpYnl54NLsHViAo0S0u84rJV9pSu96NwEZREMajxmqLMliw/maXPTrWZu8vaujHamI0g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ok2GRvrOFV+vUIk3LP8uwsuOY7g8Xv1FP+QzlfgdZtc=; b=dYpZTQbMinkpSVBp9LWL4eZCuEHU7Bab5wrS1fGnYG4zU4rnIyjegmYkT01XG3fpDmn0iabpviK+cpBLM6mFtaLHrBwGktmj+6P6MYNzIe/tglpTfFwARHMFC7C+MkkWiw2nr68CU4XVEvt5ujuYfskJkpGzG+3juSckEnO5fFQ= X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C From: Penny Zheng To: CC: , Penny Zheng , Jan Beulich , Andrew Cooper , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH v5 10/18] xen/cpufreq: introduce a new amd cppc driver for cpufreq scaling Date: Tue, 27 May 2025 16:48:25 +0800 Message-ID: <20250527084833.338427-11-Penny.Zheng@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250527084833.338427-1-Penny.Zheng@amd.com> References: <20250527084833.338427-1-Penny.Zheng@amd.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ5PEPF000001F7:EE_|DS0PR12MB9447:EE_ X-MS-Office365-Filtering-Correlation-Id: 3a3dfeaa-d45d-4af4-3e34-08dd9cfb6496 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|376014|82310400026|1800799024; X-Microsoft-Antispam-Message-Info: =?utf-8?B?cHdsZEs5QzlFUGN3TU9BWlJIb0MxYWhHQ2VIaUc5b0FSWGFud1ZxcWIvTDFC?= =?utf-8?B?bmxkdUhaNWFZa0JnWUk0Sm1aUEw3eld0TlpvWmtVdkJ5NHJVT090cFhpZEZ2?= =?utf-8?B?cXVVeWx6NmsyWno1dnRqYnFVbGVwbDZMdTVTVDFTYTVNU2wwV0FhVmsra0tx?= =?utf-8?B?T2s5eTR4QzBnbTlFemFYNFNBd3RwN3hQSW1KNUZTUUJKK1BwSzF5ZEFjckdx?= =?utf-8?B?bFFDeE1BN0dBNDlxeGdZclNDK0xXL1luVzFuVzQ0Q3M3bnFYdUIxcExrZWkv?= =?utf-8?B?QU9CYTdjZU5HUHB4NThVUSt1MisyZzRxa29YQ2txd3JqTnZsbWZMYTdEbGFn?= =?utf-8?B?S3J3aFpvRERVVHJ0cGRXeHZaR1NhRUY3UkdudjNEUUZCL3N5R0E4U1ZxRS9F?= =?utf-8?B?MU5UR1ZlTlE2UndZNk5xSEpwcDVycVh0RC9vazU3WUhYUEhRNUZHUEUwa0Y2?= =?utf-8?B?UTM1b20wdGovWUNnbTJpb2ozcVdkbkRYQy9GNTJ5UXlyWXU3Zk1kY3ZBSnRF?= =?utf-8?B?ZURPbVhSTGpuYlpzaUttc0ZENjZMeWdKaWRkM2hyREtUOURlcEl2T3dHR3Rq?= =?utf-8?B?ZWhlUHk4NnhRTGRCd1dNUkdmSE5rQ2kzcWQ2dEJsdVRReWY5Q2k3Sjh3MzNz?= =?utf-8?B?WHlKZVQvdlNNQ2RDdWRXb1pKbHVHd1hBWXM3ZlZDUVhsRjZ2ODVIMzFDZmpx?= =?utf-8?B?enAvcjFhaW5PbkZJd0JqYWN1akQvVDRRQ3FDMVBDU3dFem5RcTFTakZuV2c5?= =?utf-8?B?K2ppb2dRZk05RHU3eWIxbEJoYkIxMUs5UzdKMlNMNzZUSzhJQUk4MGVBZXBa?= =?utf-8?B?Y0ljUjBBcGYvM1l1aGJvVHRCdTFGM3R6NGpScXBRWGJOQ1lJUlZBSExFMGph?= =?utf-8?B?bDFFbjBKYVk4bHN5anh5b1B2cGIrdm9jUEN4TFhrb0Y4Q25SYWNXSkFBY0dS?= =?utf-8?B?RytuV01Xc0NycFVMWVhxVk5qTzg4NnR5TCs4a3l4c1pmS3JrZnJVUkNNaGlM?= =?utf-8?B?U3BMdUJVMVN5bWJ2YXVIUVhGOVluVWQxNjY1Qk15RmFQRFJReDFrTGlQUVIr?= =?utf-8?B?ZUEydkpnM25vRS9rMzhjdFpxU1EyNm5OWU1Bb09HRDc4NzVYR09FLzVMTGl1?= =?utf-8?B?ZERpR3JZU2NlaURFR3hqeFpWWGUxdndjUjQyS1R5cnpqaHg4QlowMTY2UDAy?= =?utf-8?B?ZG9IeVMvS21CaHFjbFMvYnZrZlRnVkp1b09xSFBDSDBCYXZuMjVlZFYxKzMy?= =?utf-8?B?N1BMak1Ub05kc0tRVjRadHhLR2NId1JMVS9rZU1uZDBYeTErKzE0RUNrVFVs?= =?utf-8?B?Q3BFWGlVTU8xbmx5MjdKb2hQUTN5SVhmMjdGVktpNVVaTHM2WU92eG9BQ2FM?= =?utf-8?B?aS9sZjkrbS9FcDZFWmtCZWFrR3gvZkxpWm5HNmdqZXZyTnFXWTEwZkhsVWZi?= =?utf-8?B?Sm0vYjZwZjYzZm1ZNXpFbnB5aTJOUGtOa0svZWxlZVk0UjRkSmxlWDd5THNR?= =?utf-8?B?MEJKZzNyNDd6UG54eGdSd1lWN1lKbHFhcmZyNzRJZ0dGb1hRVzJjMGF1SWxy?= =?utf-8?B?Vmc4T0ZiNkZLMXpKQ0EwK2s1YnVtZmp5Q1A5UWI4OTZEUHZlNkJCZk1udkxQ?= =?utf-8?B?eUlqZ1RXOXdURjZmVkZ0VmRmTE12dkpFczIzdDNGSGxBODBtK2Z0MEtSWjJq?= =?utf-8?B?NVc2TDNwYjdXeVZKYkRDc3dxNnBsTy9jSDJrNlcxUFIzQ1FHUmovVEt3d25j?= =?utf-8?B?TG5tWWdMYy9vTkx2cC9GSmNOY0tVNk9VZTlCdk5qVVh1QUZmemxFYlNhN1ZK?= =?utf-8?B?NFBhaDdGUEo0cGxXc3NwRVlLZzRzRHFQQ3BQV01Yc292d2ZTaEZLakdGQ1FC?= =?utf-8?B?RUpWdVhPTEExakNKR2JHbjRTcTl6ajNCend0YkVOZGNETlRNU0ZnaE02ZFVt?= =?utf-8?B?TVpsT053S3hISHUwejhFWFlkaWFSamVGb3ZYb2haMFpLdXRNbEMyQVAwNVpT?= =?utf-8?B?TmRZV2RKd0ZickdFd2xNd3FvU1pvSnBSaUh6YjE4eXhsZE5nd3RJcU9BQWRi?= =?utf-8?Q?FLhUov?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(36860700013)(376014)(82310400026)(1800799024);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 May 2025 08:49:29.3512 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 3a3dfeaa-d45d-4af4-3e34-08dd9cfb6496 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: SJ5PEPF000001F7.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR12MB9447 X-ZohoMail-DKIM: pass (identity @amd.com) X-ZM-MESSAGEID: 1748335801461116600 amd-cppc is the AMD CPU performance scaling driver that introduces a new CPU frequency control mechanism. The new mechanism is based on Collaborative Processor Performance Control (CPPC) which is a finer grain frequency management than legacy ACPI hardware P-States. Current AMD CPU platforms are using the ACPI P-states driver to manage CPU frequency and clocks with switching only in 3 P-states, while the new amd-cppc allows a more flexible, low-latency interface for Xen to directly communicate the performance hints to hardware. Default "amd-cppc" driver still leverages Xen governors such as *ondemand*, *performance*, etc, to calculate the performance hints. In the future, we will introduce an advanced active mode to enable autonomous performence level selection. Signed-off-by: Penny Zheng --- v1 -> v2: - re-construct union caps and req to have anonymous struct instead - avoid "else" when the earlier if() ends in an unconditional control flow = statement - Add check to avoid chopping off set bits from cast - make pointers pointer-to-const wherever possible - remove noisy log - exclude families before 0x17 before CPPC-feature MSR op - remove useless variable helpers - use xvzalloc and XVFREE - refactor error handling as ENABLE bit can only be cleared by reset --- v2 -> v3: - Move all MSR-definations to msr-index.h and follow the required style - Refactor opening figure braces for struct/union - Sort overlong lines throughout the series - Make offset/res int covering underflow scenario - Error out when amd_max_freq_mhz isn't set - Introduce amd_get_freq(name) macro to decrease redundancy - Supported CPU family checked ahead of smp-function - Nominal freq shall be checked between the [min, max] - Use APERF/MPREF to calculate current frequency - Use amd_cppc_cpufreq_cpu_exit() to tidy error path --- v3 -> v4: - verbose print shall come with a CPU number - deal with res <=3D 0 in amd_cppc_khz_to_perf() - introduce a single helper amd_get_lowest_or_nominal_freq() to cover both lowest and nominal scenario - reduce abuse of wrmsr_safe()/rdmsr_safe() with wrmsrl()/rdmsrl() - move cf_check from amd_cppc_write_request() to amd_cppc_write_request_msr= s() - add comment to explain why setting non_linear_lowest in passive mode - add check to ensure perf values in lowest <=3D non_linear_lowest <=3D nominal <=3D highset - refactor comment for "data->err !=3D 0" scenario - use "data->err" instead of -ENODEV - add U suffixes for all msr macro --- v4 -> v5: - all freq-values shall be unsigned int type - remove shortcuts as it is rarely taken - checking cpc.nominal_mhz and cpc.lowest_mhz are non-zero values is enough - drop the explicit type cast - null pointer check is in no need for internal functions - change amd_get_lowest_or_nominal_freq() to amd_get_cpc_freq() - clarifying function-wide that the calculated frequency result is to be in= kHz - use array notation - with cpu_has_cppc check, no need to do cpu family check --- xen/arch/x86/acpi/cpufreq/amd-cppc.c | 362 +++++++++++++++++++++++++++ xen/arch/x86/cpu/amd.c | 8 +- xen/arch/x86/include/asm/amd.h | 2 + xen/arch/x86/include/asm/msr-index.h | 5 + 4 files changed, 373 insertions(+), 4 deletions(-) diff --git a/xen/arch/x86/acpi/cpufreq/amd-cppc.c b/xen/arch/x86/acpi/cpufr= eq/amd-cppc.c index 9e64bf957a..8f0a30c19d 100644 --- a/xen/arch/x86/acpi/cpufreq/amd-cppc.c +++ b/xen/arch/x86/acpi/cpufreq/amd-cppc.c @@ -14,7 +14,56 @@ #include #include #include +#include +#include #include +#include +#include + +#define amd_cppc_err(cpu, fmt, args...) \ + printk(XENLOG_ERR "AMD_CPPC: CPU%u error: " fmt, cpu, ## args) +#define amd_cppc_warn(cpu, fmt, args...) \ + printk(XENLOG_WARNING "AMD_CPPC: CPU%u warning: " fmt, cpu, ## args) +#define amd_cppc_verbose(cpu, fmt, args...) \ +({ \ + if ( cpufreq_verbose ) \ + printk(XENLOG_DEBUG "AMD_CPPC: CPU%u " fmt, cpu, ## args); \ +}) + +struct amd_cppc_drv_data +{ + const struct xen_processor_cppc *cppc_data; + union { + uint64_t raw; + struct { + unsigned int lowest_perf:8; + unsigned int lowest_nonlinear_perf:8; + unsigned int nominal_perf:8; + unsigned int highest_perf:8; + unsigned int :32; + }; + } caps; + union { + uint64_t raw; + struct { + unsigned int max_perf:8; + unsigned int min_perf:8; + unsigned int des_perf:8; + unsigned int epp:8; + unsigned int :32; + }; + } req; + + int err; +}; + +static DEFINE_PER_CPU_READ_MOSTLY(struct amd_cppc_drv_data *, + amd_cppc_drv_data); +/* + * Core max frequency read from PstateDef as anchor point + * for freq-to-perf transition + */ +static DEFINE_PER_CPU_READ_MOSTLY(unsigned int, pxfreq_mhz); =20 static bool __init amd_cppc_handle_option(const char *s, const char *end) { @@ -50,10 +99,323 @@ int __init amd_cppc_cmdline_parse(const char *s, const= char *e) return 0; } =20 +/* + * If CPPC lowest_freq and nominal_freq registers are exposed then we can + * use them to convert perf to freq and vice versa. The conversion is + * extrapolated as an linear function passing by the 2 points: + * - (Low perf, Low freq) + * - (Nominal perf, Nominal freq) + * Parameter freq is always in kHz. + */ +static int amd_cppc_khz_to_perf(const struct amd_cppc_drv_data *data, + unsigned int freq, uint8_t *perf) +{ + const struct xen_processor_cppc *cppc_data =3D data->cppc_data; + unsigned int mul, div; + int offset =3D 0, res; + + if ( cppc_data->cpc.lowest_mhz && cppc_data->cpc.nominal_mhz ) + { + mul =3D data->caps.nominal_perf - data->caps.lowest_perf; + div =3D cppc_data->cpc.nominal_mhz - cppc_data->cpc.lowest_mhz; + + /* + * We don't need to convert to kHz for computing offset and can + * directly use nominal_mhz and lowest_mhz as the division + * will remove the frequency unit. + */ + offset =3D data->caps.nominal_perf - + (mul * cppc_data->cpc.nominal_mhz) / div; + } + else + { + /* Read Processor Max Speed(MHz) as anchor point */ + mul =3D data->caps.highest_perf; + div =3D this_cpu(pxfreq_mhz); + if ( !div ) + return -EINVAL; + } + + res =3D offset + (mul * freq) / (div * 1000); + if ( res > UINT8_MAX ) + { + printk_once(XENLOG_WARNING + "Perf value exceeds maximum value 255: %d\n", res); + *perf =3D 0xff; + return 0; + } + if ( res < 0 ) + { + printk_once(XENLOG_WARNING + "Perf value smaller than minimum value 0: %d\n", res); + *perf =3D 0; + return 0; + } + *perf =3D res; + + return 0; +} + +/* + * _CPC may define nominal frequecy and lowest frequency, if not, use + * Processor Max Speed as anchor point to calculate. + * Output freq stores cpc frequency in kHz + */ +static int amd_get_cpc_freq(const struct amd_cppc_drv_data *data, + uint32_t cpc_mhz, uint8_t perf, unsigned int *= freq) +{ + unsigned int mul, div, res; + + if ( cpc_mhz ) + { + /* Switch to kHz */ + *freq =3D cpc_mhz * 1000; + return 0; + } + + /* Read Processor Max Speed(MHz) as anchor point */ + mul =3D this_cpu(pxfreq_mhz); + if ( !mul ) + { + printk_once(XENLOG_ERR + "Failed to read valid processor max frequency as ancho= r point: %u\n", + mul); + return -EINVAL; + } + div =3D data->caps.highest_perf; + res =3D (mul * perf * 1000) / div; + if ( !res ) + return -EINVAL; + *freq =3D res; + + return 0; +} + +/* Output max_freq stores calculated maximum frequency in kHz */ +static int amd_get_max_freq(const struct amd_cppc_drv_data *data, + unsigned int *max_freq) +{ + unsigned int nom_freq =3D 0; + int res; + + res =3D amd_get_cpc_freq(data, data->cppc_data->cpc.nominal_mhz, + data->caps.nominal_perf, &nom_freq); + if ( res ) + return res; + + *max_freq =3D (data->caps.highest_perf * nom_freq) / data->caps.nomina= l_perf; + + return 0; +} + +static int cf_check amd_cppc_cpufreq_verify(struct cpufreq_policy *policy) +{ + cpufreq_verify_within_limits(policy, policy->cpuinfo.min_freq, + policy->cpuinfo.max_freq); + + return 0; +} + +static void cf_check amd_cppc_write_request_msrs(void *info) +{ + const struct amd_cppc_drv_data *data =3D info; + + wrmsrl(MSR_AMD_CPPC_REQ, data->req.raw); +} + +static void amd_cppc_write_request(unsigned int cpu, uint8_t min_perf, + uint8_t des_perf, uint8_t max_perf) +{ + struct amd_cppc_drv_data *data =3D per_cpu(amd_cppc_drv_data, cpu); + uint64_t prev =3D data->req.raw; + + data->req.min_perf =3D min_perf; + data->req.max_perf =3D max_perf; + data->req.des_perf =3D des_perf; + + if ( prev =3D=3D data->req.raw ) + return; + + on_selected_cpus(cpumask_of(cpu), amd_cppc_write_request_msrs, data, 1= ); +} + +static int cf_check amd_cppc_cpufreq_target(struct cpufreq_policy *policy, + unsigned int target_freq, + unsigned int relation) +{ + unsigned int cpu =3D policy->cpu; + const struct amd_cppc_drv_data *data =3D per_cpu(amd_cppc_drv_data, cp= u); + uint8_t des_perf; + int res; + + if ( unlikely(!target_freq) ) + return 0; + + res =3D amd_cppc_khz_to_perf(data, target_freq, &des_perf); + if ( res ) + return res; + + /* + * Setting with "lowest_nonlinear_perf" to ensure governoring + * performance in P-state range. + */ + amd_cppc_write_request(policy->cpu, data->caps.lowest_nonlinear_perf, + des_perf, data->caps.highest_perf); + return 0; +} + +static void cf_check amd_cppc_init_msrs(void *info) +{ + struct cpufreq_policy *policy =3D info; + struct amd_cppc_drv_data *data =3D this_cpu(amd_cppc_drv_data); + uint64_t val; + unsigned int min_freq =3D 0, nominal_freq =3D 0, max_freq; + + /* Package level MSR */ + rdmsrl(MSR_AMD_CPPC_ENABLE, val); + /* + * Only when Enable bit is on, the hardware will calculate the process= or=E2=80=99s + * performance capabilities and initialize the performance level field= s in + * the CPPC capability registers. + */ + if ( !(val & AMD_CPPC_ENABLE) ) + { + val |=3D AMD_CPPC_ENABLE; + wrmsrl(MSR_AMD_CPPC_ENABLE, val); + } + + rdmsrl(MSR_AMD_CPPC_CAP1, data->caps.raw); + + if ( data->caps.highest_perf =3D=3D 0 || data->caps.lowest_perf =3D=3D= 0 || + data->caps.nominal_perf =3D=3D 0 || data->caps.lowest_nonlinear_p= erf =3D=3D 0 || + data->caps.lowest_perf > data->caps.nominal_perf || + data->caps.lowest_nonlinear_perf > data->caps.nominal_perf || + data->caps.nominal_perf > data->caps.highest_perf ) + { + amd_cppc_err(policy->cpu, + "Out of range values: highest(%u), lowest(%u), nomina= l(%u), lowest_nonlinear(%u)\n", + data->caps.highest_perf, data->caps.lowest_perf, + data->caps.nominal_perf, data->caps.lowest_nonlinear_= perf); + goto err; + } + + amd_process_freq(&cpu_data[policy->cpu], + NULL, NULL, &this_cpu(pxfreq_mhz)); + + data->err =3D amd_get_cpc_freq(data, data->cppc_data->cpc.lowest_mhz, + data->caps.lowest_perf, &min_freq); + if ( data->err ) + return; + + data->err =3D amd_get_cpc_freq(data, data->cppc_data->cpc.nominal_mhz, + data->caps.nominal_perf, &nominal_freq); + if ( data->err ) + return; + + data->err =3D amd_get_max_freq(data, &max_freq); + if ( data->err ) + return; + + if ( min_freq > nominal_freq || nominal_freq > max_freq ) + { + amd_cppc_err(policy->cpu, + "min(%u), or max(%u), or nominal(%u) freq value is in= correct\n", + min_freq, max_freq, nominal_freq); + goto err; + } + + policy->min =3D min_freq; + policy->max =3D max_freq; + + policy->cpuinfo.min_freq =3D min_freq; + policy->cpuinfo.max_freq =3D max_freq; + policy->cpuinfo.perf_freq =3D nominal_freq; + /* + * Set after policy->cpuinfo.perf_freq, as we are taking + * APERF/MPERF average frequency as current frequency. + */ + policy->cur =3D cpufreq_driver_getavg(policy->cpu, GOV_GETAVG); + + return; + + err: + /* + * No fallback shceme is available here, see more explanation at call + * site in amd_cppc_cpufreq_cpu_init(). + */ + data->err =3D -EINVAL; +} + +/* + * AMD CPPC driver is different than legacy ACPI hardware P-State, + * which has a finer grain frequency range between the highest and lowest + * frequency. And boost frequency is actually the frequency which is mappe= d on + * highest performance ratio. The legacy P0 frequency is actually mapped on + * nominal performance ratio. + */ +static void amd_cppc_boost_init(struct cpufreq_policy *policy, + const struct amd_cppc_drv_data *data) +{ + if ( data->caps.highest_perf <=3D data->caps.nominal_perf ) + return; + + policy->turbo =3D CPUFREQ_TURBO_ENABLED; +} + +static int cf_check amd_cppc_cpufreq_cpu_exit(struct cpufreq_policy *polic= y) +{ + XVFREE(per_cpu(amd_cppc_drv_data, policy->cpu)); + + return 0; +} + +static int cf_check amd_cppc_cpufreq_cpu_init(struct cpufreq_policy *polic= y) +{ + unsigned int cpu =3D policy->cpu; + struct amd_cppc_drv_data *data; + + data =3D xvzalloc(struct amd_cppc_drv_data); + if ( !data ) + return -ENOMEM; + + data->cppc_data =3D &processor_pminfo[cpu]->cppc_data; + + per_cpu(amd_cppc_drv_data, cpu) =3D data; + + on_selected_cpus(cpumask_of(cpu), amd_cppc_init_msrs, policy, 1); + + /* + * The enable bit is sticky, as we need to enable it at the very first + * begining, before CPPC capability values sanity check. + * If error path takes effective, not only amd-cppc cpufreq core fails + * to initialize, but also we could not fall back to legacy P-states + * driver, irrespective of the command line specifying a fallback opti= on. + */ + if ( data->err ) + { + amd_cppc_err(cpu, "Could not initialize cpufreq cores in CPPC mode= \n"); + amd_cppc_cpufreq_cpu_exit(policy); + return data->err; + } + + policy->governor =3D cpufreq_opt_governor ? : CPUFREQ_DEFAULT_GOVERNOR; + + amd_cppc_boost_init(policy, data); + + amd_cppc_verbose(policy->cpu, + "CPU initialized with amd-cppc passive mode\n"); + + return 0; +} + static const struct cpufreq_driver __initconst_cf_clobber amd_cppc_cpufreq_driver =3D { .name =3D XEN_AMD_CPPC_DRIVER_NAME, + .verify =3D amd_cppc_cpufreq_verify, + .target =3D amd_cppc_cpufreq_target, + .init =3D amd_cppc_cpufreq_cpu_init, + .exit =3D amd_cppc_cpufreq_cpu_exit, }; =20 int __init amd_cppc_register_driver(void) diff --git a/xen/arch/x86/cpu/amd.c b/xen/arch/x86/cpu/amd.c index 8c985466fa..7ec154e9e7 100644 --- a/xen/arch/x86/cpu/amd.c +++ b/xen/arch/x86/cpu/amd.c @@ -611,10 +611,10 @@ static unsigned int attr_const amd_parse_freq(unsigne= d int family, return freq; } =20 -static void amd_process_freq(const struct cpuinfo_x86 *c, - unsigned int *low_mhz, - unsigned int *nom_mhz, - unsigned int *hi_mhz) +void amd_process_freq(const struct cpuinfo_x86 *c, + unsigned int *low_mhz, + unsigned int *nom_mhz, + unsigned int *hi_mhz) { unsigned int idx =3D 0, h; uint64_t hi, lo, val; diff --git a/xen/arch/x86/include/asm/amd.h b/xen/arch/x86/include/asm/amd.h index 9c9599a622..72df42a6f6 100644 --- a/xen/arch/x86/include/asm/amd.h +++ b/xen/arch/x86/include/asm/amd.h @@ -173,5 +173,7 @@ extern bool amd_virt_spec_ctrl; bool amd_setup_legacy_ssbd(void); void amd_set_legacy_ssbd(bool enable); void amd_set_cpuid_user_dis(bool enable); +void amd_process_freq(const struct cpuinfo_x86 *c, unsigned int *low_mhz, + unsigned int *nom_mhz, unsigned int *hi_mhz); =20 #endif /* __AMD_H__ */ diff --git a/xen/arch/x86/include/asm/msr-index.h b/xen/arch/x86/include/as= m/msr-index.h index 22d9e76e55..e4401186c7 100644 --- a/xen/arch/x86/include/asm/msr-index.h +++ b/xen/arch/x86/include/asm/msr-index.h @@ -238,6 +238,11 @@ =20 #define MSR_AMD_CSTATE_CFG 0xc0010296U =20 +#define MSR_AMD_CPPC_CAP1 0xc00102b0U +#define MSR_AMD_CPPC_ENABLE 0xc00102b1U +#define AMD_CPPC_ENABLE (_AC(1, ULL) << 0) +#define MSR_AMD_CPPC_REQ 0xc00102b3U + /* * Legacy MSR constants in need of cleanup. No new MSRs below this commen= t. */ --=20 2.34.1 From nobody Fri Oct 31 11:29:11 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=amd.com); dmarc=pass(p=quarantine dis=none) header.from=amd.com ARC-Seal: i=2; a=rsa-sha256; t=1748335882; cv=pass; d=zohomail.com; s=zohoarc; b=fhVA/zVridg6sH1s8g/u2tM7pfNfeSsP6pGUizLNvOsv4QnW9/lyqhqv7toEoDVbnirv+OX3GkKtYoeO7XDxMnR7K9uCGO1bcvoUGEbEDqAEWzDWewmkJa8sA3qrxScQJ3XD16NPrF8KydL2AWyJYF4pYFtVqIB3NmDjGvCfJ9U= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1748335882; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Yck7AKHKtbmxCUvtsRyzheF4rrJVBYbut7aEbRVxucI=; b=DtOUTEBipj81MzIxigPHX4RxsVo0Z4Mek+9/CI8civ5v9uAvSWwRXcbiLB+wIJGJxm8kniTS6T5yzv74f6KXMlZhYKIU/5y/KZj/5QO6GBNUr6iX0IdKWH40Jsq08ckAhNytyHPkDkJYFuBrePzOURrbnBRv379f3hBKzTS3+7A= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=amd.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1748335882470569.8126740636903; Tue, 27 May 2025 01:51:22 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.998066.1378893 (Exim 4.92) (envelope-from ) id 1uJq1c-0004VE-JO; Tue, 27 May 2025 08:51:08 +0000 Received: by outflank-mailman (output) from mailman id 998066.1378893; Tue, 27 May 2025 08:51:08 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uJq1c-0004V5-G3; Tue, 27 May 2025 08:51:08 +0000 Received: by outflank-mailman (input) for mailman id 998066; Tue, 27 May 2025 08:51:06 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uJq0F-00031E-HV for xen-devel@lists.xenproject.org; Tue, 27 May 2025 08:49:43 +0000 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on20606.outbound.protection.outlook.com [2a01:111:f403:2412::606]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 86839a97-3ad7-11f0-a2fd-13f23c93f187; Tue, 27 May 2025 10:49:40 +0200 (CEST) Received: from SJ0PR13CA0105.namprd13.prod.outlook.com (2603:10b6:a03:2c5::20) by BY5PR12MB4274.namprd12.prod.outlook.com (2603:10b6:a03:206::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.23; Tue, 27 May 2025 08:49:32 +0000 Received: from SJ5PEPF000001F0.namprd05.prod.outlook.com (2603:10b6:a03:2c5:cafe::2a) by SJ0PR13CA0105.outlook.office365.com (2603:10b6:a03:2c5::20) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8769.16 via Frontend Transport; Tue, 27 May 2025 08:49:32 +0000 Received: from SATLEXMB04.amd.com (165.204.84.17) by SJ5PEPF000001F0.mail.protection.outlook.com (10.167.242.68) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8769.18 via Frontend Transport; Tue, 27 May 2025 08:49:32 +0000 Received: from penny-System-Product-Name.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Tue, 27 May 2025 03:49:28 -0500 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 86839a97-3ad7-11f0-a2fd-13f23c93f187 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=xDuHygYFY121d5CqPVsYnxL7KlQzMsQV8wsIxbglHhKZB3KkGdM4A/MkeCoaScaMOLSHeK8D/9dXSNIiFZPfDALq/7TLqTQqyO0QDYZ1tAkEO4AiAbszWgtiogg0HFIaKrj6MmBusDoiE3S5RhWQGCdA0qc2G6Q9VDgSaONlolXibUBWZnENImuWXLjyG+gm8Qi1mfZEDKGxEYhAsUIO8AHGzhnW1EUA7aLDoYE6bAOuI9yGTcZsriDJ5zbuntazd/WiWFvEOq+aeDsErVmH1JyJM7M8gGR9vYxeVKF+3ugSnp8pNSBRfG+cpg5W9rAWAZniGtKF5AinxAX5SbT4iQ== 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=Yck7AKHKtbmxCUvtsRyzheF4rrJVBYbut7aEbRVxucI=; b=sBTlnLL5wIwPprtT9PYSdZ67L+bwbuNOS+mgTVs4ku2ZTRzZwPzKxk9Lnt2cOUlD6QgCzX+gZ0yUz2KbLwLcxsSYFq6QbU+IvFghx/7TTobj19dSO0BeIO2nAreJ55NpGYe7W66FlzlOOR1N5Ms38Qi7wwQy4wNiCEtBcMFW4Cp/YyXEv3NbJ1owjQ1hVCP7IvS+M2doBIjQtbTmR9VQigwGBi76VWx0z4uu2PL98iil8Jr9j231FesNG58+z9C/yvNNimPg3rzAKt05fyDgRTFm+OKkdIAOa/PTCKXTaMLwGwNuh7HYuLiZeIDBytHGx7F/iq/gbJAjhFL+fRQBwA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Yck7AKHKtbmxCUvtsRyzheF4rrJVBYbut7aEbRVxucI=; b=njIeBczp2sQ21hxsElk+YLOD+yerYtA8n5iDCf9htqA5pQLi+ZkNcOLwuHt/dx+wh+eT6l+/w7F3zvwEAF6Hp/mObO2rOQvCtiuTTiHmZhwqJNwqEcDaFZ+aFsvc7Vr9orrWrt9akyUuVwgdVVv5kd3NOozoccwyMCjgUR79q8g= X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C From: Penny Zheng To: CC: , Penny Zheng , Andrew Cooper , Anthony PERARD , Michal Orzel , Jan Beulich , "Julien Grall" , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Stefano Stabellini Subject: [PATCH v5 11/18] xen/x86: implement EPP support for the amd-cppc driver in active mode Date: Tue, 27 May 2025 16:48:26 +0800 Message-ID: <20250527084833.338427-12-Penny.Zheng@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250527084833.338427-1-Penny.Zheng@amd.com> References: <20250527084833.338427-1-Penny.Zheng@amd.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ5PEPF000001F0:EE_|BY5PR12MB4274:EE_ X-MS-Office365-Filtering-Correlation-Id: c268a789-cbec-46ad-05cf-08dd9cfb6675 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|36860700013|82310400026|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?+aCMLJa+WILE1FEcHoJAnq4S+aw6ray7ULDI1TkK7a583z8wHfcYuwmTM/og?= =?us-ascii?Q?fgz9FjiSMYWCFJmyg0/OBfr4qNmZokXQYkt64ptbEc3uMYdaAIQ8d9clBd3Y?= =?us-ascii?Q?dSCbLPjmaquxZHe5ZvOnnfTGYFFWkoa1/yv6VJGUDk23RzKvCXLkn701ojNc?= =?us-ascii?Q?5WJEjon1GUrwUJvgO38PMNo+EqrR8+KRLhCfLiM0kPOoG15JPIVYhCFdumw8?= =?us-ascii?Q?IL0sUu+Fn4vuPzzENAglNq6h/fzyArEiF/58eY9/22VAgC9ELk1S/Sqgr9mf?= =?us-ascii?Q?vbiJTs7DluCKG9oHw0jkxuZMgnLEho4xE090Ie1ZFbdplABvGI2EHPjkJBTp?= =?us-ascii?Q?8M4aB0kkpn3kBknQNjLhQm2sXpOV+17b1K1kRHgoukOLtZg70N71Qx+Rq/80?= =?us-ascii?Q?Y25sKn5F1Ssm28kPrr10w5EWsfU1Rgv9BGa5576EBGPFlEx+2OJIsIJ6w8ih?= =?us-ascii?Q?uMPxAAb53avMN1SksLDoupOm+8EgBgLGX8wz5I3A8bKVDoe4TbvpXSJt+30B?= =?us-ascii?Q?UPq99TNIJl1O1DA0ajUGaOi2w09gPrzCvSZ58brg3yLNqpaL8hW1k+3OiyI5?= =?us-ascii?Q?ykaR9Iom4d3voONbdR8KZ7+xpKckAASuHdwUeBlgCsihb2PVfen87g7z+Dlk?= =?us-ascii?Q?VeTs4sp0Khg93Te98qmDrvGOlpkxdD7mxTj68ywmWRQTmPA4rnJidZQNqx2h?= =?us-ascii?Q?TjIIW0JzkQE1l0EaZ4M7E9J0HLYM20cWsVtTPvYL08c7k8zovryUa7H83GLM?= =?us-ascii?Q?FXDGpsIlNd+HSDZHcjYg3ZTV+c3qh3hp8VEOw1lBtXBa0T24r+zJGRfZ+1D8?= =?us-ascii?Q?edAwSpckqr9XCZ+KC0tKY056LaWkcrUjiwFyj+VgrKZURyWUjTHEZEQJPCZ5?= =?us-ascii?Q?dlE4da2RQI7gOIwZEvb5BYwz/IsSCq8kYRtTSZ0RA8ZAGhfFXUnLJo9XEk+Q?= =?us-ascii?Q?b5MVBGcDJqo2aKAEpMDO8x7rtULwmAtbnguuSvB0hehdS6aMknqADRV0u5rr?= =?us-ascii?Q?+N5jgp1gIRliv3W3afSbxRNmSIFuJIeN9qEWdaq7TacJwUu4Gy1H/qmQsNLQ?= =?us-ascii?Q?jQcC1X1BEgTJCUDirHf+A183Ew/lQKzwiwYDTRQ3RKaqkvhwIhFB1glb4Vj9?= =?us-ascii?Q?zR9qnSkgMNZmjlONIZc0GOJGJGe/1oeQHoWoMkW+JSd91n4ENg4iqAuAqQxw?= =?us-ascii?Q?eVKuzUYuBuBIWl8ajE6A3WO3xUMMZM1knujdSVN0H5vpa6XILzl2RVG2iQiz?= =?us-ascii?Q?hjsKZ/GGqnBM3l0BzPbAnWyXimpL8xpBCOSHuRATQOsIA26E2FJpKLBsZFpe?= =?us-ascii?Q?pdKV36dxjIk1SMobXLCyGmqXClY4LIvS4OEAJzWTy2hd9vkFrREyk0cVIRVu?= =?us-ascii?Q?AQP+jIlWv7qW3pbaU82sAkWShR1GIxHAxkUoK0aiacWGyYtvfVbFPnZUI8EA?= =?us-ascii?Q?tp8D4qgngCN1FLExBXwVSB6qNnns3ZGIxzF3Du72fOen+AnRioyArxxYJ36z?= =?us-ascii?Q?9JlIvaLTqP9LsW8uNSif/OT5E+GgWu4VJnDY?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(376014)(36860700013)(82310400026)(1800799024);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 May 2025 08:49:32.4883 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c268a789-cbec-46ad-05cf-08dd9cfb6675 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: SJ5PEPF000001F0.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR12MB4274 X-ZohoMail-DKIM: pass (identity @amd.com) X-ZM-MESSAGEID: 1748335884577116600 Content-Type: text/plain; charset="utf-8" amd-cppc has 2 operation modes: autonomous (active) mode and non-autonomous (passive) mode. In active mode, we don't need Xen governor to calculate and tune the cpu frequency, while hardware built-in CPPC power algorithm will calculate the runtime workload and adjust cores frequency automatically according to the power supply, thermal, core voltage and some other hardware conditions. Users could set EPP register to tell hardware their preference ratio toward performance over energy efficiency, which is configured on a scale from 0 to 255 where 0 represents maximum performance and 255 represents maximum efficiency. We implement a new AMD CPU frequency driver `amd-cppc-epp` for active mode. It requires `active` tag for users to explicitly select active mode. In driver `active-cppc-epp`, ->setpolicy() is hooked, not the ->target(), as it does not depend on xen governor to do performance tuning. Users could re-use "governor" in Xen cmdline to deliver which performance policy they want to apply, represented by a new field "policy" (CPUFREQ_POLICY_xxx), CPUFREQ_POLICY_PERFORMANCE as maximum performance, CPUFREQ_POLICY_POWERSAVE as the least power consumption. Function cpufreq_policy_from_governor() is responsible for tranforming governor into policy. Right now, only "performance" and "powersave" are considered. Signed-off-by: Penny Zheng --- v1 -> v2: - Remove redundant epp_mode - Remove pointless initializer - Define sole caller read_epp_init_once and epp_init value to read pre-defined BIOS epp value only once - Combine the commit "xen/cpufreq: introduce policy type when cpufreq_driver->setpolicy exists" --- v2 -> v3: - Combined with commit "x86/cpufreq: add "cpufreq=3Damd-cppc,active" para" - Refactor doc about "active mode" - Change opt_cpufreq_active to opt_active_mode - Let caller pass epp_init when unspecified to allow the function parameter to be of uint8_t - Make epp_init per-cpu value --- v3 -> v4: - doc refinement - use MASK_EXTR() to get epp value - fix indentation - replace if-else() with switch() - combine successive comments and do refinement - no need to introduce amd_cppc_epp_update_limit() as a wrapper - rename cpufreq_parse_policy() with cpufreq_policy_from_governor() - no need to use case-insensitive comparison --- v4 -> v5: - refine doc to state what the default is for "active" sub-option and it's = of boolean nature - excess blank after << for AMD_CPPC_EPP_MASK - set max_perf with lowest_perf to get utmost powersave - refine commit message to include description about relation between "poli= cy" and "governor" --- docs/misc/xen-command-line.pandoc | 10 ++- xen/arch/x86/acpi/cpufreq/amd-cppc.c | 123 ++++++++++++++++++++++++++- xen/arch/x86/include/asm/msr-index.h | 1 + xen/drivers/cpufreq/utility.c | 11 +++ xen/include/acpi/cpufreq/cpufreq.h | 12 +++ xen/include/public/sysctl.h | 1 + 6 files changed, 153 insertions(+), 5 deletions(-) diff --git a/docs/misc/xen-command-line.pandoc b/docs/misc/xen-command-line= .pandoc index 9ef847a336..23518b2ae4 100644 --- a/docs/misc/xen-command-line.pandoc +++ b/docs/misc/xen-command-line.pandoc @@ -515,7 +515,7 @@ If set, force use of the performance counters for oprof= ile, rather than detectin available support. =20 ### cpufreq -> `=3D none | {{ | xen } { [:[powersave|performance|ondemand|use= rspace][,[]][,[]]] } [,verbose]} | dom0-kernel | hwp[:[][,verbose]] | amd-cppc[:[verbose]]` +> `=3D none | {{ | xen } { [:[powersave|performance|ondemand|use= rspace][,[]][,[]]] } [,verbose]} | dom0-kernel | hwp[:[][,verbose]] | amd-cppc[:[active][,verbose]]` =20 > Default: `xen` =20 @@ -537,6 +537,14 @@ choice of `dom0-kernel` is deprecated and not supporte= d by all Dom0 kernels. * `amd-cppc` selects ACPI Collaborative Performance and Power Control (CPP= C) on supported AMD hardware to provide finer grained frequency control mechanism. The default is disabled. +* `active` is a boolean to enable amd-cppc driver in active(autonomous) mo= de. + In this mode, users could write to energy performance preference + register(epp) to tell hardware if they want to bias toward performance or + energy efficiency. Built-in CPPC power algorithm will calculate the runt= ime + workload and adjust cores frequency automatically according to the power + supply, thermal, core voltage and some other hardware conditions. + The default is disabled, and the option only applies when `amd-cppc` is + enabled. =20 There is also support for `;`-separated fallback options: `cpufreq=3Dhwp;xen,verbose`. This first tries `hwp` and falls back to `xe= n` if diff --git a/xen/arch/x86/acpi/cpufreq/amd-cppc.c b/xen/arch/x86/acpi/cpufr= eq/amd-cppc.c index 8f0a30c19d..5f15e86dc4 100644 --- a/xen/arch/x86/acpi/cpufreq/amd-cppc.c +++ b/xen/arch/x86/acpi/cpufreq/amd-cppc.c @@ -30,6 +30,9 @@ printk(XENLOG_DEBUG "AMD_CPPC: CPU%u " fmt, cpu, ## args); \ }) =20 +static bool __ro_after_init opt_active_mode; +static DEFINE_PER_CPU_READ_MOSTLY(uint8_t, epp_init); + struct amd_cppc_drv_data { const struct xen_processor_cppc *cppc_data; @@ -76,6 +79,13 @@ static bool __init amd_cppc_handle_option(const char *s,= const char *end) return true; } =20 + ret =3D parse_boolean("active", s, end); + if ( ret >=3D 0 ) + { + opt_active_mode =3D ret; + return true; + } + return false; } =20 @@ -224,11 +234,18 @@ static void cf_check amd_cppc_write_request_msrs(void= *info) } =20 static void amd_cppc_write_request(unsigned int cpu, uint8_t min_perf, - uint8_t des_perf, uint8_t max_perf) + uint8_t des_perf, uint8_t max_perf, + uint8_t epp) { struct amd_cppc_drv_data *data =3D per_cpu(amd_cppc_drv_data, cpu); uint64_t prev =3D data->req.raw; =20 + if ( !opt_active_mode ) + data->req.des_perf =3D des_perf; + else + data->req.des_perf =3D 0; + data->req.epp =3D epp; + data->req.min_perf =3D min_perf; data->req.max_perf =3D max_perf; data->req.des_perf =3D des_perf; @@ -239,6 +256,14 @@ static void amd_cppc_write_request(unsigned int cpu, u= int8_t min_perf, on_selected_cpus(cpumask_of(cpu), amd_cppc_write_request_msrs, data, 1= ); } =20 +static void read_epp_init(void) +{ + uint64_t val; + + rdmsrl(MSR_AMD_CPPC_REQ, val); + this_cpu(epp_init) =3D MASK_EXTR(val, AMD_CPPC_EPP_MASK); +} + static int cf_check amd_cppc_cpufreq_target(struct cpufreq_policy *policy, unsigned int target_freq, unsigned int relation) @@ -260,7 +285,10 @@ static int cf_check amd_cppc_cpufreq_target(struct cpu= freq_policy *policy, * performance in P-state range. */ amd_cppc_write_request(policy->cpu, data->caps.lowest_nonlinear_perf, - des_perf, data->caps.highest_perf); + des_perf, data->caps.highest_perf, + /* Pre-defined BIOS value for passive mode */ + per_cpu(epp_init, policy->cpu)); + return 0; } =20 @@ -336,6 +364,8 @@ static void cf_check amd_cppc_init_msrs(void *info) */ policy->cur =3D cpufreq_driver_getavg(policy->cpu, GOV_GETAVG); =20 + read_epp_init(); + return; =20 err: @@ -369,7 +399,7 @@ static int cf_check amd_cppc_cpufreq_cpu_exit(struct cp= ufreq_policy *policy) return 0; } =20 -static int cf_check amd_cppc_cpufreq_cpu_init(struct cpufreq_policy *polic= y) +static int amd_cppc_cpufreq_init_perf(struct cpufreq_policy *policy) { unsigned int cpu =3D policy->cpu; struct amd_cppc_drv_data *data; @@ -402,12 +432,80 @@ static int cf_check amd_cppc_cpufreq_cpu_init(struct = cpufreq_policy *policy) =20 amd_cppc_boost_init(policy, data); =20 + return 0; +} + +static int cf_check amd_cppc_cpufreq_cpu_init(struct cpufreq_policy *polic= y) +{ + int ret; + + ret =3D amd_cppc_cpufreq_init_perf(policy); + if ( ret ) + return ret; + amd_cppc_verbose(policy->cpu, "CPU initialized with amd-cppc passive mode\n"); =20 return 0; } =20 +static int cf_check amd_cppc_epp_cpu_init(struct cpufreq_policy *policy) +{ + int ret; + + ret =3D amd_cppc_cpufreq_init_perf(policy); + if ( ret ) + return ret; + + policy->policy =3D cpufreq_policy_from_governor(policy->governor); + + amd_cppc_verbose(policy->cpu, + "CPU initialized with amd-cppc active mode\n"); + + return 0; +} + +static int cf_check amd_cppc_epp_set_policy(struct cpufreq_policy *policy) +{ + const struct amd_cppc_drv_data *data =3D per_cpu(amd_cppc_drv_data, + policy->cpu); + uint8_t max_perf, min_perf, epp; + + /* + * min_perf represents the idle frequency, while max_perf represents + * the maximum frequency + */ + max_perf =3D data->caps.highest_perf; + min_perf =3D data->caps.lowest_perf; + + /* + * We set min_perf with highest_perf in performance mode + * and max_perf with lowest_perf in powersave mode, to achieve + * ultmost performance and power savings. + */ + switch ( policy->policy ) + { + case CPUFREQ_POLICY_PERFORMANCE: + /* Force the epp value to be zero for performance policy */ + epp =3D CPPC_ENERGY_PERF_MAX_PERFORMANCE; + min_perf =3D data->caps.highest_perf; + break; + case CPUFREQ_POLICY_POWERSAVE: + /* Force the epp value to be 0xff for powersave policy */ + epp =3D CPPC_ENERGY_PERF_MAX_POWERSAVE; + max_perf =3D data->caps.lowest_perf; + break; + default: + epp =3D per_cpu(epp_init, policy->cpu); + break; + } + + amd_cppc_write_request(policy->cpu, min_perf, + 0 /* no des_perf for epp mode */, + max_perf, epp); + return 0; +} + static const struct cpufreq_driver __initconst_cf_clobber amd_cppc_cpufreq_driver =3D { @@ -418,13 +516,30 @@ amd_cppc_cpufreq_driver =3D .exit =3D amd_cppc_cpufreq_cpu_exit, }; =20 +static const struct cpufreq_driver __initconst_cf_clobber +amd_cppc_epp_driver =3D +{ + .name =3D XEN_AMD_CPPC_EPP_DRIVER_NAME, + .verify =3D amd_cppc_cpufreq_verify, + .setpolicy =3D amd_cppc_epp_set_policy, + .init =3D amd_cppc_epp_cpu_init, + .exit =3D amd_cppc_cpufreq_cpu_exit, +}; + int __init amd_cppc_register_driver(void) { + int ret; + if ( !cpu_has_cppc ) { xen_processor_pmbits &=3D ~XEN_PROCESSOR_PM_CPPC; return -ENODEV; } =20 - return cpufreq_register_driver(&amd_cppc_cpufreq_driver); + if ( opt_active_mode ) + ret =3D cpufreq_register_driver(&amd_cppc_epp_driver); + else + ret =3D cpufreq_register_driver(&amd_cppc_cpufreq_driver); + + return ret; } diff --git a/xen/arch/x86/include/asm/msr-index.h b/xen/arch/x86/include/as= m/msr-index.h index e4401186c7..3e2522a862 100644 --- a/xen/arch/x86/include/asm/msr-index.h +++ b/xen/arch/x86/include/asm/msr-index.h @@ -242,6 +242,7 @@ #define MSR_AMD_CPPC_ENABLE 0xc00102b1U #define AMD_CPPC_ENABLE (_AC(1, ULL) << 0) #define MSR_AMD_CPPC_REQ 0xc00102b3U +#define AMD_CPPC_EPP_MASK (_AC(0xff, ULL) << 24) =20 /* * Legacy MSR constants in need of cleanup. No new MSRs below this commen= t. diff --git a/xen/drivers/cpufreq/utility.c b/xen/drivers/cpufreq/utility.c index b35e2eb1b6..2617581125 100644 --- a/xen/drivers/cpufreq/utility.c +++ b/xen/drivers/cpufreq/utility.c @@ -487,3 +487,14 @@ int __cpufreq_set_policy(struct cpufreq_policy *data, =20 return __cpufreq_governor(data, CPUFREQ_GOV_LIMITS); } + +unsigned int cpufreq_policy_from_governor(const struct cpufreq_governor *g= ov) +{ + if ( !strncmp(gov->name, "performance", CPUFREQ_NAME_LEN) ) + return CPUFREQ_POLICY_PERFORMANCE; + + if ( !strncmp(gov->name, "powersave", CPUFREQ_NAME_LEN) ) + return CPUFREQ_POLICY_POWERSAVE; + + return CPUFREQ_POLICY_UNKNOWN; +} diff --git a/xen/include/acpi/cpufreq/cpufreq.h b/xen/include/acpi/cpufreq/= cpufreq.h index 83050c58b2..6f31009e82 100644 --- a/xen/include/acpi/cpufreq/cpufreq.h +++ b/xen/include/acpi/cpufreq/cpufreq.h @@ -83,6 +83,7 @@ struct cpufreq_policy { int8_t turbo; /* tristate flag: 0 for unsupported * -1 for disable, 1 for enabled * See CPUFREQ_TURBO_* below for defines */ + unsigned int policy; /* CPUFREQ_POLICY_* */ }; DECLARE_PER_CPU(struct cpufreq_policy *, cpufreq_cpu_policy); =20 @@ -133,6 +134,17 @@ extern int cpufreq_register_governor(struct cpufreq_go= vernor *governor); extern struct cpufreq_governor *__find_governor(const char *governor); #define CPUFREQ_DEFAULT_GOVERNOR &cpufreq_gov_dbs =20 +#define CPUFREQ_POLICY_UNKNOWN 0 +/* + * If cpufreq_driver->target() exists, the ->governor decides what frequen= cy + * within the limits is used. If cpufreq_driver->setpolicy() exists, these + * two generic policies are available: + */ +#define CPUFREQ_POLICY_POWERSAVE 1 +#define CPUFREQ_POLICY_PERFORMANCE 2 + +unsigned int cpufreq_policy_from_governor(const struct cpufreq_governor *g= ov); + /* pass a target to the cpufreq driver */ extern int __cpufreq_driver_target(struct cpufreq_policy *policy, unsigned int target_freq, diff --git a/xen/include/public/sysctl.h b/xen/include/public/sysctl.h index 42997252ef..fa431fd983 100644 --- a/xen/include/public/sysctl.h +++ b/xen/include/public/sysctl.h @@ -424,6 +424,7 @@ struct xen_set_cppc_para { }; =20 #define XEN_AMD_CPPC_DRIVER_NAME "amd-cppc" +#define XEN_AMD_CPPC_EPP_DRIVER_NAME "amd-cppc-epp" #define XEN_HWP_DRIVER_NAME "hwp" =20 /* --=20 2.34.1 From nobody Fri Oct 31 11:29:11 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=amd.com); dmarc=pass(p=quarantine dis=none) header.from=amd.com ARC-Seal: i=2; a=rsa-sha256; t=1748335863; cv=pass; d=zohomail.com; s=zohoarc; b=Ca99qLaSkBk6TRSPYu/MBA6AsbfJM0+Vu40l8Ny6ylR8EEMeiBcu2BZuDW7UiXB7r0I+GteD6le3gzsDH/0kF/fTvsqWdtisr+pQrKqWgsZ7aBmQs6+uZKyOhbP2Exww6njB0PwlVUz71jpEgHKmUxjn4Dc3xpl5y/jCMIiqB+Y= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1748335863; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=uKMq5MghF8UFPlQJDia7shL8Q+N/pOobWNyzD8HVQKI=; b=kU/x58B3KKku3JNoQTzcamCHWQMjUD2pXL5qMf3fyhA3zdctp34GNYGMRoH3Qkz0DzwGkbSIoZg6aZV8yh+a1fB9iTegpWDijKyIpecTWaBHh9vsaqJUzYbxrFl+MuLTuwxduWO9jyL3pE6OgDrAK22ytsy9FYcA2MkLLoJY2kw= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=amd.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 174833586397664.492364150306; Tue, 27 May 2025 01:51:03 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.998000.1378870 (Exim 4.92) (envelope-from ) id 1uJq1D-0001hD-Lo; Tue, 27 May 2025 08:50:43 +0000 Received: by outflank-mailman (output) from mailman id 998000.1378870; Tue, 27 May 2025 08:50:43 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uJq1D-0001fp-Bk; Tue, 27 May 2025 08:50:43 +0000 Received: by outflank-mailman (input) for mailman id 998000; Tue, 27 May 2025 08:50:41 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uJq0E-0002ks-81 for xen-devel@lists.xenproject.org; Tue, 27 May 2025 08:49:42 +0000 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (mail-bn8nam11on20625.outbound.protection.outlook.com [2a01:111:f403:2414::625]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 84058220-3ad7-11f0-b894-0df219b8e170; Tue, 27 May 2025 10:49:36 +0200 (CEST) Received: from SJ0PR13CA0097.namprd13.prod.outlook.com (2603:10b6:a03:2c5::12) by CH3PR12MB7763.namprd12.prod.outlook.com (2603:10b6:610:145::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.24; Tue, 27 May 2025 08:49:34 +0000 Received: from SJ5PEPF000001F0.namprd05.prod.outlook.com (2603:10b6:a03:2c5:cafe::a8) by SJ0PR13CA0097.outlook.office365.com (2603:10b6:a03:2c5::12) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8769.15 via Frontend Transport; Tue, 27 May 2025 08:49:33 +0000 Received: from SATLEXMB04.amd.com (165.204.84.17) by SJ5PEPF000001F0.mail.protection.outlook.com (10.167.242.68) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8769.18 via Frontend Transport; Tue, 27 May 2025 08:49:33 +0000 Received: from penny-System-Product-Name.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Tue, 27 May 2025 03:49:31 -0500 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 84058220-3ad7-11f0-b894-0df219b8e170 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=XMmlld2VPjyKlHcYfHGImSreZGxmHsc5X831ga8NQnUA8l2pujC4idddpvb3q5pWwKg9RdHaHw1zpqZN/RuZjUov4C3/9H1Ibr8l0pqdurbBvTqQI3mNM61ysTQco6ZuzNCe55/uWxFqULbrqMFV2IaZFONUXxX5Gyn2nS6o118tXsWmQ8xWn/M8zyumB4fG1GoYokaN+EeN0UltAN6JqVRrPHalGL8j2O/YbCZFgNYeRLr4jj2N4ZH1myz8C4Ui8n8yJDd7V1TTWcuAP3nx1W1SBBlAUcaBkctH4j1Mro04beNHac1PI2io4ujbIx+ZzOv3CugQBiFxMlZKKQdeBw== 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=uKMq5MghF8UFPlQJDia7shL8Q+N/pOobWNyzD8HVQKI=; b=mAZ3azt71GQbQnMIuaOFsHCuE2+su7gCdnHmS60eSR48e6W/TMYlRg2E8TC8VAlUxBpx89h9sykNWqsL24xkaARSmz8NBsiPbXI4nPotPORZzsI8eCqc0LERuSbfrhSQ4gbTbqH2EULv23+KwFoCbh5amSWuxpurXMufS/7GZUcYptq47PYDR9LV1g9AO7QjLTuLHsxDz0L6zWtkixoAt/RUlxOqhDsoHZyEvMAbNTI83ty/YIAWTV/JlNQuGl6atkAtlg4rPtpcb4E+5fio/g49gB6VbcLtDrLrStRgNhtfMlgL/4ZxgZPg/7f2NH6K6p3ah/yidMsBHBCBj7uz+g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=uKMq5MghF8UFPlQJDia7shL8Q+N/pOobWNyzD8HVQKI=; b=YuS2gFTbJEPcn+aOz5m18Z8mwOwSo6JT5o9l4mO6yC86Y3sjM5Ucuo8etTclsOH8YG/6e/f+3uc2nCtXhgWz4YKC4BSXMJafNaCrXg2fHB0/mTYDdorXCbqlQrvMV9B5fpV7Ew8TjW9EYdbS6vL7KHTHe2rR7w/Yem0G6oolKAM= X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C From: Penny Zheng To: CC: , Penny Zheng , Jan Beulich Subject: [PATCH v5 12/18] xen/cpufreq: get performance policy from governor set via xenpm Date: Tue, 27 May 2025 16:48:27 +0800 Message-ID: <20250527084833.338427-13-Penny.Zheng@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250527084833.338427-1-Penny.Zheng@amd.com> References: <20250527084833.338427-1-Penny.Zheng@amd.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ5PEPF000001F0:EE_|CH3PR12MB7763:EE_ X-MS-Office365-Filtering-Correlation-Id: b3ca16e1-e993-4cb3-ed29-08dd9cfb672f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|376014|82310400026|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?tnMPAPpq/aq/cYKy2p0s5ZUIXBWJIOZS64pI8OkzeZoqN3AcTzQqO6eXYLY4?= =?us-ascii?Q?y0cq1Mbw7mqOS4EqIAivSfRDTeRhKkjH7E8Q33wbH4PEeB2JWfsBFu4g93im?= =?us-ascii?Q?ObrQ4P5tg46cLvN5+Gbu5R0rJcmp9GOys+e64wZlW8+e+eCXuz/ZHh6kiG/m?= =?us-ascii?Q?jYgQHcqtt0cMu54M9d4C1/Qzc4olBDsSMiiEzp1oDcGnxOt+9T37v2wFD3EV?= =?us-ascii?Q?JAt5kCzXevaoiFwyK01Ty82HLEfUYfuqNfVYwX8Fx7PsRmjP9mGRO6PZGe/Z?= =?us-ascii?Q?WfHIspdLZoDyQF6H/0XjtskFXyRVFbHEhGi3Jk9tlKx6/eTgs72fKnU7EDtj?= =?us-ascii?Q?fuxvboH1G06jo2+A8M86NZZ6eN7Uyy0ltH421faxwbljR/JSVRROKEZJD7VI?= =?us-ascii?Q?eq0Jf/L3QUHecZE4UHZYkPG+hnt4iprNDzIAL7TZxYIaNk3KCzxvqrafr+0i?= =?us-ascii?Q?ZDQ3X7eiVS5e+Bx4eBA8+fzGxFFQ3pBkEffWgr54kqHFnbZlDhJ5v+K8AZT9?= =?us-ascii?Q?PwgA89sOVj/zQVO2q+/muBDsKC2FKMLhQuxOfOA5SC2KD7hucuyfyTP/jTYu?= =?us-ascii?Q?4PbpwZpg9DspuZUZsXkNwuxs9aWIgM5OPpd3l0smsu9wM2HAGqzgzMQ9Tai/?= =?us-ascii?Q?obz/zeyFATX39TVMe2dsqhxtpwWYOciyJevlY2TWokqtzUHMg4FiBV9mYh5c?= =?us-ascii?Q?adbzYVPC1XnsJosT434TQw7bh0YDCy9C9cSjj6WNH4nQ7l33QUKXMgfg5j2K?= =?us-ascii?Q?QxlQNX7dA6S9ma+NVLhx6EhkvHIUIbxbevuLkdXzPHim5Kjm4tuxsA6F6bz4?= =?us-ascii?Q?x9SxUJIouK42ZWiyZPpndDz6phIk/GhW1JHMvOWnOF0e4gPfym+COFimloQp?= =?us-ascii?Q?R6ZvObJDt9JXSG7iphS7WPFIjWzdzg6K01ogHbAKt63RFsifmiBwXMPfERsC?= =?us-ascii?Q?yvKNQKOf3IRoa5RWti+AkX5oVMjzvkmcOSq73+EA86Lkwcpza8WNqz1cDw+O?= =?us-ascii?Q?ddqYjc9z2paDIbjHHQhztEpqS0DEZxPdtBY0TYlIkl+omEH3cPGuWF4kDpr4?= =?us-ascii?Q?LPMbCE8RIkybrsyiqg2ua3tLIGbiniBexZXgSRn9mO30Qf+Jr0ABEKDHPgD6?= =?us-ascii?Q?UW0arxvUxI3EC0dy2IfqV6VaHr6x2gdRqkkxcdtMREhdZ9qvgxknqBWWaVsu?= =?us-ascii?Q?5BoN5lRBpp2urDPcarvevuGiGeN24qESx4VfN5U1o4aAIZwU0n1WP/KW3/kn?= =?us-ascii?Q?2ZryeJ0GWfvm3I59jRwXVsUeC2Wes7t8AHBqziYFbtZ70pVjQCLb8deq6Uvd?= =?us-ascii?Q?GhU3yU9r06psh+3z8qFOSEAKemm/sIRIrLcdVjRHMyGS2mNpiT+btwBLFhFb?= =?us-ascii?Q?/Jd1VhFAle1ElpssHVannktkZ2a7KiMPzYLA9+nD7hsDSn7tDXfzZjJmjKVb?= =?us-ascii?Q?2Acvy4z0AJMwJi5EgQQHYQGqjuvQl9zxX7SMt1EZU+6o+8TV+f0PNjXqJbg6?= =?us-ascii?Q?t+ZSIR4z+RfWiW9q3GX3o22Gs/2oCGMZsLcs?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(36860700013)(376014)(82310400026)(1800799024);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 May 2025 08:49:33.7131 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: b3ca16e1-e993-4cb3-ed29-08dd9cfb672f X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: SJ5PEPF000001F0.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR12MB7763 X-ZohoMail-DKIM: pass (identity @amd.com) X-ZM-MESSAGEID: 1748335866068116600 Content-Type: text/plain; charset="utf-8" Even if Xen governor is not used in amd-cppc active mode, we could somehow deduce which performance policy (CPUFREQ_POLICY_xxx) user wants to apply through which governor they choose, such as: If user chooses performance governor, they want maximum performance. If user chooses powersave governor, they want the least power consumption. Function cpufreq_policy_from_governor() is responsible for above transition, and it shall be also effective when users setting new governor through xenp= m. ondemand and userspace are forbidden choices, and if users specify such options, we shall not only give warning message, but also error out. Signed-off-by: Penny Zheng --- v4 -> v5: - new commit --- xen/drivers/acpi/pmstat.c | 8 ++++++++ xen/drivers/cpufreq/utility.c | 1 + 2 files changed, 9 insertions(+) diff --git a/xen/drivers/acpi/pmstat.c b/xen/drivers/acpi/pmstat.c index 330bc3a1c2..514475cf5c 100644 --- a/xen/drivers/acpi/pmstat.c +++ b/xen/drivers/acpi/pmstat.c @@ -319,6 +319,14 @@ static int set_cpufreq_gov(struct xen_sysctl_pm_op *op) if (new_policy.governor =3D=3D NULL) return -EINVAL; =20 + new_policy.policy =3D cpufreq_policy_from_governor(new_policy.governor= ); + if ( new_policy.policy =3D=3D CPUFREQ_POLICY_UNKNOWN ) + { + printk("Failed to get performance policy from %s, and users shall = write epp values to deliver preference towards performance over efficiency", + new_policy.governor->name); + return -EINVAL; + } + return __cpufreq_set_policy(old_policy, &new_policy); } =20 diff --git a/xen/drivers/cpufreq/utility.c b/xen/drivers/cpufreq/utility.c index 2617581125..734cd84be1 100644 --- a/xen/drivers/cpufreq/utility.c +++ b/xen/drivers/cpufreq/utility.c @@ -456,6 +456,7 @@ int __cpufreq_set_policy(struct cpufreq_policy *data, data->min =3D policy->min; data->max =3D policy->max; data->limits =3D policy->limits; + data->policy =3D policy->policy; if (cpufreq_driver.setpolicy) return alternative_call(cpufreq_driver.setpolicy, data); =20 --=20 2.34.1 From nobody Fri Oct 31 11:29:11 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=amd.com); dmarc=pass(p=quarantine dis=none) header.from=amd.com ARC-Seal: i=2; a=rsa-sha256; t=1748335883; cv=pass; d=zohomail.com; s=zohoarc; b=ZL94QRXm2UFhCivULnFRsOP/XiaHtlw29dFyame3p1H1vtrS6WC3FlmZTNt9fB5heSVQxiaMDGT/3iQHf+vZLqY44okksrRvf3AbsErPwVOmKih+QFslBI3MEIY3OJSXGH2XOw8Gyp3ZGJHZsaUQABRRmtO791PF2LIMn00qVZs= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1748335883; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=w8UNDtkJ77Jej48aHtABIfIEduYhPVXTw5TZb7gBSLo=; b=V90/k/LrIS6/iCmZETYPjWBsJ1XPFAyZcjkB+0cy1VsVdK+pcatreg0e09gM1HdRJVbtj/3GSD+La//k1SmaRTQjEhFQgV+rW1WIkcDsG2xixtcLNevwkBT9C4oipxovD023wR2HWGWrC99PXY58AFVr1JQSKlVthazMmo/pWX4= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=amd.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1748335883072560.9845846565645; Tue, 27 May 2025 01:51:23 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.998067.1378898 (Exim 4.92) (envelope-from ) id 1uJq1c-0004Y5-R3; Tue, 27 May 2025 08:51:08 +0000 Received: by outflank-mailman (output) from mailman id 998067.1378898; Tue, 27 May 2025 08:51:08 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uJq1c-0004XN-Nn; Tue, 27 May 2025 08:51:08 +0000 Received: by outflank-mailman (input) for mailman id 998067; Tue, 27 May 2025 08:51:06 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uJq0F-0002ks-81 for xen-devel@lists.xenproject.org; Tue, 27 May 2025 08:49:43 +0000 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10on2060c.outbound.protection.outlook.com [2a01:111:f403:2413::60c]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 84ab588a-3ad7-11f0-b894-0df219b8e170; Tue, 27 May 2025 10:49:36 +0200 (CEST) Received: from SJ2PR07CA0009.namprd07.prod.outlook.com (2603:10b6:a03:505::6) by SN7PR12MB7810.namprd12.prod.outlook.com (2603:10b6:806:34c::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.21; Tue, 27 May 2025 08:49:36 +0000 Received: from SJ5PEPF000001F1.namprd05.prod.outlook.com (2603:10b6:a03:505:cafe::21) by SJ2PR07CA0009.outlook.office365.com (2603:10b6:a03:505::6) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8769.20 via Frontend Transport; Tue, 27 May 2025 08:49:35 +0000 Received: from SATLEXMB04.amd.com (165.204.84.17) by SJ5PEPF000001F1.mail.protection.outlook.com (10.167.242.69) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8769.18 via Frontend Transport; Tue, 27 May 2025 08:49:35 +0000 Received: from penny-System-Product-Name.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Tue, 27 May 2025 03:49:33 -0500 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 84ab588a-3ad7-11f0-b894-0df219b8e170 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=i7Zm4GZQMTHpOJ/utqLehAb078P5Mxqsc/OC+NByfLRAW9CHiM2PxiYe/9BzNhd0/mQmb3ajefmTFcFdYeJ5g0it0dvh6kmedbvND57q9MPH5nB3soYWxzXdnkA69dqZqkL7QaTmqUKE3GJS2vPFWTZJe1Cbu+SswpEYMbyVP4JJchBhd7vNQCgDMCjSMRrzspojY/w02TQCYubqzrnZvXgsJ6poIC6v4qlg781CrHAmoWkE1VKRcDqH+3F+2EqIyZmH3xAa0KzlDPIRXWVjMnlIsJuBd/YUGXDScq0se/tNKLT0B6GGwyzIx4KksRPCSXLZbQThoo2o/KY9r5/LOQ== 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=w8UNDtkJ77Jej48aHtABIfIEduYhPVXTw5TZb7gBSLo=; b=YvTzvSsz7/Y1BCH3fzCW1X0fZmsXmJA4mxJp2ELz8HJt2M7KFygjcDAwmEhb9RWecgaejtsdKzhjywqtCDUHQ1N4/3QNEHaPRFXAv/TYk/FSfTxntWqTK2srlnNgHR6aFU4S39Zkc3T5fNC52NsiQwZW4UM2T6w7K5Qw/vtILV0YjS7yH1jC9YXQldDey3DmTh6FVoi1BfUSQpRrKs1MDGMTPrzQlGRLxhcO6E3ob/LYgtM2EAaB5NwG1/lRnsdA0h+7P+9Qcy4lNnnfWIWDPDwCCMA0SZcdSKGroHRB34OgDYRgEJ9VP0zHdp/JKNU5EM/WPhGH4ivLwTyEh3YJ+w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=w8UNDtkJ77Jej48aHtABIfIEduYhPVXTw5TZb7gBSLo=; b=vfFE3rA2KdTTHGJfe43JYLfF6lEC237f1NuYuSDG2YbV8oUlWjMfw+g1XD2O7Jl4+7Un8OI2FfqGg3NZYurc/XB6nDswgDsC4xqQwympdjgLZ2g3r2cRq0Kipfr7ZlYHntKW0vnwSp2DL6xUZHwFo6XEk8/L9/IeJhzqvbRgBKI= X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C From: Penny Zheng To: CC: , Penny Zheng , Jan Beulich Subject: [PATCH v5 13/18] xen/cpufreq: normalize hwp driver check with hwp_active() Date: Tue, 27 May 2025 16:48:28 +0800 Message-ID: <20250527084833.338427-14-Penny.Zheng@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250527084833.338427-1-Penny.Zheng@amd.com> References: <20250527084833.338427-1-Penny.Zheng@amd.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ5PEPF000001F1:EE_|SN7PR12MB7810:EE_ X-MS-Office365-Filtering-Correlation-Id: 9596d741-2bc9-4640-f764-08dd9cfb6815 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|82310400026|1800799024|376014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?2V7q0DghCvDVWe4wE1IsFwapW+XICSdq2t0EU9CYOyD+3+XeMU8qRswEGPl1?= =?us-ascii?Q?o95I9+COMKNn4R9/3b5BiKc7FHXvlW5Kkc88uXFFbjMJFY1e2elPTa4rDX8K?= =?us-ascii?Q?ArapXye+P/zVbB6iosEFwvGk67cgTafYy5fNKV6U2alfQj/0f9ktjU/Jip4z?= =?us-ascii?Q?v1uN8ekJwwp1MNfqAF67fZ9k9YBeX5CC095xEo+R1lVQnOR5RQW4QKD08JxN?= =?us-ascii?Q?cAkNDaG19k12bC50jAGLqP7byyytt+IQC9So9gsulodIlKgBJI15W7GM02b3?= =?us-ascii?Q?m8W1OjG/u8VFwsU7LsQwsZ47ZCHoeWJ8A8eJed5VVCgb4udP2CugXyaXp73p?= =?us-ascii?Q?bEt82dS979WH/Okk6eSoWm4wIFQ+5fsKnd04UJxuH3AS9eSpoF4YiwrqLz7v?= =?us-ascii?Q?8KkhYB9pjqhhfcfFcVkIieP2+vE9n3HdoXFBB8QdvBh6MkIS5lXgGwcXM21w?= =?us-ascii?Q?zl4wogqG6DycIPYwTafHLNvFq8RBmoJIZunk+ehP1SkJH26CiVphaaXVmTd1?= =?us-ascii?Q?Z7J1f4yZYvHVNsYoMKeMAiANcFSFlACz6RA6kEurD16ks5T8evNhBUBO3diH?= =?us-ascii?Q?H0cVHeMaspWrXBzrpooldUpSoiKmJKxjetbvkVsTIueFlr4qDavTAQY2xo1h?= =?us-ascii?Q?9zLls8jywPLAqQmNO7WYpoGGeahHwoqZ+sUxoTrW7Le0fAMKhHW0HOSJGg1a?= =?us-ascii?Q?Y/F5bKOnhAyyE0wnKJ3pNt8XSFxRpQyOfKzrU7IzNs3XJOskMGzPxKSQ9tmW?= =?us-ascii?Q?cZ9aLGWKi7GO67/uGYwTnD3rK0KKnrrPn19jnT9TqeOjOr5KnyHKjKVoj7kC?= =?us-ascii?Q?xBkeKY+nL1Gu1JGHWAOIXzFhZB5YLbtX/rKPlwk/5QuXU3diTwk+rSvMtlok?= =?us-ascii?Q?iBFt+8uIqPIBjm1HHe2TQNbz+LhShTO2YTIt/OXjQ9u9HrAvifd0SgdeYR7k?= =?us-ascii?Q?auRiPk1qFD1KX+tk9F80jhDpFWlUGC9tnWkh6tj1jVvHRS6fl6XyVVoSA4Wg?= =?us-ascii?Q?uvtfpZw0QY3fMaL82U6dIhXMVc2NVvPyF3g2ehxG94VibRU/fFx5xGB9GSjc?= =?us-ascii?Q?15NbVk9J+6x0t0jQ5+7y439GzS86cLQLsql6h8S6l7JgJwAUGDhM8QPcZPI0?= =?us-ascii?Q?BERffxby6ECVayc0/OfngGPmEWbqnx3DKyJquz6KnztVQE4EyFkWRtJ0MmOq?= =?us-ascii?Q?78h5K5lGeKiVChtkI27IAnB81MZyGFtkh6UIVoQJ6LmplY7vwUJAeOS6iH/6?= =?us-ascii?Q?iaxdJvSgJRtCubmxMm2QzOahkO7k0u+PzymvpU6tBZXe1B2nRdUr9aGv0P5p?= =?us-ascii?Q?T4ixIzFdTmOpBCRhVrS6vfksv6h0m7wDYhi1eS9Ufoa7oqD/iXF3yPNT+nn8?= =?us-ascii?Q?F8CMWs5R/6azFQGeR/cQF18H5UBCrlJlFZbnRvx+FSeMvCxOFLDqgVz4w3eZ?= =?us-ascii?Q?z4PBJL1IzC/TDFQo4pwa2RZ25GTUJijAGawbgaCKFbRZsApkwQjMPsdXhZyq?= =?us-ascii?Q?Bxbt0cJaH68nvhwKyZu+V/Bad03tk+N+VvlW?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(36860700013)(82310400026)(1800799024)(376014);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 May 2025 08:49:35.2211 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9596d741-2bc9-4640-f764-08dd9cfb6815 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: SJ5PEPF000001F1.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN7PR12MB7810 X-ZohoMail-DKIM: pass (identity @amd.com) X-ZM-MESSAGEID: 1748335884270116600 Content-Type: text/plain; charset="utf-8" Instead of using hypercall passing parameter to identify hwp driver, we shall use hwp_active(). Also, we've already used hwp_active() in do_get_pm_info() in the same file to do hwp driver check, it's better syncing with same way. Signed-off-by: Penny Zheng Acked-by: Jan Beulich --- v4 -> v5: - new commit --- xen/drivers/acpi/pmstat.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/xen/drivers/acpi/pmstat.c b/xen/drivers/acpi/pmstat.c index 514475cf5c..c09e001ec3 100644 --- a/xen/drivers/acpi/pmstat.c +++ b/xen/drivers/acpi/pmstat.c @@ -253,9 +253,7 @@ static int get_cpufreq_para(struct xen_sysctl_pm_op *op) else strlcpy(op->u.get_para.scaling_driver, "Unknown", CPUFREQ_NAME_LEN= ); =20 - if ( IS_ENABLED(CONFIG_INTEL) && - !strncmp(op->u.get_para.scaling_driver, XEN_HWP_DRIVER_NAME, - CPUFREQ_NAME_LEN) ) + if ( hwp_active() ) ret =3D get_hwp_para(policy->cpu, &op->u.get_para.u.cppc_para); else { --=20 2.34.1 From nobody Fri Oct 31 11:29:11 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=amd.com); dmarc=pass(p=quarantine dis=none) header.from=amd.com ARC-Seal: i=2; a=rsa-sha256; t=1748335856; cv=pass; d=zohomail.com; s=zohoarc; b=ZxUD8q0L1LmauUoIB2MtQfjScHB6UzBfSClag7Pc28k2LlxCKYyB3d5x9inB+WzgfxVDAq+ZBDLuorM+dJCgorluNyOoFpG3W/pY+PXZ6dXs7uO1tcCob5DxNp/dddIcDQb0UtG+BXmLzjlkGHNwc/KZcVnntHCe1gMTMwxEOaQ= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1748335856; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=vXUlUm4d0wql5IcMZNTgxdbV0uwQON7fY64Zus5RrVI=; b=gc82J/zy54rfogS741f7CHTHIrEsrNrPyVlKprpvcvYPyinyD0qqa9QYdnSaQ5auimi7sRsXXrdUbdGHhwjsyqsKnhFElgpWXD01iZQ1tAo8QmjcBcg9J7ruOQL0Rr8lS+S8ihMFdGq+rRs5R67oxL/FG26ZxZNDaN5CljLFV04= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=amd.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1748335856124831.1437275232348; Tue, 27 May 2025 01:50:56 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.997991.1378843 (Exim 4.92) (envelope-from ) id 1uJq1B-000162-80; Tue, 27 May 2025 08:50:41 +0000 Received: by outflank-mailman (output) from mailman id 997991.1378843; Tue, 27 May 2025 08:50:41 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uJq1B-00015q-4Q; Tue, 27 May 2025 08:50:41 +0000 Received: by outflank-mailman (input) for mailman id 997991; Tue, 27 May 2025 08:50:39 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uJq0I-00031E-I6 for xen-devel@lists.xenproject.org; Tue, 27 May 2025 08:49:46 +0000 Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on20619.outbound.protection.outlook.com [2a01:111:f403:2418::619]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 88161911-3ad7-11f0-a2fd-13f23c93f187; Tue, 27 May 2025 10:49:43 +0200 (CEST) Received: from BY5PR20CA0015.namprd20.prod.outlook.com (2603:10b6:a03:1f4::28) by BY5PR12MB4114.namprd12.prod.outlook.com (2603:10b6:a03:20c::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.26; Tue, 27 May 2025 08:49:38 +0000 Received: from SJ5PEPF000001F4.namprd05.prod.outlook.com (2603:10b6:a03:1f4:cafe::63) by BY5PR20CA0015.outlook.office365.com (2603:10b6:a03:1f4::28) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8746.40 via Frontend Transport; Tue, 27 May 2025 08:49:38 +0000 Received: from SATLEXMB04.amd.com (165.204.84.17) by SJ5PEPF000001F4.mail.protection.outlook.com (10.167.242.72) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8769.18 via Frontend Transport; Tue, 27 May 2025 08:49:38 +0000 Received: from penny-System-Product-Name.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Tue, 27 May 2025 03:49:34 -0500 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 88161911-3ad7-11f0-a2fd-13f23c93f187 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=LcIAPpNUuK1QalVq1OlHwlte4hKmqDq/eECqk4QxjrMsvrQnR39m41ZtWvW0HJ0UaM6u0mq4tVgyzbIOpeVM7WcPRfrQ/l5CIwbFPjjyHNchZ9g9n85WmO+yVr91Xp2btsCH131n47NcKChWrYRHoQ8rtS8JVenRNN9kuw9wI3dzOmJF4fUfKcMQooCj2iLAnwuQmgVlvsqBAY0ikq5CflMyqWQeJCfROtfl7UjJqcXUkHdQJYgHGJtjYJRq18L2d5/bihT9pv4+WZoAJmSiGwPDI0L5trZdX/vRm7HC9iROsUiq9QOnS4dtC2VJOLr6LVb6MzzKPQ7zN0p0RjKNlg== 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=vXUlUm4d0wql5IcMZNTgxdbV0uwQON7fY64Zus5RrVI=; b=MwCaYnyTtXjkcu4Z3cFGmVXVyU8+XQrbddqLbzbF+1HrymDhP6ZCOVbt1XgRvIyX97e2/yg4nbs4qEaTUpkktrMLyreZRvuc3WYPVnaUpw6FVsgg1lapOcauhadsm9V+lFLJ9Eil5ASla+pdgZybc6iihaDqii5NQUeHU+K0LUgtP/nTHy6Fzmzy/AKANgW9mCnFgAtlpCVXvRwvwPRB9VD13MeENdtQGa0kviyJzMm9N+/+p3boNwHbkFqLpwZWkxvZhSx21w0swegQBdRoZlJoyl1PE6d1TDViUEnhh7RdGGYRGZhHAHNboSMNBTmXw+MVpvSGOgGV4fFd4ReWwA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=vXUlUm4d0wql5IcMZNTgxdbV0uwQON7fY64Zus5RrVI=; b=IZd6nmDq5+g9M50YTUTxQ+dWFNTAlHHXBwmOaNkXHM5w9pZvuIqDYrs0plYdDGx9pjalQ3sfObCKqSuT8N8YCYq0FSfAQXUbFrzz/vR8g8eYtHWPPo9qn2hCkP8yXM7Iv89qmcR5UUHBvkfokDXDJ+nIp6mY8wY6M8OHpL3mD5U= X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C From: Penny Zheng To: CC: , Penny Zheng , Anthony PERARD , Juergen Gross , Andrew Cooper , Michal Orzel , Jan Beulich , Julien Grall , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , "Stefano Stabellini" Subject: [PATCH v5 14/18] xen/cpufreq: introduce GET_CPUFREQ_CPPC sub-cmd Date: Tue, 27 May 2025 16:48:29 +0800 Message-ID: <20250527084833.338427-15-Penny.Zheng@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250527084833.338427-1-Penny.Zheng@amd.com> References: <20250527084833.338427-1-Penny.Zheng@amd.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ5PEPF000001F4:EE_|BY5PR12MB4114:EE_ X-MS-Office365-Filtering-Correlation-Id: 03ad8595-4bea-4ada-6b23-08dd9cfb69d9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|376014|82310400026|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?8c7J9+mnkKg15xE0pNV5pCkQM7W+XTe96cIrUWyPDC0nu6zGGX44DLXJG71b?= =?us-ascii?Q?sFJOfNGwENCiAtQd6wyv+hq9cfwLV2Hai9pHb5peWulMtrE5JCvsD5DwXeBk?= =?us-ascii?Q?mEh3GSPUlTxo6zLc84R8n2mSuuWX18YHkowCmChXdY7/wlortpm++/E05vl4?= =?us-ascii?Q?+h4PGK9UOFBKpWHWPIZqBPEmRWaPmFa7vZLYFv9Dw1FZFTYgpEwNuWwambia?= =?us-ascii?Q?EmC9X9wUl7rjk/TIsRUdV4LTC31lJigw5HNEdf6YwlaEdi1RLRtWCB/zP3hl?= =?us-ascii?Q?HiDiBb6y4CcQFCKB7+KErxYrAaTrji61n7BEKnSqKKkoBqTZeAxGkRP0EKu7?= =?us-ascii?Q?gosxLG/fJV5oC7NbFzGA8R3io9Q3bQvaO0fVPInyP5nJGNn9HygeA67O2Ep5?= =?us-ascii?Q?2cDGipVjqVeg68E4Hu0c6DqFHe+mOiHhndI5XtvKfHpN01VqGJEo+5YYSji4?= =?us-ascii?Q?S5V8rDKsnQR4aJDoVEkK7f5Jo2RxdlM8duRxijwBZXLHXhSYyowImJA312YN?= =?us-ascii?Q?BmVJiwIfy4p85Ju2IlOwsBSNxEB6nES3tH1Qmn1IDIT8pUrXsmA+uIrsSP6B?= =?us-ascii?Q?2JAnuIeBZ16pPtObybwWlx7Fo7NKa6FrIc7wRETMcg7jkFYoiT9r4s533pfu?= =?us-ascii?Q?ZkyUOj/GKDVzDGjDZl2s0m8+rlP+uh/aKKm7L2KbKnAkk5KvXgO4lwO380QB?= =?us-ascii?Q?vIgCJ63dUMx0WkFWO15VklrRFID2ku6eztvT/UdL6MSciAxQtNTDoR+rCWq2?= =?us-ascii?Q?nc/tAUlULZ7msTEm9XATNGxgQ2cQuTiY03FD0Ajq4ZyuNIkW89vbuoBlrSKN?= =?us-ascii?Q?bdCwC1Di6+PiamdfsXJ0C5ByEG5kZPK8dZ+QeIBgwS1I/maHxEylTKTwcKTk?= =?us-ascii?Q?/bW/M4DHJqS5m4w9Xw2cPxosu6tbbsF/rmn/c1BM+ya9xZfeb11WToWZ5j/N?= =?us-ascii?Q?yaBd4DeE62GETo6SmjBo5PFZULkk6OViL/OT3o1cD5MgOsmgfd3qq5WUpn7k?= =?us-ascii?Q?Ox617eUBsIq2fk3Mmc4uFUFzJUDq+DKpw8ezrKyGudR9QRqJvaNLQEDHuY8b?= =?us-ascii?Q?BGcTCLaWNYU5S40rr6HMTOri2fYOYE1WyeNoDgSZvJ9LhSY9irPP8BnagvZ5?= =?us-ascii?Q?+7xcQxIHIz98uYsrpiaClAYslyCwBw/Xn5TMqhL6w39EKt8RGeoGkXsrooae?= =?us-ascii?Q?rlRG4BvyHCzZySe54lgkV6CwyYaXahGImfl6Q2qJffC1ZHPsLk6sZ5uXFmEl?= =?us-ascii?Q?BVAz6aoo6LgNVJC2YiMoWPZX1wEnu+r7oK67suVZyfoMOUiB9ks/Us/sn1B/?= =?us-ascii?Q?6VSUeH2xOPolRPBlQBn08T7mtGykGZug90GvuufagHFg4p5iLQOAtq01BnXE?= =?us-ascii?Q?5whtv5GhzKXeJ/fJyZQ4l3vMh0UpSBVPlXBrTJR/K+O96JspIwXcfMBFAfBy?= =?us-ascii?Q?aue4aAoR4f8DJs/cqE56Kzw/ikdR1C9SIW4EwBxAqyEPlIaZBN6n/AQU/XrZ?= =?us-ascii?Q?VWKNaJ+79Ys9RSrbDUNKarRZGEtVUoNvtPtW?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(36860700013)(376014)(82310400026)(1800799024);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 May 2025 08:49:38.1797 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 03ad8595-4bea-4ada-6b23-08dd9cfb69d9 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: SJ5PEPF000001F4.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR12MB4114 X-ZohoMail-DKIM: pass (identity @amd.com) X-ZM-MESSAGEID: 1748335857895116600 Content-Type: text/plain; charset="utf-8" In amd-cppc passive mode, it's Xen governor which is responsible for performance tuning, so governor and CPPC could co-exist. That is, both governor-info and CPPC-info could be printed together via xenpm tool. To achieve that, "struct xen_cppc_para" needs to be moved out of the union and also "struct xen_get_cpufreq_para". Also if still putting it in "struct xen_get_cpufreq_para" (e.g. just move out of union), "struct xen_get_cpufreq_para" will enlarge too much to further make xen_sysctl.u exceed 128 bytes. We introduce a new sub-cmd GET_CPUFREQ_CPPC to specifically print CPPC-related para and clear cppc print in GET_CPUFREQ_PARA. Signed-off-by: Penny Zheng --- v4 -> v5: - new commit --- tools/include/xenctrl.h | 3 +- tools/libs/ctrl/xc_pm.c | 28 ++++++++++- tools/misc/xenpm.c | 97 ++++++++++++++++++++++++++----------- xen/drivers/acpi/pmstat.c | 18 +++++-- xen/include/public/sysctl.h | 3 +- 5 files changed, 116 insertions(+), 33 deletions(-) diff --git a/tools/include/xenctrl.h b/tools/include/xenctrl.h index 4955981231..79523d2d73 100644 --- a/tools/include/xenctrl.h +++ b/tools/include/xenctrl.h @@ -1938,7 +1938,6 @@ struct xc_get_cpufreq_para { xc_ondemand_t ondemand; } u; } s; - xc_cppc_para_t cppc_para; } u; =20 int32_t turbo_enabled; @@ -1953,6 +1952,8 @@ int xc_set_cpufreq_para(xc_interface *xch, int cpuid, int ctrl_type, int ctrl_value); int xc_set_cpufreq_cppc(xc_interface *xch, int cpuid, xc_set_cppc_para_t *set_cppc); +int xc_get_cppc_para(xc_interface *xch, unsigned int cpuid, + xc_cppc_para_t *cppc_para); int xc_get_cpufreq_avgfreq(xc_interface *xch, int cpuid, int *avg_freq); =20 int xc_set_sched_opt_smt(xc_interface *xch, uint32_t value); diff --git a/tools/libs/ctrl/xc_pm.c b/tools/libs/ctrl/xc_pm.c index ff7b5ada05..3c9e272aee 100644 --- a/tools/libs/ctrl/xc_pm.c +++ b/tools/libs/ctrl/xc_pm.c @@ -289,7 +289,6 @@ int xc_get_cpufreq_para(xc_interface *xch, int cpuid, CHK_FIELD(s.scaling_min_freq); CHK_FIELD(s.u.userspace); CHK_FIELD(s.u.ondemand); - CHK_FIELD(cppc_para); =20 #undef CHK_FIELD =20 @@ -367,6 +366,33 @@ int xc_set_cpufreq_cppc(xc_interface *xch, int cpuid, return ret; } =20 +int xc_get_cppc_para(xc_interface *xch, unsigned int cpuid, + xc_cppc_para_t *cppc_para) +{ + int ret; + struct xen_sysctl sysctl =3D {}; + struct xen_cppc_para *sys_cppc_para =3D &sysctl.u.pm_op.u.cppc_para; + + if ( !xch || !cppc_para ) + { + errno =3D EINVAL; + return -1; + } + + sysctl.cmd =3D XEN_SYSCTL_pm_op; + sysctl.u.pm_op.cmd =3D GET_CPUFREQ_CPPC; + sysctl.u.pm_op.cpuid =3D cpuid; + + ret =3D xc_sysctl(xch, &sysctl); + if ( ret ) + return ret; + + BUILD_BUG_ON(sizeof(*cppc_para) !=3D sizeof(*sys_cppc_para)); + memcpy(cppc_para, sys_cppc_para, sizeof(*sys_cppc_para)); + + return ret; +} + int xc_get_cpufreq_avgfreq(xc_interface *xch, int cpuid, int *avg_freq) { int ret =3D 0; diff --git a/tools/misc/xenpm.c b/tools/misc/xenpm.c index db658ebadd..2a87f7ae8a 100644 --- a/tools/misc/xenpm.c +++ b/tools/misc/xenpm.c @@ -69,6 +69,7 @@ void show_help(void) " set-max-cstate |'unlimited' [|'unlimited']= \n" " set the C-State limitati= on ( >=3D 0) and\n" " optionally the C-sub-sta= te limitation ( >=3D 0)\n" + " get-cpufreq-cppc [cpuid] list cpu cppc parameter = of CPU or all\n" " set-cpufreq-cppc [cpuid] [balance|performance|powersave= ] *\n" " set Hardware P-State (HW= P) parameters\n" " on CPU or all if= omitted.\n" @@ -812,33 +813,7 @@ static void print_cpufreq_para(int cpuid, struct xc_ge= t_cpufreq_para *p_cpufreq) =20 printf("scaling_driver : %s\n", p_cpufreq->scaling_driver); =20 - if ( hwp ) - { - const xc_cppc_para_t *cppc =3D &p_cpufreq->u.cppc_para; - - printf("cppc variables :\n"); - printf(" hardware limits : lowest [%"PRIu32"] lowest nonlinear= [%"PRIu32"]\n", - cppc->lowest, cppc->lowest_nonlinear); - printf(" : nominal [%"PRIu32"] highest [%"PRIu= 32"]\n", - cppc->nominal, cppc->highest); - printf(" configured limits : min [%"PRIu32"] max [%"PRIu32"] ene= rgy perf [%"PRIu32"]\n", - cppc->minimum, cppc->maximum, cppc->energy_perf); - - if ( cppc->features & XEN_SYSCTL_CPPC_FEAT_ACT_WINDOW ) - { - unsigned int activity_window; - const char *units; - - activity_window =3D calculate_activity_window(cppc, &units); - printf(" : activity_window [%"PRIu32" %s]\= n", - activity_window, units); - } - - printf(" : desired [%"PRIu32"%s]\n", - cppc->desired, - cppc->desired ? "" : " hw autonomous"); - } - else + if ( !hwp ) { if ( p_cpufreq->gov_num ) printf("scaling_avail_gov : %s\n", @@ -981,6 +956,73 @@ void cpufreq_para_func(int argc, char *argv[]) show_cpufreq_para_by_cpuid(xc_handle, cpuid); } =20 +/* print out parameters about cpu cppc */ +static void print_cppc_para(unsigned int cpuid, + const xc_cppc_para_t *cppc) +{ + printf("cpu id : %u\n", cpuid); + printf("cppc variables :\n"); + printf(" hardware limits : lowest [%"PRIu32"] lowest nonlinear [%"= PRIu32"]\n", + cppc->lowest, cppc->lowest_nonlinear); + printf(" : nominal [%"PRIu32"] highest [%"PRIu32"]= \n", + cppc->nominal, cppc->highest); + printf(" configured limits : min [%"PRIu32"] max [%"PRIu32"] energy = perf [%"PRIu32"]\n", + cppc->minimum, cppc->maximum, cppc->energy_perf); + + if ( cppc->features & XEN_SYSCTL_CPPC_FEAT_ACT_WINDOW ) + { + unsigned int activity_window; + const char *units; + + activity_window =3D calculate_activity_window(cppc, &units); + printf(" : activity_window [%"PRIu32" %s]\n", + activity_window, units); + } + + printf(" : desired [%"PRIu32"%s]\n", + cppc->desired, + cppc->desired ? "" : " hw autonomous"); + printf("\n"); +} + +/* show cpu cppc parameters information on CPU cpuid */ +static int show_cppc_para_by_cpuid(xc_interface *xc_handle, unsigned int c= puid) +{ + int ret; + xc_cppc_para_t cppc_para; + + ret =3D xc_get_cppc_para(xc_handle, cpuid, &cppc_para); + if ( ret =3D=3D 0 ) + print_cppc_para(cpuid, &cppc_para); + else if ( errno =3D=3D ENODEV ) + { + ret =3D -ENODEV; + fprintf(stderr, "CPPC is not available!\n"); + } + else + fprintf(stderr, "[CPU%u] failed to get cppc parameter\n", cpuid); + + return ret; +} + +static void cppc_para_func(int argc, char *argv[]) +{ + int cpuid =3D -1; + + if ( argc > 0 ) + parse_cpuid(argv[0], &cpuid); + + if ( cpuid < 0 ) + { + /* show cpu cppc information on all cpus */ + for ( unsigned int i =3D 0; i < max_cpu_nr; i++ ) + if ( show_cppc_para_by_cpuid(xc_handle, i) =3D=3D -ENODEV ) + break; + } + else + show_cppc_para_by_cpuid(xc_handle, cpuid); +} + void scaling_max_freq_func(int argc, char *argv[]) { int cpuid =3D -1, freq =3D -1; @@ -1561,6 +1603,7 @@ struct { { "get-cpufreq-average", cpufreq_func }, { "start", start_gather_func }, { "get-cpufreq-para", cpufreq_para_func }, + { "get-cpufreq-cppc", cppc_para_func }, { "set-cpufreq-cppc", cppc_set_func }, { "set-scaling-maxfreq", scaling_max_freq_func }, { "set-scaling-minfreq", scaling_min_freq_func }, diff --git a/xen/drivers/acpi/pmstat.c b/xen/drivers/acpi/pmstat.c index c09e001ec3..6e9178ade1 100644 --- a/xen/drivers/acpi/pmstat.c +++ b/xen/drivers/acpi/pmstat.c @@ -253,9 +253,7 @@ static int get_cpufreq_para(struct xen_sysctl_pm_op *op) else strlcpy(op->u.get_para.scaling_driver, "Unknown", CPUFREQ_NAME_LEN= ); =20 - if ( hwp_active() ) - ret =3D get_hwp_para(policy->cpu, &op->u.get_para.u.cppc_para); - else + if ( !hwp_active() ) { if ( !(scaling_available_governors =3D xzalloc_array(char, gov_num * CPUFREQ_NAME_LEN)) ) @@ -328,6 +326,16 @@ static int set_cpufreq_gov(struct xen_sysctl_pm_op *op) return __cpufreq_set_policy(old_policy, &new_policy); } =20 +static int get_cpufreq_cppc(struct xen_sysctl_pm_op *op) +{ + int ret =3D -ENODEV; + + if ( hwp_active() ) + ret =3D get_hwp_para(op->cpuid, &op->u.cppc_para); + + return ret; +} + static int set_cpufreq_para(struct xen_sysctl_pm_op *op) { int ret =3D 0; @@ -498,6 +506,10 @@ int do_pm_op(struct xen_sysctl_pm_op *op) break; } =20 + case GET_CPUFREQ_CPPC: + ret =3D get_cpufreq_cppc(op); + break; + case SET_CPUFREQ_CPPC: ret =3D set_cpufreq_cppc(op); break; diff --git a/xen/include/public/sysctl.h b/xen/include/public/sysctl.h index fa431fd983..29872fe508 100644 --- a/xen/include/public/sysctl.h +++ b/xen/include/public/sysctl.h @@ -462,7 +462,6 @@ struct xen_get_cpufreq_para { struct xen_ondemand ondemand; } u; } s; - struct xen_cppc_para cppc_para; } u; =20 int32_t turbo_enabled; @@ -493,6 +492,7 @@ struct xen_sysctl_pm_op { #define SET_CPUFREQ_PARA (CPUFREQ_PARA | 0x03) #define GET_CPUFREQ_AVGFREQ (CPUFREQ_PARA | 0x04) #define SET_CPUFREQ_CPPC (CPUFREQ_PARA | 0x05) + #define GET_CPUFREQ_CPPC (CPUFREQ_PARA | 0x06) =20 /* set/reset scheduler power saving option */ #define XEN_SYSCTL_pm_op_set_sched_opt_smt 0x21 @@ -517,6 +517,7 @@ struct xen_sysctl_pm_op { uint32_t cpuid; union { struct xen_get_cpufreq_para get_para; + struct xen_cppc_para cppc_para; struct xen_set_cpufreq_gov set_gov; struct xen_set_cpufreq_para set_para; struct xen_set_cppc_para set_cppc; --=20 2.34.1 From nobody Fri Oct 31 11:29:11 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=amd.com); dmarc=pass(p=quarantine dis=none) header.from=amd.com ARC-Seal: i=2; a=rsa-sha256; t=1748335854; cv=pass; d=zohomail.com; s=zohoarc; b=Tmj4DUOiATscFy/vxcGjYHxkkdQI7pQICDROHGrOUkkOlaT0jONYz/T+P0G+OGqrtWKQP2Y67yGJZ2rfvLSvUPOxy+uIHhWwOM0pIFXI0pXPcdmb2CRf6woxqmcZz0Nd9/ulh1K0PsvSa6HEc1Ga7uidTeCrA4QXO3y6tiCREVA= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1748335854; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=LB3Mek026fWNFIQDzjs+lsqQvvJxYv/q/FC2PzT8yzo=; b=SZMqEi1Rxzbstz20jDBEjpgbqeQkX1/PNvPDNDojRr/+OdqmukpjLzw3yh+Cw0NlELMeMhof2SZAlHlI535ZQoZDQmLLmCqsqyAuJWXBG2ibeABvIxNY40qX4kJ/jHvJVMS/YkWMKPXchBomcXFCRMjVVPm3tQ5fAeYlx+Eu8n4= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=amd.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1748335854597295.45289479691405; Tue, 27 May 2025 01:50:54 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.997995.1378849 (Exim 4.92) (envelope-from ) id 1uJq1B-00019v-K5; Tue, 27 May 2025 08:50:41 +0000 Received: by outflank-mailman (output) from mailman id 997995.1378849; Tue, 27 May 2025 08:50:41 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uJq1B-00018q-F2; Tue, 27 May 2025 08:50:41 +0000 Received: by outflank-mailman (input) for mailman id 997995; Tue, 27 May 2025 08:50:40 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uJq0K-00031E-IQ for xen-devel@lists.xenproject.org; Tue, 27 May 2025 08:49:48 +0000 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (mail-bn8nam11on2060e.outbound.protection.outlook.com [2a01:111:f403:2414::60e]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 89819fbc-3ad7-11f0-a2fd-13f23c93f187; Tue, 27 May 2025 10:49:45 +0200 (CEST) Received: from SJ0PR13CA0107.namprd13.prod.outlook.com (2603:10b6:a03:2c5::22) by SJ0PR12MB8167.namprd12.prod.outlook.com (2603:10b6:a03:4e6::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.24; Tue, 27 May 2025 08:49:40 +0000 Received: from SJ5PEPF000001F0.namprd05.prod.outlook.com (2603:10b6:a03:2c5:cafe::2c) by SJ0PR13CA0107.outlook.office365.com (2603:10b6:a03:2c5::22) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8769.17 via Frontend Transport; Tue, 27 May 2025 08:49:40 +0000 Received: from SATLEXMB04.amd.com (165.204.84.17) by SJ5PEPF000001F0.mail.protection.outlook.com (10.167.242.68) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8769.18 via Frontend Transport; Tue, 27 May 2025 08:49:39 +0000 Received: from penny-System-Product-Name.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Tue, 27 May 2025 03:49:37 -0500 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 89819fbc-3ad7-11f0-a2fd-13f23c93f187 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=fzDbpWQJVSD4gE9YS0S0YmAsgQ8CzVZAO8+e4G1tkMFNEqJB/89XmUO3ZIc0WpbQZ7b4WMH5hOc4ypy9RcUDUnaJhgep4eTGIx6fooI/s/DYRtIeQWKwAvN235LoMPdu8ZuYD1ePiZH5jMO/W35n951ay49AUK4IP3xMMPRy10Njkw67zV1U7SkJ84g9AKFecsJttTbcvS2aIAvSc26MZqEMO1wD93qBIBXTFEBXmt5+41Z2F2mqkZBljTpsgNhvR9Fndk7lhRvEfsxBC4hVI4hnjLa9Xet6kTGDJHDsqYQKqrU+WzUGPtNdeHw6OYE4+t2DlHLsAOYLGVRtEElwhQ== 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=LB3Mek026fWNFIQDzjs+lsqQvvJxYv/q/FC2PzT8yzo=; b=lG3361jcMkvWKaOkdb2QtqSKiER5QMpapQTai4qbdpz2zlPk18z2TDiFgjp82i9McnaYBJVYuxb+P0neZan3LdUKf6obaZhlOB/JwV8CnZVNMky/VxUHlJB13bR3O2hG7Ar3V0DitR2tKGh1/QI26CMsyxwDVHR/TTub06d+Z/Iv9rxg4LGdHTG3U+zd2XN1zWl1wH/SFi9s6NUQoGg1SKQXJI49KmKeCcvuPY2ujClduFygQ5blzc4FlOVEvEsxMsWtLWBEiMcPO8FtIoMFAgqJvoIgG2ZsZpDdF03u4a9nJVbbML9jeJXGrDiuD+9q6slhzin7YYg8UazJgjZnOw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=LB3Mek026fWNFIQDzjs+lsqQvvJxYv/q/FC2PzT8yzo=; b=qGiyCVmKplWh10jNH06VD4UXfNk8iz7c3yHWiiaKtmhWCVXyI8eCbZ3Pi8FsZam4eavidll487O1cHep76B5bOW8NSPb7X3+kxweWjO4v2Hc/yXTkOAIgLzrjn5Af9EOlrgB7sbLAE7W0EQlwKhiiOTck7va8ckbBzuRuv0NF5Y= X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C From: Penny Zheng To: CC: , Penny Zheng , Anthony PERARD , Jan Beulich Subject: [PATCH v5 15/18] xen/cpufreq: bypass governor-related para for amd-cppc-epp Date: Tue, 27 May 2025 16:48:30 +0800 Message-ID: <20250527084833.338427-16-Penny.Zheng@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250527084833.338427-1-Penny.Zheng@amd.com> References: <20250527084833.338427-1-Penny.Zheng@amd.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ5PEPF000001F0:EE_|SJ0PR12MB8167:EE_ X-MS-Office365-Filtering-Correlation-Id: 58ac84a1-a730-4625-3add-08dd9cfb6ae0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|1800799024|36860700013|376014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?KWrDju3zLvhxBHu6z8VU0Rb3L32I4qpoaWVC3RH8B2TD311+zaz5KZnVzqKX?= =?us-ascii?Q?6TyvBqKOfN42qAnrKzbBaZiTQcqLNUbl98ZggyTFRtiMiAf3h88hSraTEGkZ?= =?us-ascii?Q?kzmPxCbcodd4F5oRD5+So2ZReN5gP4sHysm5V+Pwm0sbnwIpX4evKC0ldP2E?= =?us-ascii?Q?BhqMt0yuggdXKI8MOtufNpp6EVlvKo4cvnTUn8wfGk+UcMkvYovMCUB6w5Go?= =?us-ascii?Q?A8SQ1yV2XAOAd4+17W97LHOwwVM0ZAYvKOZ/1vaIYCOa3dIFCc2NvFWNPKuv?= =?us-ascii?Q?+OoYES5Il9GZD87boPJ2Il6a6GDHh9aZLucP3V7tSVA1U4rtsr9uoLJPQDcH?= =?us-ascii?Q?pj15NcMQ80r1Lckh5zmBXQeNown//nSTPfjPZ6Q5RmNlq8T+376fodOQLcFd?= =?us-ascii?Q?JV8L29T0Z8reKdcmupe0cXEqivYxoeHgU1tWNpKN5VdCgziL9JwEaVDveZ/1?= =?us-ascii?Q?GAiLEdaE72pn64Z/RuDMVZ+LFfOWQSgXHQ7L2flxyovkG6VqU4wkSKC1qCRL?= =?us-ascii?Q?puC5w770raY8uIDIvNzQBa7aMRUO/dugYsrD8VO7vEm+Wr/6lxw29XDrAE0n?= =?us-ascii?Q?XVC1ooaWgIZcQBtZAlACDGL7ZcoDAffiRj1xDMkNRXv3LEmD9JehRE7YKJU8?= =?us-ascii?Q?YDqN/032uYZWVf7WgfDqeEXzuj/pEPbF491cNd+XuXOHmyTirHVrm230MiV5?= =?us-ascii?Q?/QV8ojF4xJ3IK7nca9+wueOg6vPJFIDuAzNby8O3qnqCI4JZTfxj0GrFQWSp?= =?us-ascii?Q?wdnnUzSvd/irPb5aRk979Zfezl+1WoeJ0kI9dm+Y5yRCMxRtbhSdQ8a114DI?= =?us-ascii?Q?iBlb9OJfjr1vr7Sw2k68L991GR3bnPb8UtLu1en6vmJRWzU88N8YisYUKVa9?= =?us-ascii?Q?jNyfamQ3XpSOYygn+d1trAZTUwLsGHjlZUcURTwpZ4yTjaVPq8gG7sIrKwB/?= =?us-ascii?Q?lSVvBNBSGGoIx/NFSE28796i4iYDmdvttrwJfVGtUP/G1TqilJr1mkd2efzT?= =?us-ascii?Q?sBX8tUzFbKCu83n4jGf7yFi7fhjvRkJELVlMC5pvqwexbREt4sTpvY6Beb/r?= =?us-ascii?Q?yur/Rf+YxxTFg+usB1pIE25POVb1RqgWLce1Q6uCDZCLhnFfJqigiw0f9zzU?= =?us-ascii?Q?jn5l9PzSvjEpym3FP/KQ3m3pnuC1WH++RsQgO3wP92wUMOFTyc4DgANHDAfe?= =?us-ascii?Q?MOC5b2LCU/qU98/HueEs1/s1uJBDsXbiw6XSt3UJMHI3fPa5PxWXQBZPlio6?= =?us-ascii?Q?hgzt58kf1ZrPCgPxv6OW74Qm7ifFrLZ8EIh9wEWZi9/mRahu/9IV+uSy2Qxc?= =?us-ascii?Q?y2sQrT86Weko9K5xKH5SVxHyvjj/85hwvgJ9whuP6CGfExa+FCyUy/PpBKUM?= =?us-ascii?Q?RUIuBTf3k22ewibph0rLClnhWdEgXZMQzw2vaxdlaEyr64TTgNNkhadZ+kZz?= =?us-ascii?Q?quf+uFNkabrUnchGpB0i6euwdCfvjypsWWpEbXn3y371SieYSnbBrRdrEJla?= =?us-ascii?Q?x9BBhf/dcEl5PAzkNrjDa649Ni8Map5c2IYe?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(82310400026)(1800799024)(36860700013)(376014);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 May 2025 08:49:39.9018 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 58ac84a1-a730-4625-3add-08dd9cfb6ae0 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: SJ5PEPF000001F0.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR12MB8167 X-ZohoMail-DKIM: pass (identity @amd.com) X-ZM-MESSAGEID: 1748335856018116600 Content-Type: text/plain; charset="utf-8" HWP and amd-cppc-epp are both governor-less driver, so we introduce "hw_auto" flag to together bypass governor-related print in print_cpufreq_para(). In get/set_cpufreq_para(), we are adding "cpufreq_driver.setpolicy =3D=3D N= ULL" check to exclude governor-related para for amd-cppc-epp driver. Signed-off-by: Penny Zheng --- v3 -> v4: - Include validation check fix here --- v4 -> v5: - validation check has beem moved to where XEN_PROCESSOR_PM_CPPC and XEN_CPPC_INIT have been firstly introduced - adding "cpufreq_driver.setpolicy =3D=3D NULL" check to exclude governor-r= elated para for amd-cppc-epp driver in get/set_cpufreq_para() --- tools/misc/xenpm.c | 10 +++++++--- xen/drivers/acpi/pmstat.c | 6 ++++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/tools/misc/xenpm.c b/tools/misc/xenpm.c index 2a87f7ae8a..f173e598ea 100644 --- a/tools/misc/xenpm.c +++ b/tools/misc/xenpm.c @@ -791,9 +791,13 @@ static unsigned int calculate_activity_window(const xc= _cppc_para_t *cppc, /* print out parameters about cpu frequency */ static void print_cpufreq_para(int cpuid, struct xc_get_cpufreq_para *p_cp= ufreq) { - bool hwp =3D strcmp(p_cpufreq->scaling_driver, XEN_HWP_DRIVER_NAME) = =3D=3D 0; + bool hw_auto =3D false; int i; =20 + if ( !strcmp(p_cpufreq->scaling_driver, XEN_HWP_DRIVER_NAME) || + !strcmp(p_cpufreq->scaling_driver, XEN_AMD_CPPC_EPP_DRIVER_NAME) ) + hw_auto =3D true; + printf("cpu id : %d\n", cpuid); =20 printf("affected_cpus :"); @@ -801,7 +805,7 @@ static void print_cpufreq_para(int cpuid, struct xc_get= _cpufreq_para *p_cpufreq) printf(" %d", p_cpufreq->affected_cpus[i]); printf("\n"); =20 - if ( hwp ) + if ( hw_auto ) printf("cpuinfo frequency : base [%"PRIu32"] max [%"PRIu32"]\n", p_cpufreq->cpuinfo_min_freq, p_cpufreq->cpuinfo_max_freq); @@ -813,7 +817,7 @@ static void print_cpufreq_para(int cpuid, struct xc_get= _cpufreq_para *p_cpufreq) =20 printf("scaling_driver : %s\n", p_cpufreq->scaling_driver); =20 - if ( !hwp ) + if ( !hw_auto ) { if ( p_cpufreq->gov_num ) printf("scaling_avail_gov : %s\n", diff --git a/xen/drivers/acpi/pmstat.c b/xen/drivers/acpi/pmstat.c index 6e9178ade1..e5f375921a 100644 --- a/xen/drivers/acpi/pmstat.c +++ b/xen/drivers/acpi/pmstat.c @@ -253,7 +253,8 @@ static int get_cpufreq_para(struct xen_sysctl_pm_op *op) else strlcpy(op->u.get_para.scaling_driver, "Unknown", CPUFREQ_NAME_LEN= ); =20 - if ( !hwp_active() ) + /* bypass hwp and amd-cppc-epp driver */ + if ( !hwp_active() && cpufreq_driver.setpolicy =3D=3D NULL ) { if ( !(scaling_available_governors =3D xzalloc_array(char, gov_num * CPUFREQ_NAME_LEN)) ) @@ -346,7 +347,8 @@ static int set_cpufreq_para(struct xen_sysctl_pm_op *op) if ( !policy || !policy->governor ) return -EINVAL; =20 - if ( hwp_active() ) + /* bypass hwp and amd-cppc-epp driver */ + if ( hwp_active() || cpufreq_driver.setpolicy =3D=3D NULL ) return -EOPNOTSUPP; =20 switch(op->u.set_para.ctrl_type) --=20 2.34.1 From nobody Fri Oct 31 11:29:11 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=amd.com); dmarc=pass(p=quarantine dis=none) header.from=amd.com ARC-Seal: i=2; a=rsa-sha256; t=1748335862; cv=pass; d=zohomail.com; s=zohoarc; b=Irxxeowj381dctsCoNjHZH9cANn/TEk0X6w16jHqR1pnUXXPY912Hf3+F4GCnesKPj+Ac1GYr0yww7hqXFRq1hfEOfhOhSymo8Xi+gLkOZkCDTY2l34A5+asttSWKr8ESsl/d1fsBcl3llb4SsmNew33IkVNTuXokd/OG/LMFl4= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1748335862; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=udVnsou+9c+YNjZiXHLgK6AMVgKetWIyil6Opn22eBs=; b=YZYpZvVVOf/RcSU+6fmPv5Qdy2YTSEgStfSmzoa5rZoQLOjL3zqD+734lAVjkL5r/Im5jkDcFtF944EeGA+QZaj+BFUwyQcF7N6L+GYIUMuYAXIQFInNlU+lCabC5aNVojGHZ4EvJB1CUcDMi5p7Z5K7tHG149rBB42sBYfON2I= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=amd.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1748335862336930.1879488235127; Tue, 27 May 2025 01:51:02 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.998004.1378878 (Exim 4.92) (envelope-from ) id 1uJq1E-0001rN-FU; Tue, 27 May 2025 08:50:44 +0000 Received: by outflank-mailman (output) from mailman id 998004.1378878; Tue, 27 May 2025 08:50:44 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uJq1E-0001oo-31; Tue, 27 May 2025 08:50:44 +0000 Received: by outflank-mailman (input) for mailman id 998004; Tue, 27 May 2025 08:50:42 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uJq0L-0002ks-6j for xen-devel@lists.xenproject.org; Tue, 27 May 2025 08:49:49 +0000 Received: from NAM02-BN1-obe.outbound.protection.outlook.com (mail-bn1nam02on2060d.outbound.protection.outlook.com [2a01:111:f403:2407::60d]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 8888d0f4-3ad7-11f0-b894-0df219b8e170; Tue, 27 May 2025 10:49:44 +0200 (CEST) Received: from SJ2PR07CA0011.namprd07.prod.outlook.com (2603:10b6:a03:505::20) by IA0PR12MB7529.namprd12.prod.outlook.com (2603:10b6:208:431::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.22; Tue, 27 May 2025 08:49:42 +0000 Received: from SJ5PEPF000001F1.namprd05.prod.outlook.com (2603:10b6:a03:505:cafe::c5) by SJ2PR07CA0011.outlook.office365.com (2603:10b6:a03:505::20) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8769.21 via Frontend Transport; Tue, 27 May 2025 08:49:41 +0000 Received: from SATLEXMB04.amd.com (165.204.84.17) by SJ5PEPF000001F1.mail.protection.outlook.com (10.167.242.69) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8769.18 via Frontend Transport; Tue, 27 May 2025 08:49:41 +0000 Received: from penny-System-Product-Name.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Tue, 27 May 2025 03:49:39 -0500 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 8888d0f4-3ad7-11f0-b894-0df219b8e170 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=CxkEoPzguB/T28ljyQp+pCHyZEIqZDL6Hb+Ynn+WE6bfMbpeWi3RkzAAPW/ljD74Yu+DH1Wf1C74Q69aGrD2ieKQ95zepCpqKo6QBQNWlcHpvQxLoF+aYpfLevv/wUPuJ3WSTYH71SWlbY/gV0SmdGnwybEdfXs3en009ny0Dch0oArIHNqQhBGqZ1l7OYxce/JgMMCJwdeJ2EVVsIgcsaDJeOmh2PT1sHQgHxbAMzsi+kRrTowdTbgDfdCWx0SvDc/G84M+v8RgL3goYWBSipaxn47EHVANi+qx1iAggjMu4Z6nfoWmAgOi6DodMFmltS4APSPoG7XPRqyC8KmNnA== 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=udVnsou+9c+YNjZiXHLgK6AMVgKetWIyil6Opn22eBs=; b=w58F/lrGu7Ji22vueQwhYyi4XKoVOyiuEWztjoKXDFlCz9iFJbCORM9YQ8S3nNFfAz6w7aUVUmTPQiqR738VoGzjG7UDyZtgaH9OuqOAptUaxD8LYYu4Yy47eBR9jMI+A7/+IzP+3a35W/ks1suwFT61y/PeVJR/Vdb6boiVxTEdChnF6PTSPzfagtwHPyWpk4dyPcFnXsetz3Np6Aidpb9ElfXNbavqbKqLnKSC2qhNmMJjpM60db+KyhK1ob6vl6g7Xum+JWnBeJxuOrvNXbA2YSQ2o4AYlKpjPgPilCdBM25pWDr/zpDRLafZMRxT8eMFVWSmiYrgSz447kb/ww== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=udVnsou+9c+YNjZiXHLgK6AMVgKetWIyil6Opn22eBs=; b=mGpedRMGv1hb7fEFm/mH9RdsrwADqG/XuiqF5dZ5A630+gOs+ra0KYHsMBKZDps66JFsB4WwPnI++ZHGOBqJo3pcVbYpoZEciYj6/8vYfGtvPcYC99LqFytOZxB+eH6ZSgJXWe+YHy9EpgWKtQTfifN6SNTq6EwYBH3FZPc/vWY= X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C From: Penny Zheng To: CC: , Penny Zheng , Anthony PERARD , Juergen Gross Subject: [PATCH v5 16/18] tools: drop "has_num" condition check for cppc mode Date: Tue, 27 May 2025 16:48:31 +0800 Message-ID: <20250527084833.338427-17-Penny.Zheng@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250527084833.338427-1-Penny.Zheng@amd.com> References: <20250527084833.338427-1-Penny.Zheng@amd.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ5PEPF000001F1:EE_|IA0PR12MB7529:EE_ X-MS-Office365-Filtering-Correlation-Id: 9fb66d1a-e742-4b2c-49fc-08dd9cfb6bf8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|36860700013|376014|82310400026; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?jQqiZc/nDcgZbWmQeA/kE+kCLsdPZ+qHNdLCdtVxuSuMDsiI5bsh7iO7kKzU?= =?us-ascii?Q?caK50ZzqsUjzpphPnaFQLtwwVSWrdHUJASBFG6ynfAj2J4mNViH7OuYwGW9G?= =?us-ascii?Q?/xlZ/ALJ8ir/dFSeQg7ecmBKKNPujT+rq3T0S8F2TbaZWl50xwMchqT98FYF?= =?us-ascii?Q?RrN97dBU/AqAfFW272ASsbmjT06ewxxnu5nfauL2FUbVS9ntSGzECWVOrbQc?= =?us-ascii?Q?yu1s23PN4fMTZZX5+FKKD9n4xRn2SKWPV6/B01QoqYZd0/U/cM2TPCoLOKdg?= =?us-ascii?Q?ZKbvCcxfEblSY2P+nkxiBrVA7SDetiZBt4v5pLO4gV3zmdkjFgUnXTr5lvsO?= =?us-ascii?Q?iQeJjhZqOp7wGNSYjdW/is+rger+fdxHuU2w6vPJIYllmHLP8NQuEQUoPSTt?= =?us-ascii?Q?afZwr+LbZ/bcDZR3O/OrNYGquU0oMmBUzWp6bWvA0a566nG21JoGssdRvwGm?= =?us-ascii?Q?IbigfrseONoEf35LfAz33H2BP4yvGBqu9C00XfbD2+Fsd+OjgB8gn8AqdLME?= =?us-ascii?Q?YthEiKEv4/2vJz0oUfKOh5b+UAU9ftqifsWPxwD9n0A8JDnfZ0ksMt50LvUQ?= =?us-ascii?Q?tKt4H+IlAiHLDyQGYTbYBOBxUi8KdgYfSd6tVckTTA+EXZadlsiLj+3ahhhX?= =?us-ascii?Q?yXmFq/OHTJFhE/wSraNMfRqm37waK2TgikMii9oQ+Q6PPwpEMNZL/poyjwqm?= =?us-ascii?Q?WdRxnCxmIxH+y9i8yux+k4L1vEy4xFq6r+BOrMpPVLUbWx/HGCFGJQMaOTP5?= =?us-ascii?Q?oOB0dIaQbOxxtPEmSZQCVDs5HE4HncXgE3vX5quMTTtABfOn24hluy3Jhri9?= =?us-ascii?Q?X9FyrOG5NKpWwnmLnzkDRrnvFJ6kji4fJMDPWYyCvHQOX1Trp5YQBnoIQ3Hk?= =?us-ascii?Q?rmf19EAQSIG1OlFh2XCaTeQxn02lXbcEn2sxUAPOu2Y0MA8z/hUhPEEXUQDN?= =?us-ascii?Q?LH0xU+fBuxBV3Ts7/gqB1o28v5wW9426JGG0amv8TfFpkxamPyFZppGgJ7zC?= =?us-ascii?Q?Xs8Qj150KtndkU4+Og319kN8NCf9kqsqKdlebrLaT20KZ1ce+qrcxxHbw2RV?= =?us-ascii?Q?BDjpaFnOGrGcMjFsfKnBN5B3SI2MTdBB64CMWay2IHmJBhiPmTIMdWxzouXZ?= =?us-ascii?Q?nTtsni3j4k83g2MqzE53OeKPIUAmRJNtWJ7ilKYMWCFcNc6l1d2Z+9GbEe1t?= =?us-ascii?Q?O3efLIM2U9nXjnpsmPqkSpxaDJm0Z5fs8GgLCd4sh+36V4qa9S2n50d5GXis?= =?us-ascii?Q?cIyb/YUOlYhLO/zkD42gGA5ats2KuuVW4fRd3r37SaaZ9dSRY4nw2lM/XSnR?= =?us-ascii?Q?WhUo0ph9OsxQ79hmCx/FYBkUoRdfW8hZvGxHvQhwikqLCr5BrysxNpCSjBwx?= =?us-ascii?Q?exFnbrgJsi8mR91B+eAg08YFzO6EOWb2vfJ0axA4rDRILV024VN97iUKF7pH?= =?us-ascii?Q?KtqjVXEOyKA5/3Tyb2EIrZCxEEFM917wDxGzc7Vx4hvF/XBbssQpjJ97EWCP?= =?us-ascii?Q?7ThRtQzvcSCTBanWUotzYGnqHLn3nWjrexEV?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(1800799024)(36860700013)(376014)(82310400026);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 May 2025 08:49:41.7369 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9fb66d1a-e742-4b2c-49fc-08dd9cfb6bf8 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: SJ5PEPF000001F1.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA0PR12MB7529 X-ZohoMail-DKIM: pass (identity @amd.com) X-ZM-MESSAGEID: 1748335864306116600 Content-Type: text/plain; charset="utf-8" In `xenpm get-cpufreq-para `, ->freq_num and ->cpu_num checking are tied together via variable "has_num", while ->freq_num only has non-zero va= lue when cpufreq driver in legacy P-states mode. So we drop the "has_num" condition check, and mirror the ->gov_num check for both ->freq_num and ->cpu_num in xc_get_cpufreq_para(). Signed-off-by: Penny Zheng --- v3 -> v4: - drop the "has_num" condition check --- v4 -> v5: - refactor title and commit - make all three pieces (xc_hypercall_bounce_pre()) be as similar as possib= le --- tools/libs/ctrl/xc_pm.c | 43 +++++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/tools/libs/ctrl/xc_pm.c b/tools/libs/ctrl/xc_pm.c index 3c9e272aee..cdc072e757 100644 --- a/tools/libs/ctrl/xc_pm.c +++ b/tools/libs/ctrl/xc_pm.c @@ -212,34 +212,41 @@ int xc_get_cpufreq_para(xc_interface *xch, int cpuid, DECLARE_NAMED_HYPERCALL_BOUNCE(scaling_available_governors, user_para->scaling_available_governors, user_para->gov_num * CPUFREQ_NAME_LEN * sizeof(char), XC_HYPERCALL_BUF= FER_BOUNCE_BOTH); - bool has_num =3D user_para->cpu_num && user_para->freq_num; =20 - if ( has_num ) + if ( (user_para->cpu_num && !user_para->affected_cpus) || + (user_para->freq_num && !user_para->scaling_available_frequencies= ) || + (user_para->gov_num && !user_para->scaling_available_governors) ) + { + errno =3D EINVAL; + return -1; + } + if ( user_para->cpu_num ) { - if ( (!user_para->affected_cpus) || - (!user_para->scaling_available_frequencies) || - (user_para->gov_num && !user_para->scaling_available_governor= s) ) - { - errno =3D EINVAL; - return -1; - } ret =3D xc_hypercall_bounce_pre(xch, affected_cpus); if ( ret ) return ret; + } + if ( user_para->freq_num ) + { ret =3D xc_hypercall_bounce_pre(xch, scaling_available_frequencies= ); if ( ret ) goto unlock_2; - if ( user_para->gov_num ) - ret =3D xc_hypercall_bounce_pre(xch, scaling_available_governo= rs); + } + if ( user_para->gov_num ) + { + ret =3D xc_hypercall_bounce_pre(xch, scaling_available_governors); if ( ret ) goto unlock_3; + } =20 + if ( user_para->cpu_num ) set_xen_guest_handle(sys_para->affected_cpus, affected_cpus); - set_xen_guest_handle(sys_para->scaling_available_frequencies, scal= ing_available_frequencies); - if ( user_para->gov_num ) - set_xen_guest_handle(sys_para->scaling_available_governors, - scaling_available_governors); - } + if ( user_para->freq_num ) + set_xen_guest_handle(sys_para->scaling_available_frequencies, + scaling_available_frequencies); + if ( user_para->gov_num ) + set_xen_guest_handle(sys_para->scaling_available_governors, + scaling_available_governors); =20 sysctl.cmd =3D XEN_SYSCTL_pm_op; sysctl.u.pm_op.cmd =3D GET_CPUFREQ_PARA; @@ -258,9 +265,7 @@ int xc_get_cpufreq_para(xc_interface *xch, int cpuid, user_para->gov_num =3D sys_para->gov_num; } =20 - if ( has_num ) - goto unlock_4; - return ret; + goto unlock_4; } else { --=20 2.34.1 From nobody Fri Oct 31 11:29:11 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=amd.com); dmarc=pass(p=quarantine dis=none) header.from=amd.com ARC-Seal: i=2; a=rsa-sha256; t=1748335851; cv=pass; d=zohomail.com; s=zohoarc; b=SFfRW8XfHAnJEJRW5df8SVp2fjxpiq10COci7x6tmwBPfrDSnX0w7S3RK7DTX8FxzyCFapUSYPSCAu3OFC2RnVekSY7OLDxdMCFu8sUZWoEQwt0RahKD08UQn7YuSY4cALsDlTlYRSKf6Cuu5DPd7r760gKiYWg0UzAa3lu6YIw= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1748335851; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=L3Tn87xWwjj3VP5ECGhcDNI0MAhylxGbzcaSKHPCXC4=; b=SZtGahivUWILskFumHWHRyXDw2yYva9jMfbr9jx6Mao8s73j3FIqunwXaIANYjiHt9VydFhULAN/hFdN9XjGlXYBXIxLP2SUEYTyarFfmalCHYQla4l5TJGjo1cH8qSLisw6pxu22Ln0byoTzLyWBpunkpNJ2qXHrCWH3GheM2A= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=amd.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1748335850821118.42648614964071; Tue, 27 May 2025 01:50:50 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.997984.1378833 (Exim 4.92) (envelope-from ) id 1uJq17-0000k5-RO; Tue, 27 May 2025 08:50:37 +0000 Received: by outflank-mailman (output) from mailman id 997984.1378833; Tue, 27 May 2025 08:50:37 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uJq17-0000ju-Oe; Tue, 27 May 2025 08:50:37 +0000 Received: by outflank-mailman (input) for mailman id 997984; Tue, 27 May 2025 08:50:36 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uJq0L-0002ks-Da for xen-devel@lists.xenproject.org; Tue, 27 May 2025 08:49:49 +0000 Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on20606.outbound.protection.outlook.com [2a01:111:f403:2416::606]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 89004f6a-3ad7-11f0-b894-0df219b8e170; Tue, 27 May 2025 10:49:44 +0200 (CEST) Received: from SJ2PR07CA0015.namprd07.prod.outlook.com (2603:10b6:a03:505::28) by DS5PPF78FC67EBA.namprd12.prod.outlook.com (2603:10b6:f:fc00::655) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8678.33; Tue, 27 May 2025 08:49:43 +0000 Received: from SJ5PEPF000001F1.namprd05.prod.outlook.com (2603:10b6:a03:505:cafe::e9) by SJ2PR07CA0015.outlook.office365.com (2603:10b6:a03:505::28) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8769.19 via Frontend Transport; Tue, 27 May 2025 08:49:43 +0000 Received: from SATLEXMB04.amd.com (165.204.84.17) by SJ5PEPF000001F1.mail.protection.outlook.com (10.167.242.69) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8769.18 via Frontend Transport; Tue, 27 May 2025 08:49:42 +0000 Received: from penny-System-Product-Name.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Tue, 27 May 2025 03:49:41 -0500 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 89004f6a-3ad7-11f0-b894-0df219b8e170 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=QdBXsxIG/ci/tcVUBdtGlKDzQXfQ0Nk902E9Z9iuRTQ6mfIXzk4iJ2MaB9ivPUmw4UtCRjj7TKEj8ZMbTQrR5zOvPcfqc21oUk9rfROEpD/sh7jTOgW+dH9ht2BgQW7RMVIaEWFonkM6e70Sdbud8485/PcGBJCb1Z2wYDT/ffkrvKnGOghcLivaRDBPwgf3VeoXkGM9jKjHjoVp7+365GkZOqWXU5yszVtKycQMT1FrAso8mbzpPILLSW8NUx/9kxt/bFL3cV/XFBy4xOmpgJX9QcS5yLHOs/e0lbll9MQutGUir0eUyZQmOxUmRYOh8aMzB1PNx20NId0pzz8hAQ== 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=L3Tn87xWwjj3VP5ECGhcDNI0MAhylxGbzcaSKHPCXC4=; b=AxTMKWgFoLFEDzYz+REysTjcdYUoahqHgcmLOU9L7KlyhGopmHyX1F7oW2EjIBIErNzUk9/E8N0zZcivoRHPlozVwt44SCS13RD+1xf3e4lTaDPpTlxaFTGHl3uXiQHjDEwbSOuWzdbjrV4SJbuSR5nQ3aexijM+vwKBjTnfeMUlLivLEXXYzM8ofB8HMg2gbgoEFpt4t6DIRKtFowSqtGK2KEV3lHlSa0HC1xADlnnVSaXbW22kflbWH/DrbnRhoTl3ISPRe5kqS8aL8+VOvVx5UH4KZhwODQ6K/oCZQpAkwfliAowXsBGFqZIUR8u0iobJZJqzSC4GrNj5mjfMfA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=L3Tn87xWwjj3VP5ECGhcDNI0MAhylxGbzcaSKHPCXC4=; b=0DkIXM1MkreuXk1OjEXtElaRcls6k8D7uKfM2N4YhRWCAih7RnpsRDriIfdz+1iZz9BejeEZILNjjPQ2l1Mv9e3fqprHoESbTgnkppkmRsXU0LS2Ph5kaxe5l6MDIi/Dde4Vb9jJIgJbRZ72l/XjoLVKDcMcXngtuCPUnKeXbFA= X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C From: Penny Zheng To: CC: , Penny Zheng , Anthony PERARD Subject: [PATCH v5 17/18] tools: optimize cpufreq average freq print Date: Tue, 27 May 2025 16:48:32 +0800 Message-ID: <20250527084833.338427-18-Penny.Zheng@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250527084833.338427-1-Penny.Zheng@amd.com> References: <20250527084833.338427-1-Penny.Zheng@amd.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ5PEPF000001F1:EE_|DS5PPF78FC67EBA:EE_ X-MS-Office365-Filtering-Correlation-Id: 2daf20f8-ab1a-4be8-b8d6-08dd9cfb6caf X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|376014|1800799024|82310400026; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?ZW6qtrRa5F1TVvmHcRjpCB1LV5hy+A/PYfTgi7NoUMKyf7UDRDAc98CfXHMp?= =?us-ascii?Q?d8NO1asPptPNr53VxEX5QmBCzxCfTCepfchGR/+ksQBLRDVXrOLp2WzTGVZ1?= =?us-ascii?Q?youdddWJSam+NuO8N2Oqs4xtnWwhlpPC8q+l/CTHFaP0puAOAAKO6ujT3GlI?= =?us-ascii?Q?fN8ag4bv2fWUPsoQBFaDUFBnuq7CPxMQoaNqvPYdwy8WPEPk3TUwtP94A+4B?= =?us-ascii?Q?18NT+IP1KSCVZXuNBXwkeHtnh2sLL/iFQY5f5SMFp/MmyaRya2GBptQhmpnR?= =?us-ascii?Q?OpNa8iFHTDp+nglu9RIch4wB96Quhd2klIQiXoNeIPSCjM7Pd5HB01y1fsQ0?= =?us-ascii?Q?5BwUHprcA85KYlWNH53wiFwKrLfAGLk4ZpHpcNsB9XHfMzer+lELeA1wWK9P?= =?us-ascii?Q?NOqf5jFN/G8+mf0RNgyjnF9ImTgzfQucOa3T8REnWTld+uAeCPv0fTDL3cYv?= =?us-ascii?Q?1o4rA8uAc69cBirvJ5Oy+LZm+IeDNZQenLrb88WW0MIHfOIuvdphqaxFr/Rc?= =?us-ascii?Q?2NOw6BAgdJOAoZ4yaw/bhdILL7BP3UrKSxRGJHk6La+3QcFo1l6tUitZzPw/?= =?us-ascii?Q?1u0Aofu7D9NAUshO+vS3sfhN4SvwzUvIQ2dL7XWkKVhtkj59+Oa8b7QxfVy9?= =?us-ascii?Q?7Y9RuFOpiRH/sNu40JeMp2rKy/vqEJ7cNfJWyEN4gsYZfVH/THQwwX4dP0fM?= =?us-ascii?Q?rXYGVjxbgT86dl76RI5msJ1V+KD2mRIkZrbhqR5/GJAeodfI/RQuYxDDUGu0?= =?us-ascii?Q?fVLOMjP1wFPyQEMTOyZVYKQa/7ye6ReAlM+6PwBvhlhPnpXLIcIrscsSShSl?= =?us-ascii?Q?AcE32ix4g5HAcvONcswWXXp2fiSEdtuAxefkAgQuKf7uWcHOlbfQ48KqLaXc?= =?us-ascii?Q?wMDU5/93tZ185dJF5ULMpHIku5MfL/HeJObGxXO+eqNj64DapzxzXKbbcMjF?= =?us-ascii?Q?gMLc9qZyU6MFemRwwnRQzzuAYvIgyoybkNYcUosiXzQth8J55ECrYeyRbzYR?= =?us-ascii?Q?s7nMo+9NjtdXRA4biICzAKh5EhZ0jVpgmJJrwWU/b5bw+fSViXEv4r12Vp+7?= =?us-ascii?Q?8yMpFnXX3IMqm39aKPAVp1I+aRj2N9I0JBsxxOFxOuUMfLadwVi42H1p7FMc?= =?us-ascii?Q?IRDAP1kC24Umog5xbj4gt8yrGd77I+Jj4xayUURrkxWwkheBA7S8ncmgp1/o?= =?us-ascii?Q?EezpZ9gRPe3bgXv8pILqmkw6EygX4XMmozjKNLojCGixNp2LNjVBxFMJ+/r0?= =?us-ascii?Q?3ERnbSxM+Fwn7e1rXgZn1Hbmxt0qnnLecNZRkBAUaOhZBUXD+0qmMn1H2am+?= =?us-ascii?Q?WSBjE1hN5UZL26yTG0kaXAcnGNX3xLgCqV+Ti6Jv7+JkZN2VkKGLsG8Lp8iV?= =?us-ascii?Q?mDflazH65B1t1XCAjqirklJpXHmQeKdLq+EOUksiOKyvjCJjPs+3gqhVnB3A?= =?us-ascii?Q?CtnFabfc4MtiLQJP3JzcMUrGaZEBOLWL4Uno9azVaW7i7syVDAfeKVxZ4VcV?= =?us-ascii?Q?xpmm5mcbZ/uWXZ5dg7Row9qHBsXLTJoTJqra?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(36860700013)(376014)(1800799024)(82310400026);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 May 2025 08:49:42.9399 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 2daf20f8-ab1a-4be8-b8d6-08dd9cfb6caf X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: SJ5PEPF000001F1.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS5PPF78FC67EBA X-ZohoMail-DKIM: pass (identity @amd.com) X-ZM-MESSAGEID: 1748335851784116600 Content-Type: text/plain; charset="utf-8" Unlike Cx/Px states, for which we need an extra loop to summerize residency= ( sum_cx[]/sum_px[]), we could call get_avgfreq_by_cpuid() right before print= ing. Also, with introduction of CPPC mode, average frequency print shall not depend on the existence of legacy P-states, so we remove "px_cap" dependancy check. Fixes: add6160d7 (Add cpufreq actual average freq information to xenpm tool= s) Signed-off-by: Penny Zheng --- v3 -> v4: - new commit --- v4 -> v5: - refactor title and commit message - call get_avgfreq_by_cpuid() right before printing --- tools/misc/xenpm.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/tools/misc/xenpm.c b/tools/misc/xenpm.c index f173e598ea..2864506da4 100644 --- a/tools/misc/xenpm.c +++ b/tools/misc/xenpm.c @@ -497,9 +497,6 @@ static void signal_int_handler(int signo) pxstat_start[i].pt[j].residency; } =20 - for ( i =3D 0; i < max_cpu_nr; i++ ) - get_avgfreq_by_cpuid(xc_handle, i, &avgfreq[i]); - printf("Elapsed time (ms): %"PRIu64"\n", (usec_end - usec_start) / 100= 0UL); for ( i =3D 0; i < max_cpu_nr; i++ ) { @@ -540,7 +537,8 @@ static void signal_int_handler(int signo) res / 1000000UL, 100UL * res / (double)sum_px[i]); } } - if ( px_cap && avgfreq[i] ) + get_avgfreq_by_cpuid(xc_handle, i, &avgfreq[i]); + if ( avgfreq[i] ) printf(" Avg freq\t%d\tKHz\n", avgfreq[i]); } =20 --=20 2.34.1 From nobody Fri Oct 31 11:29:11 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=amd.com); dmarc=pass(p=quarantine dis=none) header.from=amd.com ARC-Seal: i=2; a=rsa-sha256; t=1748335858; cv=pass; d=zohomail.com; s=zohoarc; b=RbprF5T7NkzOBiPqLb4YdF8Aa9uDiFltVsFBspobca3rGt12nXsOjMHGO0zEbzrRNlWdon3xmo96YBw3eekYTPAfQ2Nb9zJY9jqgPjfY2tZhlzl30fKrGBtsDraKAmtGyzxJJosiRVfzPJqHkYbCPTUANk8+1sZWZXwmo7EA2TU= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1748335858; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=qDagGZO2RtNskUq1QiXQkXAONydlZKUYORV/JjISAuM=; b=dzpy+JrQlOdg4YIRYBwuEl0RQ7f3v4qYvcGEi7XG7WvY5yZ5AVosfpGdvUbsIoHb6gQriIXCFpz0qAdNpXSn7/JWnnoLTshU/eFRRtBPJnhmnNy6PdHIzagfT1yrKdp45MpZxBq/gfVpNtoXWljOSqZ9Vub+3VUAt0cACfyDTOE= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=amd.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1748335858225268.4707432657376; Tue, 27 May 2025 01:50:58 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.997997.1378856 (Exim 4.92) (envelope-from ) id 1uJq1C-0001Jp-9d; Tue, 27 May 2025 08:50:42 +0000 Received: by outflank-mailman (output) from mailman id 997997.1378856; Tue, 27 May 2025 08:50:42 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uJq1C-0001I1-0q; Tue, 27 May 2025 08:50:42 +0000 Received: by outflank-mailman (input) for mailman id 997997; Tue, 27 May 2025 08:50:40 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uJq0S-00031E-Jl for xen-devel@lists.xenproject.org; Tue, 27 May 2025 08:49:56 +0000 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10on20605.outbound.protection.outlook.com [2a01:111:f403:2413::605]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 8ca97f44-3ad7-11f0-a2fd-13f23c93f187; Tue, 27 May 2025 10:49:51 +0200 (CEST) Received: from SJ0PR13CA0091.namprd13.prod.outlook.com (2603:10b6:a03:2c5::6) by LV2PR12MB5895.namprd12.prod.outlook.com (2603:10b6:408:173::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.26; Tue, 27 May 2025 08:49:46 +0000 Received: from SJ5PEPF000001F0.namprd05.prod.outlook.com (2603:10b6:a03:2c5:cafe::ff) by SJ0PR13CA0091.outlook.office365.com (2603:10b6:a03:2c5::6) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8769.15 via Frontend Transport; Tue, 27 May 2025 08:49:46 +0000 Received: from SATLEXMB04.amd.com (165.204.84.17) by SJ5PEPF000001F0.mail.protection.outlook.com (10.167.242.68) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8769.18 via Frontend Transport; Tue, 27 May 2025 08:49:46 +0000 Received: from penny-System-Product-Name.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Tue, 27 May 2025 03:49:42 -0500 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 8ca97f44-3ad7-11f0-a2fd-13f23c93f187 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=TuZcWS5V+RmzS9kND5IYgH0rJyLGTHgREl4FY+qUXgHREHBCJZ9+wiRKTeu6flOv6hRONa37VxAurf2ao6S2wolbkBLFIBWfi5qvPhXSZNqufnqF5XViW5EYFL7Qsb6PpY3s6Fpzb1xVNGate5c91MA3lW561yLMmzfIdTlMoBoU0cuVOAvdJjlLB6MYxBBi6NjxD4N/P9RTQWmoFdvhRfu0bqMUZFVnY8OPF3En2jT+OaF07owiHaes2Hk5wzsN+keIBpTn1VvABV5xlnrtRMWw3IFvq47l9EozhY0z9KwNA3NCoFlCuslsoJv6/fswjvBzwFSpP2K4/RDmok7ZSA== 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=qDagGZO2RtNskUq1QiXQkXAONydlZKUYORV/JjISAuM=; b=kd2ePY798t00IyIm96Hv/EuN7xhKPxYpGC+aB6fXA+xKLHAqXjPQPhwO8qYDmM8F3UxxWdFyEAJpurznFtisY/RVK+KuBsmrMRylEnMJxXz/fihO48RDh7j6TFb8yf9V0B9w4iWtBMpwG9E3rQKyQtF4YVFk6VoBb5b2TX9Q85vyAYqSF64Dhqb0RVvWF3KaDCvjNO+2fAMpOXq39jAy4/w78Pv6gfdyzJ7lso0wXRHc/3SdS4qsmUc4X7uIACoxhWL7/JLT4Gh54gYuL0yNcUsowWhqLba6kJFtmcEAYm5jIkxY0G4QzHDCL32czb/D4Tbhn7+IWFcHrL5IMsIljg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=qDagGZO2RtNskUq1QiXQkXAONydlZKUYORV/JjISAuM=; b=SBRF7aex/lNFS+5xYBbpQvTrd7oF8M2SSciVyobOCt7kKq+sVq4FjAIVUyZRqdeKkPpisAwDfeAWt1nOcYHP2/jirX9aVMBZFeZqk9X/8fYGMQUjlelBqQiyjs0GFoBdsXzGmP7MAdvEdvhAfkcRRAY0OhEkVaKzcQSMLTETlOQ= X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C From: Penny Zheng To: CC: , Penny Zheng , Anthony PERARD , Andrew Cooper , Michal Orzel , Jan Beulich , "Julien Grall" , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Stefano Stabellini Subject: [PATCH v5 18/18] xen/cpufreq: Adapt SET/GET_CPUFREQ_CPPC xen_sysctl_pm_op for amd-cppc driver Date: Tue, 27 May 2025 16:48:33 +0800 Message-ID: <20250527084833.338427-19-Penny.Zheng@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250527084833.338427-1-Penny.Zheng@amd.com> References: <20250527084833.338427-1-Penny.Zheng@amd.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ5PEPF000001F0:EE_|LV2PR12MB5895:EE_ X-MS-Office365-Filtering-Correlation-Id: 4a664462-af30-4823-8602-08dd9cfb6e8d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|82310400026|36860700013|376014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?F7hmuFWIrW43PPJFzv/OGojC1AP6jdziNA1p8pxmF/DulCcLhWcVbgxjWMtW?= =?us-ascii?Q?HNf24N+7MEUkYYx2Lzy4EsZCvZTqd6kOBO4gDBvtgeZ6TroE9uIxHZP7z2RP?= =?us-ascii?Q?CABb1c4XC7UJA2nJBt5sATMbertA4N7zptPJjEXhiB7Kxd+0mL4iVadHl/lv?= =?us-ascii?Q?afJfK5jtRVCYhQbR1AmhsixP4FNiBGb/4HqprfbWfEkcNXVpHoCrQgfNOAi4?= =?us-ascii?Q?HRm55cz/TCTWtJ/R/HW9e8PY+O0X1ZFi+j7ykV8HGdzbVp8X3cPORvDUElPb?= =?us-ascii?Q?SuhBYYRFWuBFdc5YYqhk18bYpLFT3q6QvxX3MQmK6SioQeXEHV92n+feKk9q?= =?us-ascii?Q?Ab+N47ZXJ8IKGyEmMQbE2GK61A7SqjqJBE7Gjv+eRGjbgJnkytoGY5b3lSTa?= =?us-ascii?Q?+k0xEUqt6WRg8BQbm43hsXzNVikr1MzFJEMkdj0Y4NL4B2ZNLhSiNaZ6PV3M?= =?us-ascii?Q?HisAMhr7JgNYasM8GE0cnFQJXlc26HDtCk+ku5giHX0OhKZr5Ao0RW9CNAKJ?= =?us-ascii?Q?WIe1A97P9uOS+1P+W2dO2v8N0KM+CFDfQxV3dWwAie4fOBnyzR2swSSD7Wot?= =?us-ascii?Q?dbp7S6Efq2T/Sd/yKDmOzonb4pQV1KACXQVQXQp+af2bqI8Pk/9lbIqgdiW/?= =?us-ascii?Q?/4oLu+LxC0EQDT/WcxS8aukT1y8a0IFdfhtVRmdyUHYvtkOhytjS+pReoHYz?= =?us-ascii?Q?llRVjS+UUcqyFj/z6NMJUquj1a48igeZKpH375UTUIrey+NN0rQtaVcqTQLJ?= =?us-ascii?Q?Ib0TQmxED2QqM365VlAxV4necd5YehGUDePMCWfYaU1k4n28SnGvbCT9RiX1?= =?us-ascii?Q?Q2cyMZX4EOWJ+7WprVBOUsSX8OhwgejIm7tenbc8sGyQfPoLRSyvt4q5VyGM?= =?us-ascii?Q?B9Uvc+jFn4dd/J/o/Aa/x5GMehE9JznFbWCp83m47WQqoOR05rgYE98XIWZh?= =?us-ascii?Q?ZBiQzyd/MOkTOSjYh1LHQpYCU0CCQWDJUl/HIUBF7nSSH8qyEFU6+URNgatF?= =?us-ascii?Q?ApofF9dLXRN7HIuQKef5IQTT4FHUzTXOOlAmKYNdhqKzoIq/iMEbSiSICpER?= =?us-ascii?Q?VNtn2UkpY/7yQZbKVPODwG1Ah7djYXSnjKROGE+y1MNhXvuoEYRcqh84HmOw?= =?us-ascii?Q?ZirItNimbvR4j5Kz+JopTkt+tSAIdaid5kVokXEAOIXIkpgirfiWixL5wAUw?= =?us-ascii?Q?trGslwdCpKf3kJpbZ2kt5gvl8iFAJXKsBZjwZe2CZxXtTYSHKiXAw0m6hq2G?= =?us-ascii?Q?t6+O/1bFQ7CAjbjqvktU0pgKE3uTa4g/Re4o/RVKZ45imbl2cUWkvMQuASGZ?= =?us-ascii?Q?7VNMCqduWXUL1CslCxcbDRxZU5BINy4b4VqNihMBp643XYzg8IaxZrMilqBz?= =?us-ascii?Q?B1L7F83pBXAnSFpei/AWgjKKgjMPHzpWV+YezkoZ7TD3+R7QGjhhI/k8h5aM?= =?us-ascii?Q?7qdVXeXHPuXotVx0KRmJsD+JMfoGynhp0XOjugtwSmpT/S7KnXv48eKjRy9C?= =?us-ascii?Q?2RH6mv9xaMAnlKgmrtj+TmshEiV3WtaP88LQ?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(1800799024)(82310400026)(36860700013)(376014);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 May 2025 08:49:46.0563 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 4a664462-af30-4823-8602-08dd9cfb6e8d X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: SJ5PEPF000001F0.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV2PR12MB5895 X-ZohoMail-DKIM: pass (identity @amd.com) X-ZM-MESSAGEID: 1748335860181116600 Content-Type: text/plain; charset="utf-8" Introduce helper set_amd_cppc_para() and get_amd_cppc_para() to SET/GET CPPC-related para for amd-cppc/amd-cppc-epp driver. In get_cpufreq_cppc()/set_cpufreq_cppc(), we use "processor_pminfo[cpuid]->init & XEN_CPPC_INIT" to identify cpufreq driver is amd-cppc/amd-cppc-epp. Furthermore, using whether ->setpolicy isn't null to tell whether amd-cppc in active mode. Also, a new field "policy" has also been added in "struct xen_cppc_para" to describe performance policy in active mode. It gets printed with other cppc paras. A set of public macro XEN_CPUFREQ_POLICY_xxx is introduced to be sync with internal ones CPUFREQ_POLICY_xxx. A new policy XEN_CPUFREQ_POLICY_BALANCE is introduced, and could be achieved only via xenpm XEN_SYSCTL_CPPC_SET_PRESET_BALANCE preset. Signed-off-by: Penny Zheng --- v1 -> v2: - Give the variable des_perf an initializer of 0 - Use the strncmp()s directly in the if() --- v3 -> v4 - refactor comments - remove double blank lines - replace amd_cppc_in_use flag with XEN_PROCESSOR_PM_CPPC --- - add new field "policy" in "struct xen_cppc_para" - add new performamce policy XEN_CPUFREQ_POLICY_BALANCE - drop string comparisons with "processor_pminfo[cpuid]->init & XEN_CPPC_IN= IT" and "cpufreq.setpolicy =3D=3D NULL" - Blank line ahead of the main "return" of a function - refactor comments, commit message and title --- tools/misc/xenpm.c | 10 +++ xen/arch/x86/acpi/cpufreq/amd-cppc.c | 129 +++++++++++++++++++++++++++ xen/drivers/acpi/pmstat.c | 13 ++- xen/include/acpi/cpufreq/cpufreq.h | 12 ++- xen/include/public/sysctl.h | 5 ++ 5 files changed, 163 insertions(+), 6 deletions(-) diff --git a/tools/misc/xenpm.c b/tools/misc/xenpm.c index 2864506da4..2e5975cae4 100644 --- a/tools/misc/xenpm.c +++ b/tools/misc/xenpm.c @@ -38,6 +38,13 @@ static xc_interface *xc_handle; static unsigned int max_cpu_nr; =20 +static const char cpufreq_policy_str[][12] =3D { + [XEN_CPUFREQ_POLICY_UNKNOWN] =3D "none", + [XEN_CPUFREQ_POLICY_POWERSAVE] =3D "powersave", + [XEN_CPUFREQ_POLICY_PERFORMANCE] =3D "performance", + [XEN_CPUFREQ_POLICY_BALANCE] =3D "balance", +}; + /* help message */ void show_help(void) { @@ -984,6 +991,9 @@ static void print_cppc_para(unsigned int cpuid, printf(" : desired [%"PRIu32"%s]\n", cppc->desired, cppc->desired ? "" : " hw autonomous"); + + printf(" performance policy : %s\n", + cpufreq_policy_str[cppc->policy]); printf("\n"); } =20 diff --git a/xen/arch/x86/acpi/cpufreq/amd-cppc.c b/xen/arch/x86/acpi/cpufr= eq/amd-cppc.c index 5f15e86dc4..490446018c 100644 --- a/xen/arch/x86/acpi/cpufreq/amd-cppc.c +++ b/xen/arch/x86/acpi/cpufreq/amd-cppc.c @@ -506,6 +506,135 @@ static int cf_check amd_cppc_epp_set_policy(struct cp= ufreq_policy *policy) return 0; } =20 +int get_amd_cppc_para(const struct cpufreq_policy *policy, + struct xen_cppc_para *cppc_para) +{ + const struct amd_cppc_drv_data *data =3D per_cpu(amd_cppc_drv_data, + policy->cpu); + + if ( data =3D=3D NULL ) + return -ENODATA; + + cppc_para->policy =3D policy->policy; + cppc_para->lowest =3D data->caps.lowest_perf; + cppc_para->lowest_nonlinear =3D data->caps.lowest_nonlinear_perf; + cppc_para->nominal =3D data->caps.nominal_perf; + cppc_para->highest =3D data->caps.highest_perf; + cppc_para->minimum =3D data->req.min_perf; + cppc_para->maximum =3D data->req.max_perf; + cppc_para->desired =3D data->req.des_perf; + cppc_para->energy_perf =3D data->req.epp; + + return 0; +} + +int set_amd_cppc_para(struct cpufreq_policy *policy, + const struct xen_set_cppc_para *set_cppc) +{ + unsigned int cpu =3D policy->cpu; + struct amd_cppc_drv_data *data =3D per_cpu(amd_cppc_drv_data, cpu); + uint8_t max_perf, min_perf, des_perf =3D 0, epp; + + if ( data =3D=3D NULL ) + return -ENOENT; + + /* Validate all parameters */ + if ( set_cppc->minimum > UINT8_MAX || set_cppc->maximum > UINT8_MAX || + set_cppc->desired > UINT8_MAX || set_cppc->energy_perf > UINT8_MA= X ) + return -EINVAL; + + /* Only allow values if params bit is set. */ + if ( (!(set_cppc->set_params & XEN_SYSCTL_CPPC_SET_DESIRED) && + set_cppc->desired) || + (!(set_cppc->set_params & XEN_SYSCTL_CPPC_SET_MINIMUM) && + set_cppc->minimum) || + (!(set_cppc->set_params & XEN_SYSCTL_CPPC_SET_MAXIMUM) && + set_cppc->maximum) || + (!(set_cppc->set_params & XEN_SYSCTL_CPPC_SET_ENERGY_PERF) && + set_cppc->energy_perf) ) + return -EINVAL; + + /* Activity window not supported in MSR */ + if ( set_cppc->set_params & XEN_SYSCTL_CPPC_SET_ACT_WINDOW ) + return -EOPNOTSUPP; + + /* Return if there is nothing to do. */ + if ( set_cppc->set_params =3D=3D 0 ) + return 0; + + epp =3D per_cpu(epp_init, cpu); + /* + * Apply presets: + * XEN_SYSCTL_CPPC_SET_DESIRED reflects whether desired perf is set, w= hich + * is also the flag to distinguish between passive mode and active mod= e. + * When it is set, CPPC in passive mode, only + * XEN_SYSCTL_CPPC_SET_PRESET_NONE could be chosen. + * when it is not set, CPPC in active mode, three different profile + * XEN_SYSCTL_CPPC_SET_PRESET_POWERSAVE/PERFORMANCE/BALANCE are provid= ed, + */ + switch ( set_cppc->set_params & XEN_SYSCTL_CPPC_SET_PRESET_MASK ) + { + case XEN_SYSCTL_CPPC_SET_PRESET_POWERSAVE: + if ( set_cppc->set_params & XEN_SYSCTL_CPPC_SET_DESIRED ) + return -EINVAL; + policy->policy =3D CPUFREQ_POLICY_POWERSAVE; + min_perf =3D data->caps.lowest_perf; + /* Lower max frequency to lowest */ + max_perf =3D data->caps.lowest_perf; + epp =3D CPPC_ENERGY_PERF_MAX_POWERSAVE; + break; + + case XEN_SYSCTL_CPPC_SET_PRESET_PERFORMANCE: + if ( set_cppc->set_params & XEN_SYSCTL_CPPC_SET_DESIRED ) + return -EINVAL; + /* Increase idle frequency to highest */ + policy->policy =3D CPUFREQ_POLICY_PERFORMANCE; + min_perf =3D data->caps.highest_perf; + max_perf =3D data->caps.highest_perf; + epp =3D CPPC_ENERGY_PERF_MAX_PERFORMANCE; + break; + + case XEN_SYSCTL_CPPC_SET_PRESET_BALANCE: + if ( set_cppc->set_params & XEN_SYSCTL_CPPC_SET_DESIRED ) + return -EINVAL; + policy->policy =3D CPUFREQ_POLICY_BALANCE; + min_perf =3D data->caps.lowest_perf; + max_perf =3D data->caps.highest_perf; + epp =3D CPPC_ENERGY_PERF_BALANCE; + break; + + case XEN_SYSCTL_CPPC_SET_PRESET_NONE: + /* + * In paasive mode, Xen governor is responsible for perfomance tun= ing. + * we shall set lowest_perf with "lowest_nonlinear_perf" to ensure + * governoring performance in P-states range. + */ + min_perf =3D data->caps.lowest_nonlinear_perf; + max_perf =3D data->caps.highest_perf; + break; + + default: + return -EINVAL; + } + + /* Further customize presets if needed */ + if ( set_cppc->set_params & XEN_SYSCTL_CPPC_SET_MINIMUM ) + min_perf =3D set_cppc->minimum; + + if ( set_cppc->set_params & XEN_SYSCTL_CPPC_SET_MAXIMUM ) + max_perf =3D set_cppc->maximum; + + if ( set_cppc->set_params & XEN_SYSCTL_CPPC_SET_ENERGY_PERF ) + epp =3D set_cppc->energy_perf; + + if ( set_cppc->set_params & XEN_SYSCTL_CPPC_SET_DESIRED ) + des_perf =3D set_cppc->desired; + + amd_cppc_write_request(cpu, min_perf, des_perf, max_perf, epp); + + return 0; +} + static const struct cpufreq_driver __initconst_cf_clobber amd_cppc_cpufreq_driver =3D { diff --git a/xen/drivers/acpi/pmstat.c b/xen/drivers/acpi/pmstat.c index e5f375921a..9e1ed29a0a 100644 --- a/xen/drivers/acpi/pmstat.c +++ b/xen/drivers/acpi/pmstat.c @@ -334,6 +334,10 @@ static int get_cpufreq_cppc(struct xen_sysctl_pm_op *o= p) if ( hwp_active() ) ret =3D get_hwp_para(op->cpuid, &op->u.cppc_para); =20 + if ( processor_pminfo[op->cpuid]->init & XEN_CPPC_INIT ) + ret =3D get_amd_cppc_para(per_cpu(cpufreq_cpu_policy, op->cpuid), + &op->u.cppc_para); + return ret; } =20 @@ -429,10 +433,13 @@ static int set_cpufreq_cppc(struct xen_sysctl_pm_op *= op) if ( !policy || !policy->governor ) return -ENOENT; =20 - if ( !hwp_active() ) - return -EOPNOTSUPP; + if ( hwp_active() ) + return set_hwp_para(policy, &op->u.set_cppc); + + if ( processor_pminfo[op->cpuid]->init & XEN_CPPC_INIT ) + return set_amd_cppc_para(policy, &op->u.set_cppc); =20 - return set_hwp_para(policy, &op->u.set_cppc); + return -EOPNOTSUPP; } =20 int do_pm_op(struct xen_sysctl_pm_op *op) diff --git a/xen/include/acpi/cpufreq/cpufreq.h b/xen/include/acpi/cpufreq/= cpufreq.h index 6f31009e82..c542a6e633 100644 --- a/xen/include/acpi/cpufreq/cpufreq.h +++ b/xen/include/acpi/cpufreq/cpufreq.h @@ -134,14 +134,16 @@ extern int cpufreq_register_governor(struct cpufreq_g= overnor *governor); extern struct cpufreq_governor *__find_governor(const char *governor); #define CPUFREQ_DEFAULT_GOVERNOR &cpufreq_gov_dbs =20 -#define CPUFREQ_POLICY_UNKNOWN 0 +#define CPUFREQ_POLICY_UNKNOWN XEN_CPUFREQ_POLICY_UNKNOWN /* * If cpufreq_driver->target() exists, the ->governor decides what frequen= cy * within the limits is used. If cpufreq_driver->setpolicy() exists, these * two generic policies are available: */ -#define CPUFREQ_POLICY_POWERSAVE 1 -#define CPUFREQ_POLICY_PERFORMANCE 2 +#define CPUFREQ_POLICY_POWERSAVE XEN_CPUFREQ_POLICY_POWERSAVE +#define CPUFREQ_POLICY_PERFORMANCE XEN_CPUFREQ_POLICY_PERFORMANCE +/* Achieved only via xenpm XEN_SYSCTL_CPPC_SET_PRESET_BALANCE preset */ +#define CPUFREQ_POLICY_BALANCE XEN_CPUFREQ_POLICY_BALANCE =20 unsigned int cpufreq_policy_from_governor(const struct cpufreq_governor *g= ov); =20 @@ -292,5 +294,9 @@ int acpi_cpufreq_register(void); =20 int amd_cppc_cmdline_parse(const char *s, const char *e); int amd_cppc_register_driver(void); +int get_amd_cppc_para(const struct cpufreq_policy *policy, + struct xen_cppc_para *cppc_para); +int set_amd_cppc_para(struct cpufreq_policy *policy, + const struct xen_set_cppc_para *set_cppc); =20 #endif /* __XEN_CPUFREQ_PM_H__ */ diff --git a/xen/include/public/sysctl.h b/xen/include/public/sysctl.h index 29872fe508..18c38744ae 100644 --- a/xen/include/public/sysctl.h +++ b/xen/include/public/sysctl.h @@ -308,6 +308,11 @@ struct xen_ondemand { =20 struct xen_cppc_para { /* OUT */ +#define XEN_CPUFREQ_POLICY_UNKNOWN 0 +#define XEN_CPUFREQ_POLICY_POWERSAVE 1 +#define XEN_CPUFREQ_POLICY_PERFORMANCE 2 +#define XEN_CPUFREQ_POLICY_BALANCE 4 + uint32_t policy; /* activity_window supported if set */ #define XEN_SYSCTL_CPPC_FEAT_ACT_WINDOW (1 << 0) uint32_t features; /* bit flags for features */ --=20 2.34.1