aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRusty Russell <rusty@rustcorp.com.au>2015-03-04 19:19:19 -0500
committerRusty Russell <rusty@rustcorp.com.au>2015-03-09 23:24:42 -0400
commitcdfdef75e795fb5ab76c66f3329e509f3ab8b9b5 (patch)
tree3e6ba270aadabfa764ceed44c2347f059cdcfe56
parentc8ed00107b60b4a890798677d75e5c2910f393bb (diff)
cpumask: only allocate nr_cpumask_bits.
Now we'll find out the hard way if anyone has CPUMASK_OFFSTACK and is returning these or assigning them. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
-rw-r--r--include/linux/cpumask.h5
-rw-r--r--lib/cpumask.c7
2 files changed, 2 insertions, 10 deletions
diff --git a/include/linux/cpumask.h b/include/linux/cpumask.h
index 646fadee5caf..4ad2d3c8e21f 100644
--- a/include/linux/cpumask.h
+++ b/include/linux/cpumask.h
@@ -11,6 +11,7 @@
11#include <linux/bitmap.h> 11#include <linux/bitmap.h>
12#include <linux/bug.h> 12#include <linux/bug.h>
13 13
14/* Don't assign or return these: may not be this big! */
14typedef struct cpumask { DECLARE_BITMAP(bits, NR_CPUS); } cpumask_t; 15typedef struct cpumask { DECLARE_BITMAP(bits, NR_CPUS); } cpumask_t;
15 16
16/** 17/**
@@ -609,9 +610,7 @@ static inline int cpulist_parse(const char *buf, struct cpumask *dstp)
609 */ 610 */
610static inline size_t cpumask_size(void) 611static inline size_t cpumask_size(void)
611{ 612{
612 /* FIXME: Once all cpumask assignments are eliminated, this 613 return BITS_TO_LONGS(nr_cpumask_bits) * sizeof(long);
613 * can be nr_cpumask_bits */
614 return BITS_TO_LONGS(NR_CPUS) * sizeof(long);
615} 614}
616 615
617/* 616/*
diff --git a/lib/cpumask.c b/lib/cpumask.c
index b6513a9f2892..ba379d12bb57 100644
--- a/lib/cpumask.c
+++ b/lib/cpumask.c
@@ -89,13 +89,6 @@ bool alloc_cpumask_var_node(cpumask_var_t *mask, gfp_t flags, int node)
89 dump_stack(); 89 dump_stack();
90 } 90 }
91#endif 91#endif
92 /* FIXME: Bandaid to save us from old primitives which go to NR_CPUS. */
93 if (*mask) {
94 unsigned char *ptr = (unsigned char *)cpumask_bits(*mask);
95 unsigned int tail;
96 tail = BITS_TO_LONGS(NR_CPUS - nr_cpumask_bits) * sizeof(long);
97 memset(ptr + cpumask_size() - tail, 0, tail);
98 }
99 92
100 return *mask != NULL; 93 return *mask != NULL;
101} 94}