Commit 6f28c4a8 authored by Dawei Li's avatar Dawei Li Committed by Thomas Gleixner
Browse files

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: default avatarDawei Li <dawei.li@shingroup.cn>
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Link: https://lore.kernel.org/r/20240416085454.3547175-8-dawei.li@shingroup.cn
parent a7fb69ff
Loading
Loading
Loading
Loading
+3 −10
Original line number Diff line number Diff line
@@ -439,13 +439,8 @@ static int cpuidle_coupled_clear_pokes(int cpu)

static bool cpuidle_coupled_any_pokes_pending(struct cpuidle_coupled *coupled)
{
	cpumask_t cpus;
	int ret;

	cpumask_and(&cpus, cpu_online_mask, &coupled->coupled_cpus);
	ret = cpumask_and(&cpus, &cpuidle_coupled_poke_pending, &cpus);

	return ret;
	return cpumask_first_and_and(cpu_online_mask, &coupled->coupled_cpus,
				     &cpuidle_coupled_poke_pending) < nr_cpu_ids;
}

/**
@@ -626,9 +621,7 @@ int cpuidle_enter_state_coupled(struct cpuidle_device *dev,

static void cpuidle_coupled_update_online_cpus(struct cpuidle_coupled *coupled)
{
	cpumask_t cpus;
	cpumask_and(&cpus, cpu_online_mask, &coupled->coupled_cpus);
	coupled->online_count = cpumask_weight(&cpus);
	coupled->online_count = cpumask_weight_and(cpu_online_mask, &coupled->coupled_cpus);
}

/**