[PATCH] sched/stats: correct the wait_start calculation logic

Honglei Wang posted 1 patch 2 months, 3 weeks ago
kernel/sched/stats.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
[PATCH] sched/stats: correct the wait_start calculation logic
Posted by Honglei Wang 2 months, 3 weeks ago
It's not necessary to do the delta-related subtraction if the task
is not on rq migrating. Add the migrating related judgment back.

Signed-off-by: Honglei Wang <jameshongleiwang@126.com>
---
 kernel/sched/stats.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/kernel/sched/stats.c b/kernel/sched/stats.c
index d1c9429a4ac5..60560fb31e63 100644
--- a/kernel/sched/stats.c
+++ b/kernel/sched/stats.c
@@ -12,7 +12,8 @@ void __update_stats_wait_start(struct rq *rq, struct task_struct *p,
 	wait_start = rq_clock(rq);
 	prev_wait_start = schedstat_val(stats->wait_start);
 
-	if (p && likely(wait_start > prev_wait_start))
+	if (p && task_on_rq_migrating(p) &&
+	    likely(wait_start > prev_wait_start))
 		wait_start -= prev_wait_start;
 
 	__schedstat_set(stats->wait_start, wait_start);
-- 
2.33.0
Re: [PATCH] sched/stats: correct the wait_start calculation logic
Posted by Honglei Wang 2 months, 1 week ago
Gentle ping on this one submitted a couple of weeks earlier. Is it
worthy of being picked?

Thanks,
Honglei

On 11/13/25 8:43 PM, Honglei Wang wrote:
> It's not necessary to do the delta-related subtraction if the task
> is not on rq migrating. Add the migrating related judgment back.
> 
> Signed-off-by: Honglei Wang <jameshongleiwang@126.com>
> ---
>  kernel/sched/stats.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/kernel/sched/stats.c b/kernel/sched/stats.c
> index d1c9429a4ac5..60560fb31e63 100644
> --- a/kernel/sched/stats.c
> +++ b/kernel/sched/stats.c
> @@ -12,7 +12,8 @@ void __update_stats_wait_start(struct rq *rq, struct task_struct *p,
>  	wait_start = rq_clock(rq);
>  	prev_wait_start = schedstat_val(stats->wait_start);
>  
> -	if (p && likely(wait_start > prev_wait_start))
> +	if (p && task_on_rq_migrating(p) &&
> +	    likely(wait_start > prev_wait_start))
>  		wait_start -= prev_wait_start;
>  
>  	__schedstat_set(stats->wait_start, wait_start);