On Wed, Feb 01, 2017 at 09:53:15AM -0800, Shaohua Li wrote: > Next patch will use the API to get the node from vector for nvme device > > Signed-off-by: Shaohua Li <shli@xxxxxx> Acked-by: Bjorn Helgaas <bhelgaas@xxxxxxxxxx> Sorry I missed this; I normally work from the linux-pci patchwork, and this didn't show up there because it wasn't cc'd to linux-pci. But I should have noticed anyway. > --- > drivers/pci/msi.c | 16 ++++++++++++++++ > include/linux/pci.h | 6 ++++++ > 2 files changed, 22 insertions(+) > > diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c > index 50c5003..ab7aee7 100644 > --- a/drivers/pci/msi.c > +++ b/drivers/pci/msi.c > @@ -1313,6 +1313,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); > diff --git a/include/linux/pci.h b/include/linux/pci.h > index e2d1a12..df2c649 100644 > --- a/include/linux/pci.h > +++ b/include/linux/pci.h > @@ -1334,6 +1334,7 @@ int pci_alloc_irq_vectors_affinity(struct pci_dev *dev, unsigned int min_vecs, > void pci_free_irq_vectors(struct pci_dev *dev); > int pci_irq_vector(struct pci_dev *dev, unsigned int nr); > const struct cpumask *pci_irq_get_affinity(struct pci_dev *pdev, int vec); > +int pci_irq_get_node(struct pci_dev *pdev, int vec); > > #else > static inline int pci_msi_vec_count(struct pci_dev *dev) { return -ENOSYS; } > @@ -1384,6 +1385,11 @@ static inline const struct cpumask *pci_irq_get_affinity(struct pci_dev *pdev, > { > return cpu_possible_mask; > } > + > +static inline int pci_irq_get_node(struct pci_dev *pdev, int vec) > +{ > + return first_online_node; > +} > #endif > > static inline int > -- > 2.9.3 >