BITS_PER_LONG is too broad, the max number of usable bits is limited by nr_cpumask_bits. Found while debugging a system with CONFIG_DEBUG_PER_CPU_MAPS enabled.
Signed-off-by: Richard Weinberger <rich...@nod.at> --- kernel/cobalt/sched.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kernel/cobalt/sched.c b/kernel/cobalt/sched.c index 88c4951ed814..aa65fd7f5d63 100644 --- a/kernel/cobalt/sched.c +++ b/kernel/cobalt/sched.c @@ -1370,7 +1370,7 @@ static int affinity_vfile_show(struct xnvfile_regular_iterator *it, unsigned long val = 0; int cpu; - for (cpu = 0; cpu < BITS_PER_LONG; cpu++) + for (cpu = 0; cpu < nr_cpumask_bits; cpu++) if (cpumask_test_cpu(cpu, &cobalt_cpu_affinity)) val |= (1UL << cpu); @@ -1395,7 +1395,7 @@ static ssize_t affinity_vfile_store(struct xnvfile_input *input) affinity = xnsched_realtime_cpus; /* Reset to default. */ else { cpumask_clear(&affinity); - for (cpu = 0; cpu < BITS_PER_LONG; cpu++, val >>= 1) { + for (cpu = 0; cpu < nr_cpumask_bits; cpu++, val >>= 1) { if (val & 1) { /* * The new dynamic affinity must be a strict -- 2.26.2