mbox series

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

Message ID 1606905417-183214-1-git-send-email-john.garry@huawei.com
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(-)

-- 
2.26.2

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.
John Garry Dec. 11, 2020, 4:56 p.m. UTC | #2
On 02/12/2020 10:36, John Garry wrote:
> As a performance enhancement, make the completion queue interrupts managed.

> 

> In addition, in commit bf0beec0607d ("blk-mq: drain I/O when all CPUs in a

> hctx are offline"), CPU hotplug for MQ devices using managed interrupts

> is made safe. So expose HW queues to blk-mq to take advantage of this.

> 

> Flag Scsi_host.host_tagset is also set to ensure that the HBA is not sent

> more commands than it can handle. However the driver still does not use

> request tag for IPTT as there are many HW bugs means that special rules

> apply for IPTT allocation.

> 


Hi Martin, James,

Is there some way in this patch can be merged for 5.11 via the SCSI 
tree? It has a dependency on the earlier patches in the series, now 
picked up via irqchip tree. I've seen multiple rounds of SCSI pull 
requests before, but not sure when we have that or if the tree is 
rebased for those.

Thanks,
John


> Signed-off-by: John Garry <john.garry@huawei.com>

> ---

>   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 +++++++++++++++++++++-----

>   3 files changed, 68 insertions(+), 13 deletions(-)

>
Martin K. Petersen Dec. 11, 2020, 5:20 p.m. UTC | #3
John,

> Is there some way in this patch can be merged for 5.11 via the SCSI
> tree? It has a dependency on the earlier patches in the series, now 
> picked up via irqchip tree. I've seen multiple rounds of SCSI pull
> requests before, but not sure when we have that or if the tree is 
> rebased for those.

I'll do a postmerge branch for a few things, including your patch and
the megaraid patch.
John Garry Dec. 11, 2020, 5:33 p.m. UTC | #4
On 11/12/2020 17:20, Martin K. Petersen wrote:
>> Is there some way in this patch can be merged for 5.11 via the SCSI

>> tree? It has a dependency on the earlier patches in the series, now

>> picked up via irqchip tree. I've seen multiple rounds of SCSI pull

>> requests before, but not sure when we have that or if the tree is

>> rebased for those.

> I'll do a postmerge branch for a few things, including your patch and

> the megaraid patch.


Great, thanks.

By a strange coincidence both those patches are doing the same thing.

John