powercap: DTPM: Avoid explicit cpumask allocation on stack
authorDawei Li <dawei.li@shingroup.cn>
Mon, 15 Apr 2024 09:48:21 +0000 (17:48 +0800)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Tue, 16 Apr 2024 11:33:03 +0000 (13:33 +0200)
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_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: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/powercap/dtpm_cpu.c

index bc90126f1b5f60e3cef1f677ee05aef0c8cc8595..6b6f51b215501b36c7cd08871c3ec7f50e13cf37 100644 (file)
@@ -43,13 +43,11 @@ static u64 set_pd_power_limit(struct dtpm *dtpm, u64 power_limit)
        struct dtpm_cpu *dtpm_cpu = to_dtpm_cpu(dtpm);
        struct em_perf_domain *pd = em_cpu_get(dtpm_cpu->cpu);
        struct em_perf_state *table;
-       struct cpumask cpus;
        unsigned long freq;
        u64 power;
        int i, nr_cpus;
 
-       cpumask_and(&cpus, cpu_online_mask, to_cpumask(pd->cpus));
-       nr_cpus = cpumask_weight(&cpus);
+       nr_cpus = cpumask_weight_and(cpu_online_mask, to_cpumask(pd->cpus));
 
        rcu_read_lock();
        table = em_perf_state_from_pd(pd);
@@ -123,11 +121,9 @@ static int update_pd_power_uw(struct dtpm *dtpm)
        struct dtpm_cpu *dtpm_cpu = to_dtpm_cpu(dtpm);
        struct em_perf_domain *em = em_cpu_get(dtpm_cpu->cpu);
        struct em_perf_state *table;
-       struct cpumask cpus;
        int nr_cpus;
 
-       cpumask_and(&cpus, cpu_online_mask, to_cpumask(em->cpus));
-       nr_cpus = cpumask_weight(&cpus);
+       nr_cpus = cpumask_weight_and(cpu_online_mask, to_cpumask(em->cpus));
 
        rcu_read_lock();
        table = em_perf_state_from_pd(em);