Skip to content

Commit be37b84

Browse files
Ahmed S. DarwishKAGA-KOKO
authored andcommitted
PCI/MSI: Move pci_irq_get_affinity() to api.c
To disentangle 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 <[email protected]> Signed-off-by: Thomas Gleixner <[email protected]> Acked-by: Bjorn Helgaas <[email protected]> Link: https://lore.kernel.org/r/[email protected]
1 parent 18e1926 commit be37b84

File tree

2 files changed

+43
-38
lines changed

2 files changed

+43
-38
lines changed

drivers/pci/msi/api.c

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
*/
1010

1111
#include <linux/export.h>
12+
#include <linux/irq.h>
1213

1314
#include "msi.h"
1415

@@ -250,6 +251,48 @@ int pci_irq_vector(struct pci_dev *dev, unsigned int nr)
250251
}
251252
EXPORT_SYMBOL(pci_irq_vector);
252253

254+
/**
255+
* pci_irq_get_affinity() - Get a device interrupt vector affinity
256+
* @dev: the PCI device to operate on
257+
* @nr: device-relative interrupt vector index (0-based); has different
258+
* meanings, depending on interrupt mode
259+
* MSI-X the index in the MSI-X vector table
260+
* MSI the index of the enabled MSI vectors
261+
* INTx must be 0
262+
*
263+
* Return: MSI/MSI-X vector affinity, NULL if @nr is out of range or if
264+
* the MSI(-X) vector was allocated without explicit affinity
265+
* requirements (e.g., by pci_enable_msi(), pci_enable_msix_range(), or
266+
* pci_alloc_irq_vectors() without the %PCI_IRQ_AFFINITY flag). Return a
267+
* generic set of CPU IDs representing all possible CPUs available
268+
* during system boot if the device is in legacy INTx mode.
269+
*/
270+
const struct cpumask *pci_irq_get_affinity(struct pci_dev *dev, int nr)
271+
{
272+
int idx, irq = pci_irq_vector(dev, nr);
273+
struct msi_desc *desc;
274+
275+
if (WARN_ON_ONCE(irq <= 0))
276+
return NULL;
277+
278+
desc = irq_get_msi_desc(irq);
279+
/* Non-MSI does not have the information handy */
280+
if (!desc)
281+
return cpu_possible_mask;
282+
283+
/* MSI[X] interrupts can be allocated without affinity descriptor */
284+
if (!desc->affinity)
285+
return NULL;
286+
287+
/*
288+
* MSI has a mask array in the descriptor.
289+
* MSI-X has a single mask.
290+
*/
291+
idx = dev->msi_enabled ? nr : 0;
292+
return &desc->affinity[idx].mask;
293+
}
294+
EXPORT_SYMBOL(pci_irq_get_affinity);
295+
253296
/**
254297
* pci_free_irq_vectors() - Free previously allocated IRQs for a device
255298
* @dev: the PCI device to operate on

drivers/pci/msi/msi.c

Lines changed: 0 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -854,44 +854,6 @@ int __pci_enable_msix_range(struct pci_dev *dev,
854854
}
855855
}
856856

857-
/**
858-
* pci_irq_get_affinity - return the affinity of a particular MSI vector
859-
* @dev: PCI device to operate on
860-
* @nr: device-relative interrupt vector index (0-based).
861-
*
862-
* @nr has the following meanings depending on the interrupt mode:
863-
* MSI-X: The index in the MSI-X vector table
864-
* MSI: The index of the enabled MSI vectors
865-
* INTx: Must be 0
866-
*
867-
* Return: A cpumask pointer or NULL if @nr is out of range
868-
*/
869-
const struct cpumask *pci_irq_get_affinity(struct pci_dev *dev, int nr)
870-
{
871-
int idx, irq = pci_irq_vector(dev, nr);
872-
struct msi_desc *desc;
873-
874-
if (WARN_ON_ONCE(irq <= 0))
875-
return NULL;
876-
877-
desc = irq_get_msi_desc(irq);
878-
/* Non-MSI does not have the information handy */
879-
if (!desc)
880-
return cpu_possible_mask;
881-
882-
/* MSI[X] interrupts can be allocated without affinity descriptor */
883-
if (!desc->affinity)
884-
return NULL;
885-
886-
/*
887-
* MSI has a mask array in the descriptor.
888-
* MSI-X has a single mask.
889-
*/
890-
idx = dev->msi_enabled ? nr : 0;
891-
return &desc->affinity[idx].mask;
892-
}
893-
EXPORT_SYMBOL(pci_irq_get_affinity);
894-
895857
struct pci_dev *msi_desc_to_pci_dev(struct msi_desc *desc)
896858
{
897859
return to_pci_dev(desc->dev);

0 commit comments

Comments
 (0)