diff options
author | Rusty Russell <rusty@rustcorp.com.au> | 2015-03-05 03:19:19 +0300 |
---|---|---|
committer | Rusty Russell <rusty@rustcorp.com.au> | 2015-03-10 06:24:42 +0300 |
commit | cdfdef75e795fb5ab76c66f3329e509f3ab8b9b5 (patch) | |
tree | 3e6ba270aadabfa764ceed44c2347f059cdcfe56 | |
parent | c8ed00107b60b4a890798677d75e5c2910f393bb (diff) | |
download | linux-cdfdef75e795fb5ab76c66f3329e509f3ab8b9b5.tar.xz |
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.h | 5 | ||||
-rw-r--r-- | lib/cpumask.c | 7 |
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 @@ #include <linux/bitmap.h> #include <linux/bug.h> +/* Don't assign or return these: may not be this big! */ typedef struct cpumask { DECLARE_BITMAP(bits, NR_CPUS); } cpumask_t; /** @@ -609,9 +610,7 @@ static inline int cpulist_parse(const char *buf, struct cpumask *dstp) */ static inline size_t cpumask_size(void) { - /* FIXME: Once all cpumask assignments are eliminated, this - * can be nr_cpumask_bits */ - return BITS_TO_LONGS(NR_CPUS) * sizeof(long); + return BITS_TO_LONGS(nr_cpumask_bits) * sizeof(long); } /* 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) dump_stack(); } #endif - /* FIXME: Bandaid to save us from old primitives which go to NR_CPUS. */ - if (*mask) { - unsigned char *ptr = (unsigned char *)cpumask_bits(*mask); - unsigned int tail; - tail = BITS_TO_LONGS(NR_CPUS - nr_cpumask_bits) * sizeof(long); - memset(ptr + cpumask_size() - tail, 0, tail); - } return *mask != NULL; } |