lkml.org 
[lkml]   [2022]   [Nov]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[patch 22/39] PCI/MSI: Move pci_alloc_irq_vectors() to api.c
    Date
    From: Ahmed S. Darwish <darwi@linutronix.de>

    To distangle the maze in msi.c, all exported device-driver MSI APIs are
    now to be grouped in one file, api.c.

    Make pci_alloc_irq_vectors() a real function instead of wrapper and add
    proper kernel doc to it.

    Signed-off-by: Ahmed S. Darwish <darwi@linutronix.de>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>

    ---
    drivers/pci/msi/api.c | 33 +++++++++++++++++++++++++++++++++
    include/linux/pci.h | 17 +++++++++--------
    2 files changed, 42 insertions(+), 8 deletions(-)
    ---
    diff --git a/drivers/pci/msi/api.c b/drivers/pci/msi/api.c
    index d48050555d55..1714905943fb 100644
    --- a/drivers/pci/msi/api.c
    +++ b/drivers/pci/msi/api.c
    @@ -90,3 +90,36 @@ int pci_enable_msix_range(struct pci_dev *dev, struct msix_entry *entries,
    return __pci_enable_msix_range(dev, entries, minvec, maxvec, NULL, 0);
    }
    EXPORT_SYMBOL(pci_enable_msix_range);
    +
    +/**
    + * pci_alloc_irq_vectors() - Allocate multiple device interrupt vectors
    + * @dev: the PCI device to operate on
    + * @min_vecs: minimum required number of vectors (must be >= 1)
    + * @max_vecs: maximum desired number of vectors
    + * @flags: One or more of:
    + * %PCI_IRQ_MSIX Allow trying MSI-X vector allocations
    + * %PCI_IRQ_MSI Allow trying MSI vector allocations
    + * %PCI_IRQ_LEGACY Allow trying legacy INTx interrupts, if
    + * and only if @min_vecs == 1
    + * %PCI_IRQ_AFFINITY Auto-manage IRQs affinity by spreading
    + * the vectors around available CPUs
    + *
    + * Allocate up to @max_vecs interrupt vectors on device. MSI-X irq
    + * vector allocation has a higher precedence over plain MSI, which has a
    + * higher precedence over legacy INTx emulation.
    + *
    + * Upon a successful allocation, the caller should use pci_irq_vector()
    + * to get the Linux IRQ number to be passed to request_threaded_irq().
    + * The driver must call pci_free_irq_vectors() on cleanup.
    + *
    + * Return: number of allocated vectors (which might be smaller than
    + * @max_vecs), -ENOSPC if less than @min_vecs interrupt vectors are
    + * available, other errnos otherwise.
    + */
    +int pci_alloc_irq_vectors(struct pci_dev *dev, unsigned int min_vecs,
    + unsigned int max_vecs, unsigned int flags)
    +{
    + return pci_alloc_irq_vectors_affinity(dev, min_vecs, max_vecs,
    + flags, NULL);
    +}
    +EXPORT_SYMBOL(pci_alloc_irq_vectors);
    diff --git a/include/linux/pci.h b/include/linux/pci.h
    index 2bda4a4e47e8..6a356a39ba94 100644
    --- a/include/linux/pci.h
    +++ b/include/linux/pci.h
    @@ -1553,6 +1553,8 @@ static inline int pci_enable_msix_exact(struct pci_dev *dev,
    return rc;
    return 0;
    }
    +int pci_alloc_irq_vectors(struct pci_dev *dev, unsigned int min_vecs,
    + unsigned int max_vecs, unsigned int flags);
    int pci_alloc_irq_vectors_affinity(struct pci_dev *dev, unsigned int min_vecs,
    unsigned int max_vecs, unsigned int flags,
    struct irq_affinity *affd);
    @@ -1586,6 +1588,13 @@ pci_alloc_irq_vectors_affinity(struct pci_dev *dev, unsigned int min_vecs,
    return 1;
    return -ENOSPC;
    }
    +static inline int
    +pci_alloc_irq_vectors(struct pci_dev *dev, unsigned int min_vecs,
    + unsigned int max_vecs, unsigned int flags)
    +{
    + return pci_alloc_irq_vectors_affinity(dev, min_vecs, max_vecs,
    + flags, NULL);
    +}

    static inline void pci_free_irq_vectors(struct pci_dev *dev)
    {
    @@ -1900,14 +1909,6 @@ pci_alloc_irq_vectors_affinity(struct pci_dev *dev, unsigned int min_vecs,
    }
    #endif /* CONFIG_PCI */

    -static inline int
    -pci_alloc_irq_vectors(struct pci_dev *dev, unsigned int min_vecs,
    - unsigned int max_vecs, unsigned int flags)
    -{
    - return pci_alloc_irq_vectors_affinity(dev, min_vecs, max_vecs, flags,
    - NULL);
    -}
    -
    /* Include architecture-dependent settings and functions */

    #include <asm/pci.h>
    \
     
     \ /
      Last update: 2022-11-11 14:58    [W:8.415 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site