[PATCH v5 0/2] sched: update the rq->avg_idle when a task is moved to an idle CPU

From: Huang Shijie

Date: Wed Dec 03 2025 - 00:32:04 EST


In the newidle balance, the rq->idle_stamp may set to a non-zero value
if it cannot pull any task.

In the wakeup, it will detect the rq->idle_stamp, and updates
the rq->avg_idle, then ends the CPU idle status by setting rq->idle_stamp
to zero.

Besides the wakeup, current code does not end the CPU idle status
when a task is moved to the idle CPU, such as fork/clone, execve,
or other cases.

This patch set tries to resolve it.

v4--> v5:
Modify the changelog.

--v4:https://lkml.org/lkml/2025/11/28/300

v3--> v4:
Remove the code for delayed task.

--v3: https://lkml.org/lkml/2025/11/27/456

v2--> v3:
-- merge patch 3 into patch 2:
move update_rq_avg_idle() to enqueue_task().

--v2: https://lkml.org/lkml/2025/11/27/214

v1--> v2:
-- Put update_rq_avg_idle() to activate_task()
-- Add Delay-dequeue task check.

--v1: https://lkml.org/lkml/2025/11/24/97


Huang Shijie (2):
sched/fair: set rq->idle_stamp at the end of the sched_balance_newidle
sched: update the rq->avg_idle when a task is moved to an idle CPU

kernel/sched/core.c | 29 +++++++++++++++++------------
kernel/sched/fair.c | 12 ++++++++----
2 files changed, 25 insertions(+), 16 deletions(-)

--
2.40.1