[PATCH] arm64: topology: fix arch_cpu_idle_enter()

Xuewen Yan xuewen.yan94 at gmail.com
Sun Aug 9 19:08:56 PDT 2026


Hi sean,

On Fri, Aug 7, 2026 at 10:07 PM seanwang1 <seanwang1 at lenovo.com> wrote:
>
> arch_cpu_idle_enter() directly calls amu_scale_freq_tick() to update
> arch_freq_scale when CPU enters idle state. This bypasses the sft_data
> pointer check that topology_clear_scale_freq_source() relies on.
>
> As a result, even after calling topology_clear_scale_freq_source() with
> SCALE_FREQ_SOURCE_ARCH to disable AMU-based frequency scaling, the
> arch_freq_scale value can still be modified by AMU counters when the
> CPU goes idle through the arch_cpu_idle_enter() path.
>
> Fix by replacing the direct amu_scale_freq_tick() call with
> topology_scale_freq_tick(), which is the generic interface for updating
> frequency scale and properly respects the sft_data pointer state.
>
> Co-developed-by: Xuewen Yan <xuewen.yan at unisoc.com>
> Signed-off-by: Sean Wang <seanwang1 at lenovo.com>
> Signed-off-by: Xuewen Yan <xuewen.yan at unisoc.com>
> ---
>  arch/arm64/kernel/topology.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/arch/arm64/kernel/topology.c b/arch/arm64/kernel/topology.c
> index b32f13358fbb..f617ef5c9903 100644
> --- a/arch/arm64/kernel/topology.c
> +++ b/arch/arm64/kernel/topology.c
> @@ -176,7 +176,7 @@ void arch_cpu_idle_enter(void)
>         /* Kick in AMU update but only if one has not happened already */
>         if (housekeeping_cpu(cpu, HK_TYPE_TICK) &&
>             time_is_before_jiffies(per_cpu(cpu_amu_samples.last_scale_update, cpu)))
> -               amu_scale_freq_tick();
> +               topology_scale_freq_tick();

Need we add rcu_lock/unlock?

>  }
>
>  #define AMU_SAMPLE_EXP_MS      20
> --
> 2.25.1
>
>



More information about the linux-arm-kernel mailing list