diff options
author | Mike Travis <travis@sgi.com> | 2008-12-19 01:26:37 -0500 |
---|---|---|
committer | Rusty Russell <rusty@rustcorp.com.au> | 2008-12-19 01:26:37 -0500 |
commit | 7b4967c532045a1983d6d4af5c69cc7c5109f62b (patch) | |
tree | 50f385985ed028b5316c1aad4b70ad08bd932e81 /lib | |
parent | 7be7585393d311866653564fbcd10a3232773c0b (diff) |
cpumask: Add alloc_cpumask_var_node()
Impact: New API
This will be needed in x86 code to allocate the domain and old_domain
cpumasks on the same node as where the containing irq_cfg struct is
allocated.
(Also fixes double-dump_stack on rare CONFIG_DEBUG_PER_CPU_MAPS case)
Signed-off-by: Mike Travis <travis@sgi.com>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (re-impl alloc_cpumask_var)
Diffstat (limited to 'lib')
-rw-r--r-- | lib/cpumask.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/lib/cpumask.c b/lib/cpumask.c index 8d03f22c6ced..3f258f58c85b 100644 --- a/lib/cpumask.c +++ b/lib/cpumask.c | |||
@@ -76,15 +76,14 @@ int cpumask_any_but(const struct cpumask *mask, unsigned int cpu) | |||
76 | 76 | ||
77 | /* These are not inline because of header tangles. */ | 77 | /* These are not inline because of header tangles. */ |
78 | #ifdef CONFIG_CPUMASK_OFFSTACK | 78 | #ifdef CONFIG_CPUMASK_OFFSTACK |
79 | bool alloc_cpumask_var(cpumask_var_t *mask, gfp_t flags) | 79 | bool alloc_cpumask_var_node(cpumask_var_t *mask, gfp_t flags, int node) |
80 | { | 80 | { |
81 | if (likely(slab_is_available())) | 81 | if (likely(slab_is_available())) |
82 | *mask = kmalloc(cpumask_size(), flags); | 82 | *mask = kmalloc_node(cpumask_size(), flags, node); |
83 | else { | 83 | else { |
84 | #ifdef CONFIG_DEBUG_PER_CPU_MAPS | 84 | #ifdef CONFIG_DEBUG_PER_CPU_MAPS |
85 | printk(KERN_ERR | 85 | printk(KERN_ERR |
86 | "=> alloc_cpumask_var: kmalloc not available!\n"); | 86 | "=> alloc_cpumask_var: kmalloc not available!\n"); |
87 | dump_stack(); | ||
88 | #endif | 87 | #endif |
89 | *mask = NULL; | 88 | *mask = NULL; |
90 | } | 89 | } |
@@ -96,6 +95,12 @@ bool alloc_cpumask_var(cpumask_var_t *mask, gfp_t flags) | |||
96 | #endif | 95 | #endif |
97 | return *mask != NULL; | 96 | return *mask != NULL; |
98 | } | 97 | } |
98 | EXPORT_SYMBOL(alloc_cpumask_var_node); | ||
99 | |||
100 | bool alloc_cpumask_var(cpumask_var_t *mask, gfp_t flags) | ||
101 | { | ||
102 | return alloc_cpumask_var_node(mask, flags, numa_node_id()); | ||
103 | } | ||
99 | EXPORT_SYMBOL(alloc_cpumask_var); | 104 | EXPORT_SYMBOL(alloc_cpumask_var); |
100 | 105 | ||
101 | void __init alloc_bootmem_cpumask_var(cpumask_var_t *mask) | 106 | void __init alloc_bootmem_cpumask_var(cpumask_var_t *mask) |