Commit 663783e0 authored by Marc Zyngier's avatar Marc Zyngier Committed by Thomas Gleixner
Browse files

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: default avatarMarc Zyngier <maz@kernel.org>
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Tested-by: default avatarWill Deacon <will@kernel.org>
Reviewed-by: default avatarJinjie Ruan <ruanjinjie@huawei.com>
Link: https://patch.msgid.link/20251020122944.3074811-9-maz@kernel.org
parent 541454dd
Loading
Loading
Loading
Loading
+9 −7
Original line number Diff line number Diff line
@@ -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))