]> xenbits.xensource.com Git - people/sstabellini/xen-unstable.git/.git/commitdiff
xen: fix for_each_cpu when NR_CPUS=1
authorDario Faggioli <dfaggioli@suse.com>
Fri, 12 Mar 2021 16:02:47 +0000 (17:02 +0100)
committerJan Beulich <jbeulich@suse.com>
Fri, 12 Mar 2021 16:02:47 +0000 (17:02 +0100)
When running an hypervisor build with NR_CPUS=1 for_each_cpu does not
take into account whether the bit of the CPU is set or not in the
provided mask.

This means that whatever we have in the bodies of these loops is always
done once, even if the mask was empty and it should never be done. This
is clearly a bug and was in fact causing an assert to trigger in credit2
code.

Removing the special casing of NR_CPUS == 1 makes things work again.

Reported-by: Roger Pau Monné <roger.pau@citrix.com>
Signed-off-by: Dario Faggioli <dfaggioli@suse.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
Release-Acked-by: Ian Jackson <iwj@xenproject.org>
xen/include/xen/cpumask.h

index 256b60b106a3d44643ee16859d22152fb2c339a6..e69589fc08904ca6e12c3fd5662d4eba046f88ca 100644 (file)
@@ -368,15 +368,10 @@ static inline void free_cpumask_var(cpumask_var_t mask)
 #define FREE_CPUMASK_VAR(m) free_cpumask_var(m)
 #endif
 
-#if NR_CPUS > 1
 #define for_each_cpu(cpu, mask)                        \
        for ((cpu) = cpumask_first(mask);       \
             (cpu) < nr_cpu_ids;                \
             (cpu) = cpumask_next(cpu, mask))
-#else /* NR_CPUS == 1 */
-#define for_each_cpu(cpu, mask)                        \
-       for ((cpu) = 0; (cpu) < 1; (cpu)++, (void)(mask))
-#endif /* NR_CPUS */
 
 /*
  * The following particular system cpumasks and operations manage