diff options
author | Rusty Russell <rusty@rustcorp.com.au> | 2009-12-01 22:39:16 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-12-02 04:27:16 -0500 |
commit | bdddd2963c0264c56f18043f6fa829d3c1d3d1c0 (patch) | |
tree | b3d886be91ddcf99e3b83c120aedebb840ff75df /kernel | |
parent | 8592e6486a177a02f048567cb928bc3a1f9a86c3 (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>
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/sched.c | 5 |
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 */ |
8062 | static int __init isolated_cpu_setup(char *str) | 8062 | static 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(); |