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.
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 (3):
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
sched/fair: update rq->avg_idle for the delay-dequeue task
kernel/sched/core.c | 28 ++++++++++++++++------------
kernel/sched/fair.c | 24 ++++++++++++++++--------
kernel/sched/sched.h | 2 ++
3 files changed, 34 insertions(+), 20 deletions(-)
--
2.40.1