perf/thunderx2: Avoid placing cpumask on the stack
authorDawei Li <dawei.li@shingroup.cn>
Wed, 3 Apr 2024 15:59:50 +0000 (23:59 +0800)
committerWill Deacon <will@kernel.org>
Tue, 9 Apr 2024 15:47:16 +0000 (16:47 +0100)
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_any_and_but() to avoid the need for a temporary cpumask on
the stack.

Suggested-by: Mark Rutland <mark.rutland@arm.com>
Reviewed-by: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: Dawei Li <dawei.li@shingroup.cn>
Link: https://lore.kernel.org/r/20240403155950.2068109-11-dawei.li@shingroup.cn
Signed-off-by: Will Deacon <will@kernel.org>
drivers/perf/thunderx2_pmu.c

index f03aa85072ec339f1ba9f74849033b525556c8c2..33e8ff3e5265a5b7720c5b7d648bdb4e480cf556 100644 (file)
@@ -927,9 +927,8 @@ static int tx2_uncore_pmu_online_cpu(unsigned int cpu,
 static int tx2_uncore_pmu_offline_cpu(unsigned int cpu,
                struct hlist_node *hpnode)
 {
-       int new_cpu;
        struct tx2_uncore_pmu *tx2_pmu;
-       struct cpumask cpu_online_mask_temp;
+       unsigned int new_cpu;
 
        tx2_pmu = hlist_entry_safe(hpnode,
                        struct tx2_uncore_pmu, hpnode);
@@ -940,11 +939,8 @@ static int tx2_uncore_pmu_offline_cpu(unsigned int cpu,
        if (tx2_pmu->hrtimer_callback)
                hrtimer_cancel(&tx2_pmu->hrtimer);
 
-       cpumask_copy(&cpu_online_mask_temp, cpu_online_mask);
-       cpumask_clear_cpu(cpu, &cpu_online_mask_temp);
-       new_cpu = cpumask_any_and(
-                       cpumask_of_node(tx2_pmu->node),
-                       &cpu_online_mask_temp);
+       new_cpu = cpumask_any_and_but(cpumask_of_node(tx2_pmu->node),
+                                     cpu_online_mask, cpu);
 
        tx2_pmu->cpu = new_cpu;
        if (new_cpu >= nr_cpu_ids)