|
@@ -1298,6 +1298,22 @@ const struct cpumask *pci_irq_get_affinity(struct pci_dev *dev, int nr)
|
|
|
}
|
|
|
EXPORT_SYMBOL(pci_irq_get_affinity);
|
|
|
|
|
|
+/**
|
|
|
+ * pci_irq_get_node - return the numa node of a particular msi vector
|
|
|
+ * @pdev: PCI device to operate on
|
|
|
+ * @vec: device-relative interrupt vector index (0-based).
|
|
|
+ */
|
|
|
+int pci_irq_get_node(struct pci_dev *pdev, int vec)
|
|
|
+{
|
|
|
+ const struct cpumask *mask;
|
|
|
+
|
|
|
+ mask = pci_irq_get_affinity(pdev, vec);
|
|
|
+ if (mask)
|
|
|
+ return local_memory_node(cpu_to_node(cpumask_first(mask)));
|
|
|
+ return dev_to_node(&pdev->dev);
|
|
|
+}
|
|
|
+EXPORT_SYMBOL(pci_irq_get_node);
|
|
|
+
|
|
|
struct pci_dev *msi_desc_to_pci_dev(struct msi_desc *desc)
|
|
|
{
|
|
|
return to_pci_dev(desc->dev);
|