aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRusty Russell <rusty@rustcorp.com.au>2009-12-01 22:39:16 -0500
committerIngo Molnar <mingo@elte.hu>2009-12-02 04:27:16 -0500
commitbdddd2963c0264c56f18043f6fa829d3c1d3d1c0 (patch)
treeb3d886be91ddcf99e3b83c120aedebb840ff75df
parent8592e6486a177a02f048567cb928bc3a1f9a86c3 (diff)
sched: Fix isolcpus boot option
Anton Blanchard wrote: > We allocate and zero cpu_isolated_map after the isolcpus > __setup option has run. This means cpu_isolated_map always > ends up empty and if CPUMASK_OFFSTACK is enabled we write to a > cpumask that hasn't been allocated. I introduced this regression in 49557e620339cb13 (sched: Fix boot crash by zalloc()ing most of the cpu masks). Use the bootmem allocator if they set isolcpus=, otherwise allocate and zero like normal. Reported-by: Anton Blanchard <anton@samba.org> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Cc: peterz@infradead.org Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: <stable@kernel.org> LKML-Reference: <200912021409.17013.rusty@rustcorp.com.au> Signed-off-by: Ingo Molnar <mingo@elte.hu> Tested-by: Anton Blanchard <anton@samba.org>
-rw-r--r--kernel/sched.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/kernel/sched.c b/kernel/sched.c
index 1031cae39c4c..4883fee99314 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -8061,6 +8061,7 @@ static cpumask_var_t cpu_isolated_map;
8061/* Setup the mask of cpus configured for isolated domains */ 8061/* Setup the mask of cpus configured for isolated domains */
8062static int __init isolated_cpu_setup(char *str) 8062static int __init isolated_cpu_setup(char *str)
8063{ 8063{
8064 alloc_bootmem_cpumask_var(&cpu_isolated_map);
8064 cpulist_parse(str, cpu_isolated_map); 8065 cpulist_parse(str, cpu_isolated_map);
8065 return 1; 8066 return 1;
8066} 8067}
@@ -9609,7 +9610,9 @@ void __init sched_init(void)
9609 zalloc_cpumask_var(&nohz.cpu_mask, GFP_NOWAIT); 9610 zalloc_cpumask_var(&nohz.cpu_mask, GFP_NOWAIT);
9610 alloc_cpumask_var(&nohz.ilb_grp_nohz_mask, GFP_NOWAIT); 9611 alloc_cpumask_var(&nohz.ilb_grp_nohz_mask, GFP_NOWAIT);
9611#endif 9612#endif
9612 zalloc_cpumask_var(&cpu_isolated_map, GFP_NOWAIT); 9613 /* May be allocated at isolcpus cmdline parse time */
9614 if (cpu_isolated_map == NULL)
9615 zalloc_cpumask_var(&cpu_isolated_map, GFP_NOWAIT);
9613#endif /* SMP */ 9616#endif /* SMP */
9614 9617
9615 perf_event_init(); 9618 perf_event_init();