Re: [PATCH v5 0/3] cpufreq: cppc: Handle Highest Performance changes at runtime
From: Jie Zhan
Date: Mon Sep 07 2026 - 04:56:50 EST
On 8/7/2026 2:08 PM, Xueqin Luo wrote:
> Hi Rafael, Pierre,
>
> This series adds support for handling ACPI CPPC Highest Performance
> register changes at runtime, triggered by Notify(0x85) on a processor
> device.
>
> When the platform changes the Highest Performance value (e.g. due to
> thermal or power budget adjustments), the OSPM must re-evaluate the
> cached capability and propagate the change to the cpufreq policy,
> the scheduler's CPU capacity model, and the frequency invariance
> engine.
Any real use case of this on platforms that run cppc_cpufreq drivers?
Some addtional motivation may help.
For example, a processor can age over time and its core frequency degrades.
It's good if platforms can make OSPM and userspace aware of this.
>
> The series is split into three patches:
> Patch 1: Core update_limits callback with boost QoS handling.
> Patch 2: Refactor autonomous perf bounds into a reusable helper
> and wire it into update_limits with error logging.
> Patch 3: Topology subsystem runtime capacity updates with
> validation, early-return optimization, and concurrent-safe
> normalization.
>
> v4 -> v5:
> - Move cpu_data and caps pointer assignments after
> guard(cpufreq_policy_write) in cppc_cpufreq_update_limits() to
> avoid potential use-after-free if concurrent CPU offline frees
> driver_data before the lock is acquired (Sashiko)
> - Extract cppc_cpufreq_sync_boost_limits() from update_limits to
> handle boost_supported re-evaluation, cpuinfo.max_freq tracking,
> and boost_freq_req QoS update in a dedicated helper. The helper
> always updates the QoS request (even when boost becomes
> unsupported) to clear stale constraint values, and forcibly
> disables boost_enabled when boost disappears at runtime
> - Add highest_perf validation in topology_update_cpu_capacity():
> reject values below lowest_perf to prevent corrupted register
> reads from propagating into the scheduler capacity model
> - Add early-return in topology_update_cpu_capacity() when
> raw_capacity[cpu] is unchanged, avoiding redundant normalization
> and schedule_work() calls
> - Add zero capacity_scale guard in topology_update_cpu_capacity()
> to prevent division by zero in the normalization loop
> - Move guard(mutex) before the raw_capacity NULL check so that
> the pointer read is protected by the lock
> - Add CONFIG_GENERIC_ARCH_TOPOLOGY guard with no-op stub in
> arch_topology.h for configs where the topology subsystem is
> disabled
>
> Xueqin Luo (3):
> cpufreq: cppc: Add update_limits support for Highest Performance
> changes
> cpufreq: cppc: Refactor autonomous perf bounds into helper
> arch_topology: Add topology_update_cpu_capacity() for runtime updates
>
> drivers/base/arch_topology.c | 76 ++++++++++++++++
> drivers/cpufreq/cppc_cpufreq.c | 157 ++++++++++++++++++++++++++++++---
> include/linux/arch_topology.h | 13 +++
> 3 files changed, 233 insertions(+), 13 deletions(-)
>