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 <[email protected]> Signed-off-by: Juri Lelli <[email protected]> Signed-off-by: Peter Zijlstra (Intel) <[email protected]> Tested-by: Marcel Ziswiler <[email protected]> # nuc & rock5b Link: https://lore.kernel.org/r/[email protected]
1 parent 9f239df commit fcc9276

File tree

1 file changed

+7
-0
lines changed

1 file changed

+7
-0
lines changed

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)