Re: [PATCH v3 08/26] perf: arm_pmu: Convert to new IRQ affinity retrieval API

Jinjie Ruan
2025-10-10T03:39:33Z

On 2025/9/22 16:28, Marc Zyngier wrote:
> 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>
> ---
> drivers/perf/arm_pmu_platform.c | 16 +++++++++-------
> 1 file changed, 9 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/perf/arm_pmu_platform.c b/drivers/perf/arm_pmu_platform.c
> index 118170a5cedef..9c0494d8a867a 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);
> }
>

Reviewed-by: Jinjie Ruan <ruanjinjie@huawei.com>

> if (nr_cpu_ids != 1 && !pmu_has_irq_affinity(dev->of_node))