summaryrefslogtreecommitdiff
path: root/lib/debugobjects.c
diff options
context:
space:
mode:
authorJeffrey Hugo <jhugo@codeaurora.org>2017-05-19 23:49:11 -0400
committerGeorg Veichtlbauer <georg@vware.at>2023-07-16 12:47:43 +0200
commit8d8a48aecde5c4be6c57b9108dc22e8e0cd7f235 (patch)
treef5182397801b5c9b90d4962637675023c647d1e5 /lib/debugobjects.c
parenteccc8acbe705a20e0911ea776371d84eba53cc8e (diff)
sched/fair: Fix load_balance() affinity redo path
If load_balance() fails to migrate any tasks because all tasks were affined, load_balance() removes the source cpu from consideration and attempts to redo and balance among the new subset of cpus. There is a bug in this code path where the algorithm considers all active cpus in the system (minus the source that was just masked out). This is not valid for two reasons: some active cpus may not be in the current scheduling domain and one of the active cpus is dst_cpu. These cpus should not be considered, as we cannot pull load from them. Instead of failing out of load_balance(), we may end up redoing the search with no valid cpus and incorrectly concluding the domain is balanced. Additionally, if the group_imbalance flag was just set, it may also be incorrectly unset, thus the flag will not be seen by other cpus in future load_balance() runs as that algorithm intends. Fix the check by removing cpus not in the current domain and the dst_cpu from considertation, thus limiting the evaluation to valid remaining cpus from which load might be migrated. Co-authored-by: Austin Christ <austinwc@codeaurora.org> Co-authored-by: Dietmar Eggemann <dietmar.eggemann@arm.com> Signed-off-by: Jeffrey Hugo <jhugo@codeaurora.org> Tested-by: Tyler Baicar <tbaicar@codeaurora.org> Change-Id: Ife6701c9c62e7155493d9db9398f08c4474e94b3
Diffstat (limited to 'lib/debugobjects.c')
0 files changed, 0 insertions, 0 deletions