cpumask: only allocate nr_cpumask_bits.
authorRusty Russell <rusty@rustcorp.com.au>
Thu, 5 Mar 2015 00:19:19 +0000 (10:49 +1030)
committerRusty Russell <rusty@rustcorp.com.au>
Tue, 10 Mar 2015 03:24:42 +0000 (13:54 +1030)
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>
include/linux/cpumask.h
lib/cpumask.c

index 646fadee5caf456a29cfe9fef4b3f6832262f830..4ad2d3c8e21f30c22f9c333a4b633e18fdfb56b1 100644 (file)
@@ -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);
 }
 
 /*
index b6513a9f2892042a8a49a5bc872c0ca33990e2d8..ba379d12bb57e32640d8892b3c39041d53e40bb4 100644 (file)
@@ -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;
 }