lkml.org 
[lkml]   [2022]   [Nov]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [patch 22/39] PCI/MSI: Move pci_alloc_irq_vectors() to api.c
    On Fri, Nov 11, 2022 at 02:54:50PM +0100, Thomas Gleixner wrote:
    > 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>

    Acked-by: Bjorn Helgaas <bhelgaas@google.com>

    Two nits below.

    > ---
    > 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

    s/irq/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

    s/less/fewer/ (also in some previous patches, IIRC)

    > + * 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-16 17:27    [W:4.442 / U:0.480 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site