scheduler fixes
Subsystems (2)
Linus,
Please pull the latest sched/urgent git tree from:
git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git sched-urgent-2023-10-08
# HEAD: 9e0bc36ab07c550d791bf17feeb479f1dfc42d89 cpufreq: schedutil: Update next_freq when cpufreq_limits change
Misc fixes:
- Two EEVDF fixes: one to fix sysctl_sched_base_slice propagation, and to fix an avg_vruntime() corner-case.
- A cpufreq frequency scaling fix
Thanks,
Ingo
------------------>
Peter Zijlstra (2):
sched/eevdf: Also update slice on placement
sched/eevdf: Fix avg_vruntime()
Xuewen Yan (1):
cpufreq: schedutil: Update next_freq when cpufreq_limits change
kernel/sched/cpufreq_schedutil.c | 3 ++- kernel/sched/fair.c | 16 +++++++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-)
kernel/sched/cpufreq_schedutil.c +2 -1
@@ -350,7 +350,8 @@ static void sugov_update_single_freq(struct update_util_data *hook, u64 time,* Except when the rq is capped by uclamp_max. */ if (!uclamp_rq_is_capped (cpu_rq (sg_cpu->cpu)) && -sugov_cpu_is_busy (sg_cpu) && next_f < sg_policy->next_freq) { +sugov_cpu_is_busy (sg_cpu) && next_f < sg_policy->next_freq && + !sg_policy->need_freq_update) { next_f = sg_policy->next_freq;/* Restore cached freq as next_freq has changed */
kernel/sched/fair.c +13 -3
@@ -664,6 +664,10 @@ void avg_vruntime_update(struct cfs_rq *cfs_rq, s64 delta) cfs_rq->avg_vruntime -= cfs_rq->avg_load * delta; } +/* +* Specifically: avg_runtime() + 0 must result in entity_eligible() := true +* For this to be so, the result of this function must have a left bias. +*/ u64 avg_vruntime (struct cfs_rq *cfs_rq) {struct sched_entity *curr = cfs_rq->curr;
@@ -677,8 +681,12 @@ u64 avg_vruntime(struct cfs_rq *cfs_rq) load += weight; } -if (load) +if (load) { +/* sign flips effective floor / ceil */ +if (avg <0 ) + avg -= (load -1 ); avg =div_s64 (avg, load); + }return cfs_rq->min_vruntime + avg; }
@@ -4919,10 +4927,12 @@ static inline void update_misfit_status(struct task_struct *p, struct rq *rq) {}static void place_entity (struct cfs_rq *cfs_rq,struct sched_entity *se,int flags) { -u64 vslice =calc_delta_fair (se->slice, se); -u64 vruntime =avg_vruntime (cfs_rq); +u64 vslice, vruntime =avg_vruntime (cfs_rq);s64 lag =0 ; + se->slice = sysctl_sched_base_slice; + vslice =calc_delta_fair (se->slice, se); +/* * Due to how V is constructed as the weighted average of entities, * adding tasks with positive lag, or removing tasks with negative lag
The pull request you sent on Sun, 8 Oct 2023 11:32:52 +0200:
The pull request you sent on Sun, 8 Oct 2023 11:32:52 +0200:
Quoted 1 line
git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.gitsched-urgent-2023-10-08
has been merged into torvalds/linux.git:
https://git.kernel.org/torvalds/c/f707e40d0b513fde7e1b1aebe625907f20c9df76
Thank you!
Signature · 2 lines
Deet-doot-dot, I am a bot. https://korg.docs.kernel.org/prtracker.html