Skip to content

Commit

Permalink
cpuidle: Avoid explicit cpumask allocation on stack
Browse files Browse the repository at this point in the history
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 <[email protected]>
Signed-off-by: Thomas Gleixner <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
  • Loading branch information
Dawei Li authored and KAGA-KOKO committed Apr 24, 2024
1 parent a7fb69f commit 6f28c4a
Showing 1 changed file with 3 additions and 10 deletions.
13 changes: 3 additions & 10 deletions drivers/cpuidle/coupled.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

/**
Expand Down Expand Up @@ -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);
}

/**
Expand Down

0 comments on commit 6f28c4a

Please sign in to comment.