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>
This commit is contained in:
Родитель
c8ed00107b
Коммит
cdfdef75e7
|
@ -11,6 +11,7 @@
|
||||||
#include <linux/bitmap.h>
|
#include <linux/bitmap.h>
|
||||||
#include <linux/bug.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;
|
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)
|
static inline size_t cpumask_size(void)
|
||||||
{
|
{
|
||||||
/* FIXME: Once all cpumask assignments are eliminated, this
|
return BITS_TO_LONGS(nr_cpumask_bits) * sizeof(long);
|
||||||
* can be nr_cpumask_bits */
|
|
||||||
return BITS_TO_LONGS(NR_CPUS) * sizeof(long);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -89,13 +89,6 @@ bool alloc_cpumask_var_node(cpumask_var_t *mask, gfp_t flags, int node)
|
||||||
dump_stack();
|
dump_stack();
|
||||||
}
|
}
|
||||||
#endif
|
#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;
|
return *mask != NULL;
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче