On 2024-04-24 04:55, Dawei Li wrote: > In general it's preferable to avoid placing cpumasks on the stack, as > for large values of NR_CPUS these can consume significant amounts of > stack space and make stack overflows more likely. > > Use cpumask_subset() and cpumask_first_and() to avoid the need for a > temporary cpumask on the stack. > > Reviewed-by: Sam Ravnborg <sam@xxxxxxxxxxxx> > Signed-off-by: Dawei Li <dawei.li@xxxxxxxxxxxx> > --- > arch/sparc/kernel/leon_kernel.c | 7 +++---- > 1 file changed, 3 insertions(+), 4 deletions(-) > > diff --git a/arch/sparc/kernel/leon_kernel.c b/arch/sparc/kernel/leon_kernel.c > index 4c61da491fee..a43cf794bb1e 100644 > --- a/arch/sparc/kernel/leon_kernel.c > +++ b/arch/sparc/kernel/leon_kernel.c > @@ -106,13 +106,12 @@ unsigned long leon_get_irqmask(unsigned int irq) > #ifdef CONFIG_SMP > static int irq_choose_cpu(const struct cpumask *affinity) > { > - cpumask_t mask; > + unsigned int cpu = cpumask_first_and(affinity, cpu_online_mask); > > - cpumask_and(&mask, cpu_online_mask, affinity); > - if (cpumask_equal(&mask, cpu_online_mask) || cpumask_empty(&mask)) > + if (cpumask_subset(cpu_online_mask, affinity) || cpu >= nr_cpu_ids) > return boot_cpu_id; > else > - return cpumask_first(&mask); > + return cpu; > } > #else > #define irq_choose_cpu(affinity) boot_cpu_id Reviewed-by: Andreas Larsson <andreas@xxxxxxxxxxx> Tested-by: Andreas Larsson <andreas@xxxxxxxxxxx> Picking this up to my for-next. Thanks, Andreas