lkml.org 
[lkml]   [2022]   [Dec]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip: irq/core] PCI/MSI: Provide prepare_desc() MSI domain op
    The following commit has been merged into the irq/core branch of tip:

    Commit-ID: d9abbfee95e4a80dfbdf7030d0541a315ee2879b
    Gitweb: https://git.kernel.org/tip/d9abbfee95e4a80dfbdf7030d0541a315ee2879b
    Author: Thomas Gleixner <tglx@linutronix.de>
    AuthorDate: Fri, 25 Nov 2022 00:26:23 +01:00
    Committer: Thomas Gleixner <tglx@linutronix.de>
    CommitterDate: Mon, 05 Dec 2022 19:21:04 +01:00

    PCI/MSI: Provide prepare_desc() MSI domain op

    The setup of MSI descriptors for PCI/MSI-X interrupts depends partially on
    the MSI index for which the descriptor is initialized.

    Dynamic MSI-X vector allocation post MSI-X enablement allows to allocate
    vectors at a given index or at any free index in the available table
    range. The latter requires that the descriptor is initialized after the
    MSI core has chosen an index.

    Implement the prepare_desc() op in the PCI/MSI-X specific msi_domain_ops
    which is invoked before the core interrupt descriptor and the associated
    Linux interrupt number is allocated.

    That callback is also provided for the upcoming PCI/IMS implementations so
    the implementation specific interrupt domain can do their domain specific
    initialization of the MSI descriptors.

    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
    Reviewed-by: Kevin Tian <kevin.tian@intel.com>
    Acked-by: Bjorn Helgaas <bhelgaas@google.com>
    Acked-by: Marc Zyngier <maz@kernel.org>
    Link: https://lore.kernel.org/r/20221124232326.673658806@linutronix.de

    ---
    drivers/pci/msi/irqdomain.c | 9 +++++++++
    1 file changed, 9 insertions(+)

    diff --git a/drivers/pci/msi/irqdomain.c b/drivers/pci/msi/irqdomain.c
    index 4736403..8afaef1 100644
    --- a/drivers/pci/msi/irqdomain.c
    +++ b/drivers/pci/msi/irqdomain.c
    @@ -202,6 +202,14 @@ static void pci_irq_unmask_msix(struct irq_data *data)
    pci_msix_unmask(irq_data_get_msi_desc(data));
    }

    +static void pci_msix_prepare_desc(struct irq_domain *domain, msi_alloc_info_t *arg,
    + struct msi_desc *desc)
    +{
    + /* Don't fiddle with preallocated MSI descriptors */
    + if (!desc->pci.mask_base)
    + msix_prepare_msi_desc(to_pci_dev(desc->dev), desc);
    +}
    +
    static const struct msi_domain_template pci_msix_template = {
    .chip = {
    .name = "PCI-MSIX",
    @@ -212,6 +220,7 @@ static const struct msi_domain_template pci_msix_template = {
    },

    .ops = {
    + .prepare_desc = pci_msix_prepare_desc,
    .set_desc = pci_device_domain_set_desc,
    },

    \
     
     \ /
      Last update: 2022-12-05 19:26    [W:3.020 / U:0.564 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site