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 28/39] PCI/MSI: Move pci_irq_get_affinity() 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.

    Move pci_irq_get_affinity() and let its kernel-doc match rest of the
    file.

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

    ---
    drivers/pci/msi/api.c | 43 +++++++++++++++++++++++++++++++++++++++++++
    drivers/pci/msi/msi.c | 38 --------------------------------------
    2 files changed, 43 insertions(+), 38 deletions(-)
    ---
    diff --git a/drivers/pci/msi/api.c b/drivers/pci/msi/api.c
    index 653a61868ae6..473df7ba0584 100644
    --- a/drivers/pci/msi/api.c
    +++ b/drivers/pci/msi/api.c
    @@ -9,6 +9,7 @@
    */

    #include <linux/export.h>
    +#include <linux/irq.h>

    #include "msi.h"

    @@ -251,6 +252,48 @@ int pci_irq_vector(struct pci_dev *dev, unsigned int nr)
    EXPORT_SYMBOL(pci_irq_vector);

    /**
    + * pci_irq_get_affinity() - Get a device interrupt vector affinity
    + * @dev: the PCI device to operate on
    + * @nr: device-relative interrupt vector index (0-based); has different
    + * meanings, depending on interrupt mode
    + * MSI-X the index in the MSI-X vector table
    + * MSI the index of the enabled MSI vectors
    + * INTx must be 0
    + *
    + * Return: MSI/MSI-X vector affinity, NULL if @nr is out of range or if
    + * the MSI(-X) vector was allocated without explicit affinity
    + * requirements (e.g., by pci_enable_msi(), pci_enable_msix_range(), or
    + * pci_alloc_irq_vectors() without the %PCI_IRQ_AFFINITY flag). Return a
    + * generic set of CPU ids representing all possible CPUs available
    + * during system boot if the device is in legacy INTx mode.
    + */
    +const struct cpumask *pci_irq_get_affinity(struct pci_dev *dev, int nr)
    +{
    + int idx, irq = pci_irq_vector(dev, nr);
    + struct msi_desc *desc;
    +
    + if (WARN_ON_ONCE(irq <= 0))
    + return NULL;
    +
    + desc = irq_get_msi_desc(irq);
    + /* Non-MSI does not have the information handy */
    + if (!desc)
    + return cpu_possible_mask;
    +
    + /* MSI[X] interrupts can be allocated without affinity descriptor */
    + if (!desc->affinity)
    + return NULL;
    +
    + /*
    + * MSI has a mask array in the descriptor.
    + * MSI-X has a single mask.
    + */
    + idx = dev->msi_enabled ? nr : 0;
    + return &desc->affinity[idx].mask;
    +}
    +EXPORT_SYMBOL(pci_irq_get_affinity);
    +
    +/**
    * pci_free_irq_vectors() - Free previously allocated IRQs for a device
    * @dev: the PCI device to operate on
    *
    diff --git a/drivers/pci/msi/msi.c b/drivers/pci/msi/msi.c
    index 6fa90d07d2e4..d78646d1c116 100644
    --- a/drivers/pci/msi/msi.c
    +++ b/drivers/pci/msi/msi.c
    @@ -854,44 +854,6 @@ int __pci_enable_msix_range(struct pci_dev *dev,
    }
    }

    -/**
    - * pci_irq_get_affinity - return the affinity of a particular MSI vector
    - * @dev: PCI device to operate on
    - * @nr: device-relative interrupt vector index (0-based).
    - *
    - * @nr has the following meanings depending on the interrupt mode:
    - * MSI-X: The index in the MSI-X vector table
    - * MSI: The index of the enabled MSI vectors
    - * INTx: Must be 0
    - *
    - * Return: A cpumask pointer or NULL if @nr is out of range
    - */
    -const struct cpumask *pci_irq_get_affinity(struct pci_dev *dev, int nr)
    -{
    - int idx, irq = pci_irq_vector(dev, nr);
    - struct msi_desc *desc;
    -
    - if (WARN_ON_ONCE(irq <= 0))
    - return NULL;
    -
    - desc = irq_get_msi_desc(irq);
    - /* Non-MSI does not have the information handy */
    - if (!desc)
    - return cpu_possible_mask;
    -
    - /* MSI[X] interrupts can be allocated without affinity descriptor */
    - if (!desc->affinity)
    - return NULL;
    -
    - /*
    - * MSI has a mask array in the descriptor.
    - * MSI-X has a single mask.
    - */
    - idx = dev->msi_enabled ? nr : 0;
    - return &desc->affinity[idx].mask;
    -}
    -EXPORT_SYMBOL(pci_irq_get_affinity);
    -
    struct pci_dev *msi_desc_to_pci_dev(struct msi_desc *desc)
    {
    return to_pci_dev(desc->dev);
    \
     
     \ /
      Last update: 2022-11-11 14:59    [W:4.155 / U:0.072 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site