mbox series

[v5,0/5] Support managed interrupts for platform devices

Message ID 1606905417-183214-1-git-send-email-john.garry@huawei.com (mailing list archive)
Headers show
Series Support managed interrupts for platform devices | expand

Message

John Garry Dec. 2, 2020, 10:36 a.m. UTC
So far, managed interrupts are only used for PCI MSIs. This series adds
platform device support for managed interrupts. Initially this topic was
discussed at [0].

The method to enable managed interrupts is to allocate a group of IRQs for
the device, and then switch the interrupts to managed - this is done
through new function irq_update_affinity_desc().

Function devm_platform_get_irqs_affinity() is added as a helper to manage
this work, such that we don't need to export irq_update_affinity_desc() or
irq_create_affinity_masks().

In the devm_platform_get_irqs_affinity() release call we are required to
"put" or unmap the irqs which have been setup. The reason for this is that
per-irq mapping (and irq_desc) needs to be recreated anew for re-probing
the LLDD, such that we don't attempt to reconfigure the managed or any
other flag for an irq_desc.

For now, the HiSilicon SAS v2 hw driver is switched over. This is used
in the D05 dev board.

Performance gain observed for 6x SAS SSDs is ~357K -> 420K IOPs for fio read.

This series is tested based on Marc's "MSI: Track device proxying when
allocating MSIs" series, [1].

[0] https://lore.kernel.org/lkml/84a9411b-4ae3-1928-3d35-1666f2687ec8@huawei.com/
[1] https://lore.kernel.org/lkml/20201129135208.680293-1-maz@kernel.org/

Changes since v4:
- Add Rafael's tags (thanks)
- Expand commit message and code comment for genirq change

Changes since v3:
- Fix genirq change to re-activate interrupt if we have deactivated it
- Remove standalone platform_put_irq(), and combine code into
  devm_platform_get_irqs_affinity_release()
- Add new inline function in ioport.h rather than making
  acpi_dev_irqresource_disabled() public

Changes since v2:
- Update genirq change as follows:
 - Handle when the irq is started, active, or already managed
 - Reject update when CONFIG_GENERIC_IRQ_RESERVATION_MODE is set
- Revamp platform.c API as follows:
 - Make it devm type
 - Add platform_put_irq() and associated change in ACPI code to allow irq
   resource to be reset
 - Unmap irqs for driver removal
 - Change API to accept min and max vectors

John Garry (5):
  genirq/affinity: Add irq_update_affinity_desc()
  resource: Add irqresource_disabled()
  ACPI: Drop acpi_dev_irqresource_disabled()
  Driver core: platform: Add devm_platform_get_irqs_affinity()
  scsi: hisi_sas: Expose HW queues for v2 hw

 drivers/acpi/resource.c                |  17 +---
 drivers/base/platform.c                | 121 +++++++++++++++++++++++++
 drivers/scsi/hisi_sas/hisi_sas.h       |   4 +
 drivers/scsi/hisi_sas/hisi_sas_main.c  |  11 +++
 drivers/scsi/hisi_sas/hisi_sas_v2_hw.c |  66 +++++++++++---
 include/linux/interrupt.h              |   8 ++
 include/linux/ioport.h                 |   7 ++
 include/linux/platform_device.h        |   6 ++
 kernel/irq/manage.c                    |  70 ++++++++++++++
 9 files changed, 285 insertions(+), 25 deletions(-)

Comments

Marc Zyngier Dec. 11, 2020, 3:01 p.m. UTC | #1
On Wed, 2 Dec 2020 18:36:52 +0800, John Garry wrote:
> So far, managed interrupts are only used for PCI MSIs. This series adds
> platform device support for managed interrupts. Initially this topic was
> discussed at [0].
> 
> The method to enable managed interrupts is to allocate a group of IRQs for
> the device, and then switch the interrupts to managed - this is done
> through new function irq_update_affinity_desc().
> 
> [...]

Applied to irq/irqchip-next, thanks!

[1/5] genirq/affinity: Add irq_update_affinity_desc()
      commit: 1d3aec89286254487df7641c30f1b14ad1d127a5
[2/5] resource: Add irqresource_disabled()
      commit: 9806731db684a475ade1e95d166089b9edbd9da3
[3/5] ACPI: Drop acpi_dev_irqresource_disabled()
      commit: 1c3f69b4543af0aad514c127298e5ea40392575d
[4/5] Driver core: platform: Add devm_platform_get_irqs_affinity()
      commit: e15f2fa959f2cce8a05e8e3a596e75d068cd42c5

Please route patch 5 via the SCSI tree when possible.

Cheers,

	M.