Skip to content

Commit fcc9276

Browse files
jlelliPeter Zijlstra
authored andcommitted
sched/deadline: Reset extra_bw to max_bw when clearing root domains
dl_clear_root_domain() doesn't take into account the fact that per-rq extra_bw variables retain values computed before root domain changes, resulting in broken accounting. Fix it by resetting extra_bw to max_bw before restoring back dl-servers contributions. Fixes: 2ff899e ("sched/deadline: Rebuild root domain accounting after every update") Reported-by: Marcel Ziswiler <marcel.ziswiler@codethink.co.uk> Signed-off-by: Juri Lelli <juri.lelli@redhat.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Tested-by: Marcel Ziswiler <marcel.ziswiler@codethink.co.uk> # nuc & rock5b Link: https://lore.kernel.org/r/20250627115118.438797-3-juri.lelli@redhat.com
1 parent 9f239df commit fcc9276

1 file changed

Lines changed: 7 additions & 0 deletions

File tree

kernel/sched/deadline.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2924,7 +2924,14 @@ void dl_clear_root_domain(struct root_domain *rd)
29242924
int i;
29252925

29262926
guard(raw_spinlock_irqsave)(&rd->dl_bw.lock);
2927+
2928+
/*
2929+
* Reset total_bw to zero and extra_bw to max_bw so that next
2930+
* loop will add dl-servers contributions back properly,
2931+
*/
29272932
rd->dl_bw.total_bw = 0;
2933+
for_each_cpu(i, rd->span)
2934+
cpu_rq(i)->dl.extra_bw = cpu_rq(i)->dl.max_bw;
29282935

29292936
/*
29302937
* dl_servers are not tasks. Since dl_add_task_root_domain ignores

0 commit comments

Comments
 (0)