lkml.org 
[lkml]   [2020]   [Nov]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Subject[PATCH v4 0/5] Support managed interrupts for platform devices
    Date
    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

    \
     
     \ /
      Last update: 2020-11-30 18:41    [W:3.109 / U:0.188 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site