[PATCH v2 00/25] genirq: Add support for percpu_devid IRQ affinity

Marc Zyngier
2025-09-15T08:57:13Z

This is the second version of this series, originally posted at [1],
which aims at allowing percpu_devid interrupt requests on the basis of
an affinity mask. See the original submission for the details of why
this is a desirable outcome.

From v1, we have a number of changes, both functional and cosmetic,
but the fundamentals are pretty much the same (change log below), with
an even more appealing diffstat.

Thanks to Will, Thomas and Raphael for their constructive review
comments.

FWIW, I've pushed a branch at [2].

* From v1 [1]:

- Fixed NMI handling by getting rid of the NMI-specific flow
handler, which was pretty useless anyway (Will)

- As a result, killed a metric buttload worth of GICv3 code

- Moved irq_fwspec out of irq_fwspec_info, and passed it as a
parameter to irq_get_fwspec_info(), renamed from irq_get_info(),
and applied some generous sanitisation of the structure (Thomas)

- Dropped the rather useless fwspec validity flag (Thomas)

- Rejigged the PMU per-CPU handling to better deal with the DT/ACPI
differences, and drop some now useless patches (Will)

- Plenty of cosmetic rework (Raphael, Thomas)

[1] https://lore.kernel.org/r/20250908163127.2462948-1-maz@kernel.org
[2] git://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms.git irq/ppi-affinity

Marc Zyngier (24):
irqdomain: Add firmware info reporting interface
ACPI: irq: Add IRQ affinity reporting interface
of/irq: Add IRQ affinity reporting interface
platform: Add firmware-agnostic irq and affinity retrieval interface
irqchip/gic-v3: Add FW info retrieval support
irqchip/apple-aic: Add FW info retrieval support
coresight: trbe: Convert to new IRQ affinity retrieval API
perf: arm_pmu: Convert to new IRQ affinity retrieval API
perf: arm_spe_pmu: Convert to new IRQ affinity retrieval API
irqchip/gic-v3: Switch high priority PPIs over to
handle_percpu_devid_irq()
genirq: Kill handle_percpu_devid_fasteoi_nmi()
genirq: Merge irqaction::{dev_id,percpu_dev_id}
genirq: Factor-in percpu irqaction creation
genirq: Add affinity to percpu_devid interrupt requests
genirq: Update request_percpu_nmi() to take an affinity
genirq: Allow per-cpu interrupt sharing for non-overlapping affinities
genirq: Add request_percpu_irq_affinity() helper
perf: arm_spe_pmu: Request specific affinities for percpu IRQ
coresight: trbe: Request specific affinities for percpu IRQ
irqchip/gic-v3: Drop support for custom PPI partitions
irqchip/apple-aic: Drop support for custom PMU irq partitions
irqchip: Kill irq-partition-percpu
genirq: Kill irq_{g,s}et_percpu_devid_partition()
perf: arm_pmu: Kill last use of per-CPU cpu_armpmu pointer

Will Deacon (1):
perf: arm_pmu: Request specific affinities for percpu NMI/IRQ

arch/arm64/kernel/smp.c | 2 +-
drivers/acpi/irq.c | 19 ++
drivers/base/platform.c | 60 ++++-
drivers/hwtracing/coresight/coresight-trbe.c | 9 +-
drivers/irqchip/Kconfig | 4 -
drivers/irqchip/Makefile | 1 -
drivers/irqchip/irq-apple-aic.c | 56 +++--
drivers/irqchip/irq-gic-v3.c | 224 +++++------------
drivers/irqchip/irq-partition-percpu.c | 241 -------------------
drivers/of/irq.c | 20 ++
drivers/perf/arm_pmu.c | 50 ++--
drivers/perf/arm_pmu_acpi.c | 2 +-
drivers/perf/arm_pmu_platform.c | 20 +-
drivers/perf/arm_pmuv3.c | 2 +-
drivers/perf/arm_spe_pmu.c | 13 +-
include/linux/acpi.h | 7 +
include/linux/interrupt.h | 24 +-
include/linux/irq.h | 5 -
include/linux/irqchip/irq-partition-percpu.h | 53 ----
include/linux/irqdesc.h | 1 -
include/linux/irqdomain.h | 28 +++
include/linux/of_irq.h | 7 +
include/linux/perf/arm_pmu.h | 6 +-
include/linux/platform_device.h | 2 +
kernel/irq/chip.c | 36 +--
kernel/irq/irqdesc.c | 24 +-
kernel/irq/irqdomain.c | 32 ++-
kernel/irq/manage.c | 124 +++++++---
28 files changed, 423 insertions(+), 649 deletions(-)
delete mode 100644 drivers/irqchip/irq-partition-percpu.c
delete mode 100644 include/linux/irqchip/irq-partition-percpu.h

--
2.39.2