[PATCH v3 00/26] genirq: Add support for percpu_devid IRQ affinity

Marc Zyngier posted 26 patches 1 week, 2 days ago
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                       |  49 ++--
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                    |  33 ++-
include/linux/of_irq.h                       |   7 +
include/linux/perf/arm_pmu.h                 |   6 +-
include/linux/platform_device.h              |   2 +
kernel/irq/chip.c                            |  35 +--
kernel/irq/irqdesc.c                         |  24 +-
kernel/irq/irqdomain.c                       |  32 ++-
kernel/irq/manage.c                          | 125 +++++++---
28 files changed, 420 insertions(+), 656 deletions(-)
delete mode 100644 drivers/irqchip/irq-partition-percpu.c
delete mode 100644 include/linux/irqchip/irq-partition-percpu.h
[PATCH v3 00/26] genirq: Add support for percpu_devid IRQ affinity
Posted by Marc Zyngier 1 week, 2 days ago
This is the third 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 v2, we have some tidying up, thanks to Jonathan's review -- see
changelog for details.

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

* From v2 [2]:

  - Turned of_node_to_fwnode() usage to of_fwnode_handle() (Jonathan)

  - Added a patch to finally kill of_node_to_fwnode()

  - Tidied-up documentation, comments and formatting (Jonathan)

  - Collected ABs and Rbs, with thanks (Jonathan, Suzuki, Sven)

* 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] https://lore.kernel.org/r/20250915085702.519996-1-maz@kernel.org
[3] git://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms.git irq/ppi-affinity

Marc Zyngier (25):
  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()
  irqdomain: Kill of_node_to_fwnode() helper
  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                       |  49 ++--
 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                    |  33 ++-
 include/linux/of_irq.h                       |   7 +
 include/linux/perf/arm_pmu.h                 |   6 +-
 include/linux/platform_device.h              |   2 +
 kernel/irq/chip.c                            |  35 +--
 kernel/irq/irqdesc.c                         |  24 +-
 kernel/irq/irqdomain.c                       |  32 ++-
 kernel/irq/manage.c                          | 125 +++++++---
 28 files changed, 420 insertions(+), 656 deletions(-)
 delete mode 100644 drivers/irqchip/irq-partition-percpu.c
 delete mode 100644 include/linux/irqchip/irq-partition-percpu.h

-- 
2.47.3
Re: [PATCH v3 00/26] genirq: Add support for percpu_devid IRQ affinity
Posted by Alexandru Elisei 5 days, 16 hours ago
Hi,

Tested this on a rockpro64 - 4xA53 + 2xA72.

On kernel v6.17-rc5, using perf to profile iperf3 for 10 seconds, the top
overhead symbol was _raw_spinlock_irq_restore() and the PMU wasn't using NMIs
(checked by printing has_nmi after armpmu_request_irq()).

With this series, same test, *irq_restore() overhead dropped to about 1% on the
little core, below 1% on the big core, and the PMU was using NMIs.

Thanks,
Alex

On Mon, Sep 22, 2025 at 09:28:07AM +0100, Marc Zyngier wrote:
> This is the third 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 v2, we have some tidying up, thanks to Jonathan's review -- see
> changelog for details.
> 
> FWIW, I've pushed a branch at [3].
> 
> * From v2 [2]:
> 
>   - Turned of_node_to_fwnode() usage to of_fwnode_handle() (Jonathan)
> 
>   - Added a patch to finally kill of_node_to_fwnode()
> 
>   - Tidied-up documentation, comments and formatting (Jonathan)
> 
>   - Collected ABs and Rbs, with thanks (Jonathan, Suzuki, Sven)
> 
> * 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] https://lore.kernel.org/r/20250915085702.519996-1-maz@kernel.org
> [3] git://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms.git irq/ppi-affinity
Re: [PATCH v3 00/26] genirq: Add support for percpu_devid IRQ affinity
Posted by Will Deacon 1 week, 1 day ago
Hi Marc,

On Mon, Sep 22, 2025 at 09:28:07AM +0100, Marc Zyngier wrote:
> This is the third 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.

FWIW, I backported this to 6.12 and tested it on a DT-based Android
device with heterogeneous PMUs and pNMI enabled. Perf appears to work
correctly, the pNMIs are configured as expected and the affinities
all look good to me.

Tested-by: Will Deacon <will@kernel.org>

Will
Re: [PATCH v3 00/26] genirq: Add support for percpu_devid IRQ affinity
Posted by Marc Zyngier 1 week, 1 day ago
On Tue, 23 Sep 2025 11:00:16 +0100,
Will Deacon <will@kernel.org> wrote:
> 
> Hi Marc,
> 
> On Mon, Sep 22, 2025 at 09:28:07AM +0100, Marc Zyngier wrote:
> > This is the third 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.
> 
> FWIW, I backported this to 6.12 and tested it on a DT-based Android
> device with heterogeneous PMUs and pNMI enabled. Perf appears to work
> correctly, the pNMIs are configured as expected and the affinities
> all look good to me.
> 
> Tested-by: Will Deacon <will@kernel.org>

Awesome, thanks a lot for that and for the help getting this thing up
and running!

	M.

-- 
Without deviation from the norm, progress is not possible.