cpumask: Use all NR_CPUS bits unless CONFIG_CPUMASK_OFFSTACK
Impact: futureproof as we convert more code to new APIs The old cpumask operators treat all NR_CPUS bits as relevent, the new ones use nr_cpumask_bits. For large NR_CPUS and small nr_cpu_ids, this makes a difference. However, mixing the two can cause problems with undefined bits. An arch which sets CONFIG_CPUMASK_OFFSTACK should have converted across to the new operators, so it's safe in that case. (Thanks to Stephen Rothwell for bisecting the initial unused-bits bug, and Mike Travis for this solution). Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Cc: Mike Travis <travis@sgi.com>
This commit is contained in:
@ -510,9 +510,6 @@ extern cpumask_t cpu_active_map;
|
|||||||
[BITS_TO_LONGS(NR_CPUS)-1] = CPU_MASK_LAST_WORD \
|
[BITS_TO_LONGS(NR_CPUS)-1] = CPU_MASK_LAST_WORD \
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This produces more efficient code. */
|
|
||||||
#define nr_cpumask_bits NR_CPUS
|
|
||||||
|
|
||||||
#else /* NR_CPUS > BITS_PER_LONG */
|
#else /* NR_CPUS > BITS_PER_LONG */
|
||||||
|
|
||||||
#define CPU_BITS_ALL \
|
#define CPU_BITS_ALL \
|
||||||
@ -520,10 +517,16 @@ extern cpumask_t cpu_active_map;
|
|||||||
[0 ... BITS_TO_LONGS(NR_CPUS)-2] = ~0UL, \
|
[0 ... BITS_TO_LONGS(NR_CPUS)-2] = ~0UL, \
|
||||||
[BITS_TO_LONGS(NR_CPUS)-1] = CPU_MASK_LAST_WORD \
|
[BITS_TO_LONGS(NR_CPUS)-1] = CPU_MASK_LAST_WORD \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define nr_cpumask_bits nr_cpu_ids
|
|
||||||
#endif /* NR_CPUS > BITS_PER_LONG */
|
#endif /* NR_CPUS > BITS_PER_LONG */
|
||||||
|
|
||||||
|
#ifdef CONFIG_CPUMASK_OFFSTACK
|
||||||
|
/* Assuming NR_CPUS is huge, a runtime limit is more efficient. Also,
|
||||||
|
* not all bits may be allocated. */
|
||||||
|
#define nr_cpumask_bits nr_cpu_ids
|
||||||
|
#else
|
||||||
|
#define nr_cpumask_bits NR_CPUS
|
||||||
|
#endif
|
||||||
|
|
||||||
/* verify cpu argument to cpumask_* operators */
|
/* verify cpu argument to cpumask_* operators */
|
||||||
static inline unsigned int cpumask_check(unsigned int cpu)
|
static inline unsigned int cpumask_check(unsigned int cpu)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user