[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <1606757759-6076-1-git-send-email-john.garry@huawei.com>
Date: Tue, 1 Dec 2020 01:35:54 +0800
From: John Garry <john.garry@...wei.com>
To: <jejb@...ux.ibm.com>, <martin.petersen@...cle.com>,
<lenb@...nel.org>, <rjw@...ysocki.net>,
<gregkh@...uxfoundation.org>, <tglx@...utronix.de>,
<maz@...nel.org>
CC: <linux-scsi@...r.kernel.org>, <linux-kernel@...r.kernel.org>,
<linuxarm@...wei.com>, <linux-acpi@...r.kernel.org>,
<dwagner@...e.de>, "John Garry" <john.garry@...wei.com>
Subject: [PATCH v4 0/5] Support managed interrupts for platform devices
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.
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 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 | 63 +++++++++++++
9 files changed, 278 insertions(+), 25 deletions(-)
--
2.26.2
Powered by blists - more mailing lists