Skip to content

Commit e2a1f85

Browse files
yangyang20220519Peter Zijlstra
authored andcommitted
sched/psi: Avoid resetting the min update period when it is unnecessary
Psi_group's poll_min_period is determined by the minimum window size of psi_trigger when creating new triggers. While destroying a psi_trigger, there is no need to reset poll_min_period if the psi_trigger being destroyed did not have the minimum window size, since in this condition poll_min_period will remain the same as before. Signed-off-by: Yang Yang <[email protected]> Signed-off-by: Peter Zijlstra (Intel) <[email protected]> Acked-by: Suren Baghdasaryan <[email protected]> Link: https://lkml.kernel.org/r/[email protected]
1 parent a6fcdd8 commit e2a1f85

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

kernel/sched/psi.c

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1407,11 +1407,16 @@ void psi_trigger_destroy(struct psi_trigger *t)
14071407
group->rtpoll_nr_triggers[t->state]--;
14081408
if (!group->rtpoll_nr_triggers[t->state])
14091409
group->rtpoll_states &= ~(1 << t->state);
1410-
/* reset min update period for the remaining triggers */
1411-
list_for_each_entry(tmp, &group->rtpoll_triggers, node)
1412-
period = min(period, div_u64(tmp->win.size,
1413-
UPDATES_PER_WINDOW));
1414-
group->rtpoll_min_period = period;
1410+
/*
1411+
* Reset min update period for the remaining triggers
1412+
* iff the destroying trigger had the min window size.
1413+
*/
1414+
if (group->rtpoll_min_period == div_u64(t->win.size, UPDATES_PER_WINDOW)) {
1415+
list_for_each_entry(tmp, &group->rtpoll_triggers, node)
1416+
period = min(period, div_u64(tmp->win.size,
1417+
UPDATES_PER_WINDOW));
1418+
group->rtpoll_min_period = period;
1419+
}
14151420
/* Destroy rtpoll_task when the last trigger is destroyed */
14161421
if (group->rtpoll_states == 0) {
14171422
group->rtpoll_until = 0;

0 commit comments

Comments
 (0)