diff options
author | Mark Rutland <mark.rutland@arm.com> | 2022-09-30 14:18:42 +0300 |
---|---|---|
committer | Will Deacon <will@kernel.org> | 2022-11-07 19:16:19 +0300 |
commit | ad51b5043bb39e0d715e8ad910fa5ac899ebc70b (patch) | |
tree | 25319060600e9973c6489efb7eee4046ab1c8702 /drivers/perf | |
parent | 05da178ce0aa152f0592e10fa874054187f3621b (diff) | |
download | linux-ad51b5043bb39e0d715e8ad910fa5ac899ebc70b.tar.xz |
arm_pmu: acpi: factor out PMU<->CPU association
A subsequent patch will rework the ACPI probing of PMUs, and we'll need
to associate a CPU with a PMU in two separate paths.
Factor out the association logic into a helper function so that it can
be reused.
There should be no functional change as a result of this patch.
Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Cc: Pierre Gondois <pierre.gondois@arm.com>
Cc: Will Deacon <will@kernel.org>
Reviewed-and-tested-by: Pierre Gondois <pierre.gondois@arm.com>
Link: https://lore.kernel.org/r/20220930111844.1522365-2-mark.rutland@arm.com
Signed-off-by: Will Deacon <will@kernel.org>
Diffstat (limited to 'drivers/perf')
-rw-r--r-- | drivers/perf/arm_pmu_acpi.c | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/drivers/perf/arm_pmu_acpi.c b/drivers/perf/arm_pmu_acpi.c index 96ffadd654ff..a52a4aafd629 100644 --- a/drivers/perf/arm_pmu_acpi.c +++ b/drivers/perf/arm_pmu_acpi.c @@ -242,6 +242,22 @@ static bool pmu_irq_matches(struct arm_pmu *pmu, int irq) return true; } +static void arm_pmu_acpi_associate_pmu_cpu(struct arm_pmu *pmu, + unsigned int cpu) +{ + int irq = per_cpu(pmu_irqs, cpu); + + per_cpu(probed_pmus, cpu) = pmu; + + if (pmu_irq_matches(pmu, irq)) { + struct pmu_hw_events __percpu *hw_events; + hw_events = pmu->hw_events; + per_cpu(hw_events->irq, cpu) = irq; + } + + cpumask_set_cpu(cpu, &pmu->supported_cpus); +} + /* * This must run before the common arm_pmu hotplug logic, so that we can * associate a CPU and its interrupt before the common code tries to manage the @@ -254,27 +270,16 @@ static bool pmu_irq_matches(struct arm_pmu *pmu, int irq) static int arm_pmu_acpi_cpu_starting(unsigned int cpu) { struct arm_pmu *pmu; - struct pmu_hw_events __percpu *hw_events; - int irq; /* If we've already probed this CPU, we have nothing to do */ if (per_cpu(probed_pmus, cpu)) return 0; - irq = per_cpu(pmu_irqs, cpu); - pmu = arm_pmu_acpi_find_alloc_pmu(); if (!pmu) return -ENOMEM; - per_cpu(probed_pmus, cpu) = pmu; - - if (pmu_irq_matches(pmu, irq)) { - hw_events = pmu->hw_events; - per_cpu(hw_events->irq, cpu) = irq; - } - - cpumask_set_cpu(cpu, &pmu->supported_cpus); + arm_pmu_acpi_associate_pmu_cpu(pmu, cpu); /* * Ideally, we'd probe the PMU here when we find the first matching |