FAILED: patch "[PATCH] sched/fair: Keep load_avg and load_sum synced" failed to apply to 5.4-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 5.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 7c7ad626d9a0ff0a36c1e2a3cfbbc6a13828d5eb Mon Sep 17 00:00:00 2001
From: Vincent Guittot <[email protected]>
Date: Thu, 27 May 2021 14:29:15 +0200
Subject: [PATCH] sched/fair: Keep load_avg and load_sum synced
when removing a cfs_rq from the list we only check _sum value so we must ensure that _avg and _sum stay synced so load_sum can't be null whereas load_avg is not after propagating load in the cgroup hierarchy.
Use load_avg to compute load_sum similarly to what is done for util_sum and runnable_sum.
kernel/sched/fair.c +5 -6
@@ -3499,10 +3499,9 @@ update_tg_cfs_runnable(struct cfs_rq *cfs_rq, struct sched_entity *se, struct cfstatic inline void update_tg_cfs_load (struct cfs_rq *cfs_rq,struct sched_entity *se,struct cfs_rq *gcfs_rq) { -long delta_avg, running_sum, runnable_sum = gcfs_rq->prop_runnable_sum; +long delta, running_sum, runnable_sum = gcfs_rq->prop_runnable_sum;unsigned long load_avg;u64 load_sum =0 ; -s64 delta_sum;u32 divider;if (!runnable_sum)
@@ -3549,13 +3548,13 @@ update_tg_cfs_load(struct cfs_rq *cfs_rq, struct sched_entity *se, struct cfs_rq load_sum = (s64 )se_weight (se) * runnable_sum; load_avg =div_s64 (load_sum, divider); - delta_sum = load_sum - (s64 )se_weight (se) * se->avg.load_sum; - delta_avg = load_avg - se->avg.load_avg; + delta = load_avg - se->avg.load_avg; se->avg.load_sum = runnable_sum; se->avg.load_avg = load_avg; -add_positive (&cfs_rq->avg.load_avg, delta_avg); -add_positive (&cfs_rq->avg.load_sum, delta_sum); + +add_positive (&cfs_rq->avg.load_avg, delta); + cfs_rq->avg.load_sum = cfs_rq->avg.load_avg * divider; }static inline void add_tg_cfs_propagate (struct cfs_rq *cfs_rq,long runnable_sum)