Re: 2 CPUs, but only one is used
From: Giuliano Pochini <hidden>
Date: 2006-12-25 10:53:09
On Sun, 24 Dec 2006 23:52:51 -0600 Nathan Lynch [off-list ref] wrote:
quoted hunk ↗ jump to hunk
quoted
At the end of kernel/cpu.c::cpu_up() both cpus are set as present, possible and online. The problem is that in kernel/sched.c::find_idlest_group() p->cpus_allowed is always 1 (it should be 3). I tried to put a dump_stack() or a printk(mask) in set_cpu_mask() but it crashes badly when mask is not 3, ie. anything different from khelper or kthread, so I couldn't know what sets the wrong cpumask.Does this fix it?diff --git a/kernel/sched.c b/kernel/sched.c index b515e3c..3c8b1c5 100644 --- a/kernel/sched.c +++ b/kernel/sched.c@@ -6875,7 +6875,7 @@ void __init sched_init_smp(void) lock_cpu_hotplug(); arch_init_sched_domains(&cpu_online_map); - cpus_andnot(non_isolated_cpus, cpu_online_map, cpu_isolated_map); + cpus_andnot(non_isolated_cpus, cpu_possible_map, cpu_isolated_map); if (cpus_empty(non_isolated_cpus)) cpu_set(smp_processor_id(), non_isolated_cpus); unlock_cpu_hotplug();
Yes, it does. I also tested if tasks are migrated to/off cpu1 when I enable/disable it and when I boot with or without maxcpus=1. It seems to work correctly in all cases. Thank you. -- Giuliano.