Re: [PATCH] sched/pelt: Fix truncation of the PELT period count

From: Vincent Guittot

Date: Thu Oct 22 2026 - 04:39:21 EST


On Thu, 22 Oct 2026 at 05:50, Hui Su <sh_def@xxxxxxx> wrote:
>
> accumulate_sum() computes the number of elapsed PELT periods in a
> u64 but returns u32. When the count is a multiple of 2^32, it is
> truncated to zero even though the PELT sums have been updated.

Did you face this problem, or did you find it only during a code review?

This would happen every multiple of exactly 2^32 ms (~50days) without
updating pelt whereas the latter is supposed to be updated far more
often (within second) until it reaches 0. Then such a large period
would keep it at 0 anyway

>
> The caller interprets zero as no period boundary crossed and skips
> recomputing the averages, leaving *_avg stale relative to *_sum.
>
> Return only whether any period elapsed, which is all the caller
> needs.
>
> Signed-off-by: Hui Su <sh_def@xxxxxxx>

Even if I doubt it can happen, it's better to fix it anyway

Reviewed-by: Vincent Guittot <vincent.guittot@xxxxxxxxxx>

> ---
> kernel/sched/pelt.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/kernel/sched/pelt.c b/kernel/sched/pelt.c
> index 779eb58a4261..519bc9c40043 100644
> --- a/kernel/sched/pelt.c
> +++ b/kernel/sched/pelt.c
> @@ -146,7 +146,7 @@ accumulate_sum(u64 delta, struct sched_avg *sa,
> if (running)
> sa->util_sum += contrib << SCHED_CAPACITY_SHIFT;
>
> - return periods;
> + return !!periods;
> }
>
> /*
> --
> 2.55.0
>