Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cdfdef75 authored by Rusty Russell's avatar Rusty Russell
Browse files

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: default avatarRusty Russell <rusty@rustcorp.com.au>
parent c8ed0010
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -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);
}

/*
+0 −7
Original line number Diff line number Diff line
@@ -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;
}