From: Jan Beulich <jbeulich@suse.com>
To: David Thomson <dt@linux-mail.net>
Cc: boris.ostrovsky@oracle.com, sstabellini@kernel.org,
xen-devel@lists.xenproject.org, linux-kernel@vger.kernel.org,
jgross@suse.com
Subject: Re: [PATCH] xen/acpi-processor: fix _CST detection using undersized evaluation buffer
Date: Tue, 24 Feb 2026 08:28:07 +0100 [thread overview]
Message-ID: <e983d7a2-2c8a-46d4-8112-0d2f2045c93f@suse.com> (raw)
In-Reply-To: <20260223195602.17122-1-dt@linux-mail.net>
On 23.02.2026 20:56, David Thomson wrote:
> read_acpi_id() attempts to evaluate _CST using a stack buffer of
> sizeof(union acpi_object) (48 bytes), but _CST returns a nested Package
> of sub-Packages (one per C-state, each containing a register descriptor,
> type, latency, and power) requiring hundreds of bytes. The evaluation
> always fails with AE_BUFFER_OVERFLOW.
>
> On modern systems using FFH/MWAIT entry (where pblk is zero), this
> causes the function to return before setting the acpi_id_cst_present
> bit. In check_acpi_ids(), flags.power is then zero for all Phase 2 CPUs
> (physical CPUs beyond dom0's vCPU count), so push_cxx_to_hypervisor() is
> never called for them.
>
> On a system with dom0_max_vcpus=2 and 8 physical CPUs, only PCPUs 0-1
> receive C-state data. PCPUs 2-7 are stuck in C0/C1 idle, unable to
> enter C2/C3. This costs measurable wall power (4W observed on an Intel
> Core Ultra 7 265K with Xen 4.20).
>
> The function never uses the _CST return value -- it only needs to know
> whether _CST exists. Replace the broken acpi_evaluate_object() call with
> acpi_has_method(), which correctly detects _CST presence using
> acpi_get_handle() without any buffer allocation. This brings C-state
> detection to parity with the P-state path, which already works correctly
> for Phase 2 CPUs.
>
> Fixes: 59a568029181 ("xen/acpi-processor: C and P-state driver that uploads said data to hypervisor.")
> Signed-off-by: David Thomson <dt@linux-mail.net>
> ---
> drivers/xen/xen-acpi-processor.c | 7 ++-----
> 1 file changed, 2 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/xen/xen-acpi-processor.c b/drivers/xen/xen-acpi-processor.c
> index 2967039..67a4afc 100644
> --- a/drivers/xen/xen-acpi-processor.c
> +++ b/drivers/xen/xen-acpi-processor.c
> @@ -379,11 +379,8 @@ read_acpi_id(acpi_handle handle, u32 lvl, void *context, void **rv)
> acpi_psd[acpi_id].domain);
> }
>
> - status = acpi_evaluate_object(handle, "_CST", NULL, &buffer);
> - if (ACPI_FAILURE(status)) {
> - if (!pblk)
> - return AE_OK;
> - }
> + if (!acpi_has_method(handle, "_CST") && !pblk)
> + return AE_OK;
I understand you reflect original behavior in this regard, but why involve any
ACPI function here at all when pblk is non-zero? I.e. why not swap the operands
of && ? Object evaluation could have wanted side effects (in which case,
however, some different change would be needed here), but checking for method
presence surely hasn't.
Jan
next prev parent reply other threads:[~2026-02-24 7:28 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-23 19:56 David Thomson
[not found] ` <aZzAYEo0S3pP4HUG@mattapan.m5p.com>
2026-02-23 23:20 ` David Thomson (dt@linux.com)
2026-02-24 7:28 ` Jan Beulich [this message]
2026-02-24 9:10 ` David Thomson (dt@linux.com)
2026-02-24 9:21 ` Jan Beulich
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=e983d7a2-2c8a-46d4-8112-0d2f2045c93f@suse.com \
--to=jbeulich@suse.com \
--cc=boris.ostrovsky@oracle.com \
--cc=dt@linux-mail.net \
--cc=jgross@suse.com \
--cc=linux-kernel@vger.kernel.org \
--cc=sstabellini@kernel.org \
--cc=xen-devel@lists.xenproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®