All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 0/5] Support managed interrupts for platform devices
@ 2020-11-25 17:20 John Garry
  2020-11-25 17:20 ` [PATCH v3 1/5] genirq/affinity: Add irq_update_affinity_desc() John Garry
                   ` (4 more replies)
  0 siblings, 5 replies; 13+ messages in thread
From: John Garry @ 2020-11-25 17:20 UTC (permalink / raw)
  To: jejb, martin.petersen, lenb, rjw, gregkh, tglx
  Cc: linux-scsi, linux-kernel, linuxarm, linux-acpi, maz, John Garry

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 a new platform
method is used to "put" an irq. 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.

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

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()
  ACPI: Make acpi_dev_irqresource_disabled() public
  driver core: platform: Add platform_put_irq()
  Driver core: platform: Add devm_platform_get_irqs_affinity()
  scsi: hisi_sas: Expose HW queues for v2 hw

 drivers/acpi/resource.c                |   2 +-
 drivers/base/platform.c                | 126 +++++++++++++++++++++++++
 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 |  68 ++++++++++---
 include/linux/acpi.h                   |   5 +
 include/linux/interrupt.h              |   8 ++
 include/linux/platform_device.h        |   6 ++
 kernel/irq/manage.c                    |  63 +++++++++++++
 9 files changed, 279 insertions(+), 14 deletions(-)

-- 
2.26.2


^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2020-11-26 14:24 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-11-25 17:20 [PATCH v3 0/5] Support managed interrupts for platform devices John Garry
2020-11-25 17:20 ` [PATCH v3 1/5] genirq/affinity: Add irq_update_affinity_desc() John Garry
2020-11-26  8:51   ` Daniel Wagner
2020-11-26  8:54     ` John Garry
2020-11-25 17:20 ` [PATCH v3 2/5] ACPI: Make acpi_dev_irqresource_disabled() public John Garry
2020-11-25 17:43   ` Rafael J. Wysocki
2020-11-26  8:49     ` John Garry
2020-11-26 14:24       ` Rafael J. Wysocki
2020-11-25 17:20 ` [PATCH v3 3/5] driver core: platform: Add platform_put_irq() John Garry
2020-11-26  9:28   ` Marc Zyngier
2020-11-26 11:23     ` John Garry
2020-11-25 17:20 ` [PATCH v3 4/5] Driver core: platform: Add devm_platform_get_irqs_affinity() John Garry
2020-11-25 17:20 ` [PATCH v3 5/5] scsi: hisi_sas: Expose HW queues for v2 hw John Garry

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.