On 14.03.22 22:13, Bezdeka, Florian via Xenomai wrote: > On Mon, 2022-03-14 at 21:05 +0000, Bezdeka, Florian via Xenomai wrote: >> Hi Richard, >> >> On Mon, 2022-03-14 at 21:38 +0100, Richard Weinberger via Xenomai >> wrote: >>> BITS_PER_LONG is too broad, the max number of usable bits is limited >>> by nr_cpumask_bits. >> >> I agree, BITS_PER_LONG seems wrong. But couldn't it be too small as >> well? It depends on NR_CPUS which might be > BITS_PER_LONG. > > Sorry that was unclear. I assume that the size of the cpumask depends > somehow on NR_CPUS, which might be > BITS_PER_LONG. So BITS_PER_LONG > might be too small AND might be too broad. >
Good hint, I've adjusted this on merge. Thanks, Jan >> >> Regards, >> Florian >> >>> 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 >> > -- Siemens AG, Technology Competence Center Embedded Linux