summaryrefslogtreecommitdiff
path: root/drivers/perf/arm_pmu_platform.c
diff options
context:
space:
mode:
authorMarc Zyngier <maz@kernel.org>2025-10-20 13:29:25 +0100
committerThomas Gleixner <tglx@linutronix.de>2025-10-27 17:16:33 +0100
commit663783e0013e97e18cc167139ab4319bbeaea399 (patch)
tree59c642941b883486330fffa1fa8a72e74739c4ce /drivers/perf/arm_pmu_platform.c
parent541454dd204b66c9f03761e00a28ad9702b24829 (diff)
downloadlinux-next-663783e0013e97e18cc167139ab4319bbeaea399.tar.gz
linux-next-663783e0013e97e18cc167139ab4319bbeaea399.zip
perf: arm_pmu: Convert to the new interrupt affinity retrieval API
Now that the relevant interrupt controllers are equipped with a callback returning the affinity of per-CPU interrupts, switch the OF side of the ARM PMU driver over to this new method. Signed-off-by: Marc Zyngier <maz@kernel.org> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Tested-by: Will Deacon <will@kernel.org> Reviewed-by: Jinjie Ruan <ruanjinjie@huawei.com> Link: https://patch.msgid.link/20251020122944.3074811-9-maz@kernel.org
Diffstat (limited to 'drivers/perf/arm_pmu_platform.c')
-rw-r--r--drivers/perf/arm_pmu_platform.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/drivers/perf/arm_pmu_platform.c b/drivers/perf/arm_pmu_platform.c
index 118170a5cede..9c0494d8a867 100644
--- a/drivers/perf/arm_pmu_platform.c
+++ b/drivers/perf/arm_pmu_platform.c
@@ -42,14 +42,13 @@ static int probe_current_pmu(struct arm_pmu *pmu,
return ret;
}
-static int pmu_parse_percpu_irq(struct arm_pmu *pmu, int irq)
+static int pmu_parse_percpu_irq(struct arm_pmu *pmu, int irq,
+ const struct cpumask *affinity)
{
- int cpu, ret;
struct pmu_hw_events __percpu *hw_events = pmu->hw_events;
+ int cpu;
- ret = irq_get_percpu_devid_partition(irq, &pmu->supported_cpus);
- if (ret)
- return ret;
+ cpumask_copy(&pmu->supported_cpus, affinity);
for_each_cpu(cpu, &pmu->supported_cpus)
per_cpu(hw_events->irq, cpu) = irq;
@@ -115,9 +114,12 @@ static int pmu_parse_irqs(struct arm_pmu *pmu)
}
if (num_irqs == 1) {
- int irq = platform_get_irq(pdev, 0);
+ const struct cpumask *affinity;
+ int irq;
+
+ irq = platform_get_irq_affinity(pdev, 0, &affinity);
if ((irq > 0) && irq_is_percpu_devid(irq))
- return pmu_parse_percpu_irq(pmu, irq);
+ return pmu_parse_percpu_irq(pmu, irq, affinity);
}
if (nr_cpu_ids != 1 && !pmu_has_irq_affinity(dev->of_node))