diff options
author | Dawei Li <dawei.li@shingroup.cn> | 2024-04-03 17:59:44 +0200 |
---|---|---|
committer | Will Deacon <will@kernel.org> | 2024-04-09 17:47:15 +0200 |
commit | b5310fa1fe8e29e82dd88ef23e2f04ac533548e1 (patch) | |
tree | fd5ac7073907acfa0c941dd3444cd8109a327c0c /drivers/perf/arm_cspmu | |
parent | perf/arm-cmn: Avoid placing cpumask on the stack (diff) | |
download | linux-b5310fa1fe8e29e82dd88ef23e2f04ac533548e1.tar.xz linux-b5310fa1fe8e29e82dd88ef23e2f04ac533548e1.zip |
perf/arm_cspmu: Avoid placing cpumask on the 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_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-5-dawei.li@shingroup.cn
Signed-off-by: Will Deacon <will@kernel.org>
Diffstat (limited to 'drivers/perf/arm_cspmu')
-rw-r--r-- | drivers/perf/arm_cspmu/arm_cspmu.c | 8 |
1 files changed, 3 insertions, 5 deletions
diff --git a/drivers/perf/arm_cspmu/arm_cspmu.c b/drivers/perf/arm_cspmu/arm_cspmu.c index b9a252272f1e..fd1004251665 100644 --- a/drivers/perf/arm_cspmu/arm_cspmu.c +++ b/drivers/perf/arm_cspmu/arm_cspmu.c @@ -1322,8 +1322,7 @@ static int arm_cspmu_cpu_online(unsigned int cpu, struct hlist_node *node) static int arm_cspmu_cpu_teardown(unsigned int cpu, struct hlist_node *node) { - int dst; - struct cpumask online_supported; + unsigned int dst; struct arm_cspmu *cspmu = hlist_entry_safe(node, struct arm_cspmu, cpuhp_node); @@ -1333,9 +1332,8 @@ static int arm_cspmu_cpu_teardown(unsigned int cpu, struct hlist_node *node) return 0; /* Choose a new CPU to migrate ownership of the PMU to */ - cpumask_and(&online_supported, &cspmu->associated_cpus, - cpu_online_mask); - dst = cpumask_any_but(&online_supported, cpu); + dst = cpumask_any_and_but(&cspmu->associated_cpus, + cpu_online_mask, cpu); if (dst >= nr_cpu_ids) return 0; |