Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

cpuidle: Avoid explicit cpumask allocation on stack

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_first_and_and() and cpumask_weight_and() to avoid the need
for a temporary cpumask on the stack.

Signed-off-by: Dawei Li <dawei.li@shingroup.cn>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Link: https://lore.kernel.org/r/20240416085454.3547175-8-dawei.li@shingroup.cn

authored by

Dawei Li and committed by
Thomas Gleixner
6f28c4a8 a7fb69ff

+3 -10
+3 -10
drivers/cpuidle/coupled.c
··· 439 439 440 440 static bool cpuidle_coupled_any_pokes_pending(struct cpuidle_coupled *coupled) 441 441 { 442 - cpumask_t cpus; 443 - int ret; 444 - 445 - cpumask_and(&cpus, cpu_online_mask, &coupled->coupled_cpus); 446 - ret = cpumask_and(&cpus, &cpuidle_coupled_poke_pending, &cpus); 447 - 448 - return ret; 442 + return cpumask_first_and_and(cpu_online_mask, &coupled->coupled_cpus, 443 + &cpuidle_coupled_poke_pending) < nr_cpu_ids; 449 444 } 450 445 451 446 /** ··· 621 626 622 627 static void cpuidle_coupled_update_online_cpus(struct cpuidle_coupled *coupled) 623 628 { 624 - cpumask_t cpus; 625 - cpumask_and(&cpus, cpu_online_mask, &coupled->coupled_cpus); 626 - coupled->online_count = cpumask_weight(&cpus); 629 + coupled->online_count = cpumask_weight_and(cpu_online_mask, &coupled->coupled_cpus); 627 630 } 628 631 629 632 /**