From nobody Thu Nov 5 07:28:36 2026 Delivered-To: importer@patchew.org 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; 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; dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=1; a=rsa-sha256; t=1793710457; cv=none; d=zohomail.com; s=zohoarc; b=E+q8I/dD74Smnjy8SFudTKMDfpBa0SzdgExv4bRsekOSHQ7nqeXdGkrqKc5aUIEWIpEroF8RKJPtDQPXKkLwMxQD2iettM9YfdAy2U052SAALRedrYjpVv+PAZ3CfLO5ihleVggor7QNME6gdPjMeDqiBzlV9mDnZ3VhKX3R8OM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1793710457; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=rFrjfLJvymmO7wm+shvpLfY3kMeh2pY6kKTI+A0f32s=; b=GVWnDPU1fep9i0EIU04txwWS4cMAOPk/PF0hsBWK3EbR7sND/CD12QFmooUx5BXvkMLflFNNJa1yWnf+bgaV1UvOd5Aqjrv+tH/9JFP8dV7EZ7aaRtCjPiMAgiUOkryliZS3kf1XZs76WUxtIBchUWdgf0/y8hqcKy2j+yzXksA= ARC-Authentication-Results: i=1; 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; 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 1793710457276336.35287475480413; Tue, 3 Nov 2026 04:54:17 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.1469741.1678497 (Exim 4.92) (envelope-from ) id 1xOE1X-0008Os-5g; Tue, 03 Nov 2026 12:53:59 +0000 Received: by outflank-mailman (output) from mailman id 1469741.1678497; Tue, 03 Nov 2026 12:53:59 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1xOE1X-0008Ok-3A; Tue, 03 Nov 2026 12:53:59 +0000 Received: by outflank-mailman (input) for mailman id 1469741; Tue, 03 Nov 2026 12:53:58 +0000 Received: from mx.expurgate.net ([194.145.224.20]) by lists.xenproject.org with esmtp (Exim 4.92) id 1xOE1V-0008OT-VC for xen-devel@lists.xenproject.org; Tue, 03 Nov 2026 12:53:58 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1xOE1V-007FLq-BO for xen-devel@lists.xenproject.org; Tue, 03 Nov 2026 13:53:57 +0100 Received: from [10.42.69.8] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6ae9d953-2eae-0a2a0a5409dd-0a2a4508d06c-46 for ; Tue, 03 Nov 2026 13:53:57 +0100 Received: from [209.85.128.46] (helo=mail-wm1-f46.google.com) by tlsNG-c1860d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from ) id 6ae9d965-f659-0a2a45080019-d155802ed47d-3 for ; Tue, 03 Nov 2026 13:53:57 +0100 Received: by mail-wm1-f46.google.com with SMTP id 5b1f17b1804b1-4a218c463d1so27924455e9.0 for ; Tue, 03 Nov 2026 04:53:57 -0800 (PST) Received: from [10.156.60.236] (ip-037-024-206-209.um08.pools.vodafone-ip.de. [37.24.206.209]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4b2aa481a45sm51437475e9.7.2026.11.03.04.53.55 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 03 Nov 2026 04:53:56 -0800 (PST) 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" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=google header.d=suse.com header.i="@suse.com" header.h="Content-Transfer-Encoding:Content-Type:Autocrypt:Subject:From:Cc:To:Content-Language:User-Agent:MIME-Version:Date:Message-ID" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1793710437; x=1794315237; darn=lists.xenproject.org; h=content-transfer-encoding:content-type:autocrypt:subject:from:cc:to :content-language:user-agent:mime-version:date:message-id:from:to:cc :subject:date:message-id:reply-to:content-type; bh=rFrjfLJvymmO7wm+shvpLfY3kMeh2pY6kKTI+A0f32s=; b=ZE90cJ9tivhpn8kGvzWYAYuZBat9z5bZMLhYzHTBMFVChZ3ayUErjgHfEgn9PU2tgU RHiwkNv2J8PYtEHBiu8fPWb694crg63f8aCm+i8o0Raz5kLT4njg4XCP5Z3pk3vTdzsC mjiY2LT7UTxemBosjVBybG9H+5If8bugSdfxbryU7iVDEzXwmM8SZ5wJss3Wn272LWYb Uom1Tk489kPrqfVlyKIdHr3769PlX6k73MNbDMYoG9rdsXHRqC0uE9SM+IWKOAclpqGw E2t8J1zJSh05KHYdAAoAqFsc2ki02s59/QWDJzyoNivE7b2tyVQaJnj/W4hZMWGm5q+J fX6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1793710437; x=1794315237; h=content-transfer-encoding:content-type:autocrypt:subject:from:cc:to :content-language:user-agent:mime-version:date:message-id:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=rFrjfLJvymmO7wm+shvpLfY3kMeh2pY6kKTI+A0f32s=; b=ChHUKPd10UlQC25qtUyaQQBRIFFFs889lpLnuloZ+qFTdSmp8joREoIFF4+EWE5cAD VfH//oxKk0+eDpKEsAJ6ejmDzaM1jARG4yeUye5BclW/LlSCzK3TNN+rg5S5CZsj3+Ya oLZsJsO32gbe2kVlH0Dl6ig4F7o1tsmJfDsGiTvGsQMRMMm97WJ8+kXya7E6iC5n8XxC GxQsvpJRkzuevc7m1AzcP+fy3qyImrE5DD9t/PBTmCaja9vsjRPddzTJX1khJMz50Zkv 2WSixz2l2d0X0mz+STxR3OxEh7Zn1n2sNmvWJzjjNvQRHa2cefDfI1lm5GWAYiJs6opi kiEA== X-Gm-Message-State: APuU4Z9fDM42QguBHcEFioBJTwMHryI56mVRShl4QJw442V9wwARqRLx 6YyCxt2icD9c9djo46+ai2BUdRQhJUqFaEMdf683EDKvcIjX/+NGuVB9GxUre0H9m3gVqdk9pB7 SrniFmg== X-Gm-Gg: AYBFou3IsZ6QUvwF0JOenItiNTdDvOiAB3NB5zjEluO2V64YrnnNrdzIRDV2+Pnh/rF D7ffQZ1I2Di27HkQyZK6vGDw6YBigzvcw2FduPiQI4xBGKD4q92qYbT7bKJJyq59vlvTBk45GHj ceiEd+RNnlKYotkbOtCpbeyxktOWtGG4zn2Y24sB4hBUZWBHtx4f1endlUtxDE+/+UWEQKC3Jku MuAVCPy55Bess16olL8tpO85zbbinmHfi3LcVlu7FQW3vdv8kJvIT/9Zfshvq1WXUyTIaOhdcNM NQD1mnk2RPrhR/wqI709vZIS5s2nCD9POkjR0pDwuj/jmDWwSzXddXCr5spOjMmme4TvH1oWzLt 6KUui9cAcAHPRx+GHFeGvbGXk/kZ5RnrVyQG9GK9WAr1npn2/69kZRSiqXUbJIdUpSZOvZEzTPi ICdrXhrxEkjjCaxbdhZ7tXY0TjgfSiOC/3gDZKt9Id95nM8/vqWHDsA/UwAKel9+dfMmVQVdzVf YWWBWz8xLLbZ/ws/L3ndrWxHNYlLVQNJhh8MaPuDhZNSGAEpwI5Juk8oMmFyzD0rxjo6kQYFxoq T40NunAmRfpwuQs6lw4AVGVz/T2z0zkiful3Rck6WEWqqO2AH3/xE25G6YfEXW8b/1nMds0Ly+i TfpdhanL8jtkevFG8/5l8FsUNAyWJQpCW0K7jLg== X-Received: by 2002:a05:600c:4e43:b0:4ab:e27d:e241 with SMTP id 5b1f17b1804b1-4ac180f28f7mr283466735e9.15.1793710436812; Tue, 03 Nov 2026 04:53:56 -0800 (PST) Message-ID: <9cd6da48-7a5e-4971-93e1-7d7262ddf7fc@suse.com> Date: Tue, 3 Nov 2026 13:53:55 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Julien Grall , Stefano Stabellini , Anthony PERARD , Michal Orzel , =?UTF-8?Q?Roger_Pau_Monn=C3=A9?= , Teddy Astie From: Jan Beulich Subject: [PATCH] x86/cpufreq: allocate processor_pminfo[] dynamically Autocrypt: addr=jbeulich@suse.com; keydata= xsDiBFk3nEQRBADAEaSw6zC/EJkiwGPXbWtPxl2xCdSoeepS07jW8UgcHNurfHvUzogEq5xk hu507c3BarVjyWCJOylMNR98Yd8VqD9UfmX0Hb8/BrA+Hl6/DB/eqGptrf4BSRwcZQM32aZK 7Pj2XbGWIUrZrd70x1eAP9QE3P79Y2oLrsCgbZJfEwCgvz9JjGmQqQkRiTVzlZVCJYcyGGsD /0tbFCzD2h20ahe8rC1gbb3K3qk+LpBtvjBu1RY9drYk0NymiGbJWZgab6t1jM7sk2vuf0Py O9Hf9XBmK0uE9IgMaiCpc32XV9oASz6UJebwkX+zF2jG5I1BfnO9g7KlotcA/v5ClMjgo6Gl MDY4HxoSRu3i1cqqSDtVlt+AOVBJBACrZcnHAUSuCXBPy0jOlBhxPqRWv6ND4c9PH1xjQ3NP nxJuMBS8rnNg22uyfAgmBKNLpLgAGVRMZGaGoJObGf72s6TeIqKJo/LtggAS9qAUiuKVnygo 3wjfkS9A3DRO+SpU7JqWdsveeIQyeyEJ/8PTowmSQLakF+3fote9ybzd880fSmFuIEJldWxp Y2ggPGpiZXVsaWNoQHN1c2UuY29tPsJgBBMRAgAgBQJZN5xEAhsDBgsJCAcDAgQVAggDBBYC AwECHgECF4AACgkQoDSui/t3IH4J+wCfQ5jHdEjCRHj23O/5ttg9r9OIruwAn3103WUITZee e7Sbg12UgcQ5lv7SzsFNBFk3nEQQCACCuTjCjFOUdi5Nm244F+78kLghRcin/awv+IrTcIWF hUpSs1Y91iQQ7KItirz5uwCPlwejSJDQJLIS+QtJHaXDXeV6NI0Uef1hP20+y8qydDiVkv6l IreXjTb7DvksRgJNvCkWtYnlS3mYvQ9NzS9PhyALWbXnH6sIJd2O9lKS1Mrfq+y0IXCP10eS FFGg+Av3IQeFatkJAyju0PPthyTqxSI4lZYuJVPknzgaeuJv/2NccrPvmeDg6Coe7ZIeQ8Yj t0ARxu2xytAkkLCel1Lz1WLmwLstV30g80nkgZf/wr+/BXJW/oIvRlonUkxv+IbBM3dX2OV8 AmRv1ySWPTP7AAMFB/9PQK/VtlNUJvg8GXj9ootzrteGfVZVVT4XBJkfwBcpC/XcPzldjv+3 HYudvpdNK3lLujXeA5fLOH+Z/G9WBc5pFVSMocI71I8bT8lIAzreg0WvkWg5V2WZsUMlnDL9 mpwIGFhlbM3gfDMs7MPMu8YQRFVdUvtSpaAs8OFfGQ0ia3LGZcjA6Ik2+xcqscEJzNH+qh8V m5jjp28yZgaqTaRbg3M/+MTbMpicpZuqF4rnB0AQD12/3BNWDR6bmh+EkYSMcEIpQmBM51qM EKYTQGybRCjpnKHGOxG0rfFY1085mBDZCH5Kx0cl0HVJuQKC+dV2ZY5AqjcKwAxpE75MLFkr wkkEGBECAAkFAlk3nEQCGwwACgkQoDSui/t3IH7nnwCfcJWUDUFKdCsBH/E5d+0ZnMQi+G0A nAuWpQkjM1ASeQwSHEeAWPgskBQL Content-Transfer-Encoding: quoted-printable X-purgate-ID: tlsNG-c1860d/1793710437-DFAD487B-DE4682C9/10/78276251493 X-purgate-type: spam X-purgate-size: 5035 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1793710458201158500 Content-Type: text/plain; charset="utf-8" There's no need to have a NR_CPUS-dimensioned static array there. As ordering of pre-SMP initcalls isn't well-defined, allocate the array from both cpufreq_presmp_init() and cpufreq_register_driver(). Alongside adding a few NULL checks, drop a redundant one from get_cpufreq_para(). Signed-off-by: Jan Beulich --- a/xen/drivers/acpi/pm-op.c +++ b/xen/drivers/acpi/pm-op.c @@ -104,8 +104,7 @@ static int get_cpufreq_para(struct xen_s pmpt =3D processor_pminfo[op->cpuid]; policy =3D per_cpu(cpufreq_cpu_policy, op->cpuid); =20 - if ( !pmpt || - ((pmpt->init & XEN_PX_INIT) && !pmpt->perf.states) || + if ( ((pmpt->init & XEN_PX_INIT) && !pmpt->perf.states) || /* Avoid NULL deref of pmpt->perf.states[] */ ((pmpt->init & XEN_CPPC_INIT) && pmpt->perf.state_count) || !policy || !policy->governor ) @@ -369,7 +368,7 @@ int do_pm_op(struct xen_sysctl_pm_op *op =20 if ( op->cpuid >=3D nr_cpu_ids || !cpu_online(op->cpuid) ) return -EINVAL; - pmpt =3D processor_pminfo[op->cpuid]; + pmpt =3D processor_pminfo ? processor_pminfo[op->cpuid] : NULL; =20 switch ( op->cmd & PM_PARA_CATEGORY_MASK ) { --- a/xen/drivers/acpi/pmstat.c +++ b/xen/drivers/acpi/pmstat.c @@ -227,7 +227,7 @@ int do_get_pm_info(struct xen_sysctl_get =20 if ( !op || (op->cpuid >=3D nr_cpu_ids) || !cpu_online(op->cpuid) ) return -EINVAL; - pmpt =3D processor_pminfo[op->cpuid]; + pmpt =3D processor_pminfo ? processor_pminfo[op->cpuid] : NULL; =20 switch ( op->type & PMSTAT_CATEGORY_MASK ) { --- a/xen/drivers/cpufreq/cpufreq.c +++ b/xen/drivers/cpufreq/cpufreq.c @@ -218,7 +218,7 @@ int cpufreq_limit_change(unsigned int cp struct cpufreq_policy policy; =20 if (!cpu_online(cpu) || !(data =3D per_cpu(cpufreq_cpu_policy, cpu)) || - !processor_pminfo[cpu]) + !processor_pminfo || !processor_pminfo[cpu]) return -ENODEV; =20 perf =3D &processor_pminfo[cpu]->perf; @@ -273,7 +273,7 @@ int cpufreq_add_cpu(unsigned int cpu) unsigned int shared_type; =20 /* to protect the case when Px was not controlled by xen */ - if ( !processor_pminfo[cpu] || !cpu_online(cpu) ) + if ( !processor_pminfo || !processor_pminfo[cpu] || !cpu_online(cpu) ) return -EINVAL; =20 if ( !(processor_pminfo[cpu]->init & (XEN_PX_INIT | XEN_CPPC_INIT)) ) @@ -448,7 +448,7 @@ int cpufreq_del_cpu(unsigned int cpu) const struct xen_psd_package *domain_info; =20 /* to protect the case when Px was not controlled by xen */ - if ( !processor_pminfo[cpu] || !cpu_online(cpu) ) + if ( !processor_pminfo || !processor_pminfo[cpu] || !cpu_online(cpu) ) return -EINVAL; =20 if ( !(processor_pminfo[cpu]->init & (XEN_PX_INIT | XEN_CPPC_INIT)) ) @@ -563,6 +563,9 @@ int set_px_pminfo(uint32_t acpi_id, stru struct processor_pminfo *pmpt; struct processor_performance *pxpt; =20 + if ( !processor_pminfo ) + return -ENOMEM; + cpu =3D get_cpu_id(acpi_id); if ( cpu < 0 || !perf ) { @@ -726,6 +729,9 @@ int set_cppc_pminfo(unsigned int acpi_id int ret =3D 0, cpu_id; struct processor_pminfo *pm_info; =20 + if ( !processor_pminfo ) + return -ENOMEM; + cpu_id =3D get_cpu_id(acpi_id); if ( cpu_id < 0 ) { @@ -947,6 +953,11 @@ static struct notifier_block cpu_nfb =3D { =20 static int __init cf_check cpufreq_presmp_init(void) { + if ( !processor_pminfo ) + processor_pminfo =3D xvzalloc_array(struct processor_pminfo *, nr_= cpu_ids); + if ( !processor_pminfo ) + return -ENOMEM; + register_cpu_notifier(&cpu_nfb); return 0; } @@ -954,6 +965,11 @@ presmp_initcall(cpufreq_presmp_init); =20 int __init cpufreq_register_driver(const struct cpufreq_driver *driver_dat= a) { + if ( !processor_pminfo ) + processor_pminfo =3D xvzalloc_array(struct processor_pminfo *, nr_= cpu_ids); + if ( !processor_pminfo ) + return -ENOMEM; + if ( !driver_data || !driver_data->init || !driver_data->verify || !driver_data->exit || (!driver_data->target =3D=3D !driver_data->setpolicy) ) --- a/xen/drivers/cpufreq/utility.c +++ b/xen/drivers/cpufreq/utility.c @@ -32,7 +32,7 @@ #include =20 struct cpufreq_driver __read_mostly cpufreq_driver; -struct processor_pminfo *__read_mostly processor_pminfo[NR_CPUS]; +struct processor_pminfo **__read_mostly processor_pminfo; DEFINE_PER_CPU_READ_MOSTLY(struct cpufreq_policy *, cpufreq_cpu_policy); =20 /********************************************************************* --- a/xen/include/acpi/cpufreq/processor_perf.h +++ b/xen/include/acpi/cpufreq/processor_perf.h @@ -59,7 +59,7 @@ struct processor_pminfo { uint32_t init; }; =20 -extern struct processor_pminfo *processor_pminfo[NR_CPUS]; +extern struct processor_pminfo **processor_pminfo; =20 struct px_stat { uint8_t total; /* total Px states */