aboutsummaryrefslogtreecommitdiffstats
path: root/lib/cpumask.c
diff options
context:
space:
mode:
authorMike Travis <travis@sgi.com>2008-12-19 01:26:37 -0500
committerRusty Russell <rusty@rustcorp.com.au>2008-12-19 01:26:37 -0500
commit7b4967c532045a1983d6d4af5c69cc7c5109f62b (patch)
tree50f385985ed028b5316c1aad4b70ad08bd932e81 /lib/cpumask.c
parent7be7585393d311866653564fbcd10a3232773c0b (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/cpumask.c')
-rw-r--r--lib/cpumask.c11
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
79bool alloc_cpumask_var(cpumask_var_t *mask, gfp_t flags) 79bool 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}
98EXPORT_SYMBOL(alloc_cpumask_var_node);
99
100bool alloc_cpumask_var(cpumask_var_t *mask, gfp_t flags)
101{
102 return alloc_cpumask_var_node(mask, flags, numa_node_id());
103}
99EXPORT_SYMBOL(alloc_cpumask_var); 104EXPORT_SYMBOL(alloc_cpumask_var);
100 105
101void __init alloc_bootmem_cpumask_var(cpumask_var_t *mask) 106void __init alloc_bootmem_cpumask_var(cpumask_var_t *mask)