summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorDawei Li <dawei.li@shingroup.cn>2024-04-03 17:59:44 +0200
committerWill Deacon <will@kernel.org>2024-04-09 17:47:15 +0200
commitb5310fa1fe8e29e82dd88ef23e2f04ac533548e1 (patch)
treefd5ac7073907acfa0c941dd3444cd8109a327c0c /drivers
parentperf/arm-cmn: Avoid placing cpumask on the stack (diff)
downloadlinux-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')
-rw-r--r--drivers/perf/arm_cspmu/arm_cspmu.c8
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;