sched: fix onlining cpu with core scheduling active

When onlining a cpu cpupool_cpu_add() checks whether all siblings of
the new cpu are free in order to decide whether to add it to cpupool0.
In case the added cpu is not the last sibling to be onlined this test
is wrong as it only checks for all online siblings to be free. The
test should include the check for the number of siblings having
reached the scheduling granularity of cpupool0, too.

Signed-off-by: Juergen Gross <jgross@suse.com>
Reviewed-by: Dario Faggioli <dfaggioli@suse.com>
master commit: 4c7d340f75
master date: 2020-03-24 17:36:44 +0100
This commit is contained in:
Juergen Gross authored and Jan Beulich committed 2020-04-09 09:10:55 +02:00
1 parent e9fdf6a455
commit 6a5ebbb1fc
1 file changed
+2 -1
+2 -1
View File
@@ -615,7 +615,8 @@ static int cpupool_cpu_add(unsigned int cpu)
get_sched_res(cpu)->cpupool = NULL;
cpus = sched_get_opt_cpumask(cpupool0->gran, cpu);
if ( cpumask_subset(cpus, &cpupool_free_cpus) )
if ( cpumask_subset(cpus, &cpupool_free_cpus) &&
cpumask_weight(cpus) == cpupool_get_granularity(cpupool0) )
ret = cpupool_assign_cpu_locked(cpupool0, cpu);
rcu_read_unlock(&sched_res_rculock);
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.