lkml.org 
[lkml]   [2021]   [Dec]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[patch V2 23/23] PCI/MSI: Move descriptor counting on allocation fail to the legacy code
    Date
    The irqdomain code already returns the information. Move the loop to the
    legacy code.

    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Tested-by: Juergen Gross <jgross@suse.com>
    Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
    ---
    drivers/pci/msi/legacy.c | 20 +++++++++++++++++++-
    drivers/pci/msi/msi.c | 19 +------------------
    2 files changed, 20 insertions(+), 19 deletions(-)

    --- a/drivers/pci/msi/legacy.c
    +++ b/drivers/pci/msi/legacy.c
    @@ -50,9 +50,27 @@ void __weak arch_teardown_msi_irqs(struc
    }
    }

    +static int pci_msi_setup_check_result(struct pci_dev *dev, int type, int ret)
    +{
    + struct msi_desc *entry;
    + int avail = 0;
    +
    + if (type != PCI_CAP_ID_MSIX || ret >= 0)
    + return ret;
    +
    + /* Scan the MSI descriptors for successfully allocated ones. */
    + for_each_pci_msi_entry(entry, dev) {
    + if (entry->irq != 0)
    + avail++;
    + }
    + return avail ? avail : ret;
    +}
    +
    int pci_msi_legacy_setup_msi_irqs(struct pci_dev *dev, int nvec, int type)
    {
    - return arch_setup_msi_irqs(dev, nvec, type);
    + int ret = arch_setup_msi_irqs(dev, nvec, type);
    +
    + return pci_msi_setup_check_result(dev, type, ret);
    }

    void pci_msi_legacy_teardown_msi_irqs(struct pci_dev *dev)
    --- a/drivers/pci/msi/msi.c
    +++ b/drivers/pci/msi/msi.c
    @@ -609,7 +609,7 @@ static int msix_capability_init(struct p

    ret = pci_msi_setup_msi_irqs(dev, nvec, PCI_CAP_ID_MSIX);
    if (ret)
    - goto out_avail;
    + goto out_free;

    /* Check if all MSI entries honor device restrictions */
    ret = msi_verify_entries(dev);
    @@ -634,23 +634,6 @@ static int msix_capability_init(struct p
    pcibios_free_irq(dev);
    return 0;

    -out_avail:
    - if (ret < 0) {
    - /*
    - * If we had some success, report the number of IRQs
    - * we succeeded in setting up.
    - */
    - struct msi_desc *entry;
    - int avail = 0;
    -
    - for_each_pci_msi_entry(entry, dev) {
    - if (entry->irq != 0)
    - avail++;
    - }
    - if (avail != 0)
    - ret = avail;
    - }
    -
    out_free:
    free_msi_irqs(dev);

    \
     
     \ /
      Last update: 2021-12-06 23:30    [W:4.636 / U:0.244 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site