[PATCH 4/7] PCI/MSI: Propagate IRQ affinity description through the MSI code
No API change yet, just pass it down all the way from pci_alloc_irq_vectors() to the core MSI code. Signed-off-by: Christoph Hellwig Reviewed-by: Hannes Reinecke Reviewed-by: Johannes Thumshirn Acked-by: Bjorn Helgaas --- drivers/pci/msi.c | 66 +++ 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c index f4a108b..512f388 100644 --- a/drivers/pci/msi.c +++ b/drivers/pci/msi.c @@ -551,15 +551,14 @@ static int populate_msi_sysfs(struct pci_dev *pdev) } static struct msi_desc * -msi_setup_entry(struct pci_dev *dev, int nvec, bool affinity) +msi_setup_entry(struct pci_dev *dev, int nvec, const struct irq_affinity *affd) { - static const struct irq_affinity default_affd; struct cpumask *masks = NULL; struct msi_desc *entry; u16 control; - if (affinity) { - masks = irq_create_affinity_masks(nvec, &default_affd); + if (affd) { + masks = irq_create_affinity_masks(nvec, affd); if (!masks) pr_err("Unable to allocate affinity masks, ignoring\n"); } @@ -619,7 +618,8 @@ static int msi_verify_entries(struct pci_dev *dev) * an error, and a positive return value indicates the number of interrupts * which could have been allocated. */ -static int msi_capability_init(struct pci_dev *dev, int nvec, bool affinity) +static int msi_capability_init(struct pci_dev *dev, int nvec, + const struct irq_affinity *affd) { struct msi_desc *entry; int ret; @@ -627,7 +627,7 @@ static int msi_capability_init(struct pci_dev *dev, int nvec, bool affinity) pci_msi_set_enable(dev, 0); /* Disable MSI during set up */ - entry = msi_setup_entry(dev, nvec, affinity); + entry = msi_setup_entry(dev, nvec, affd); if (!entry) return -ENOMEM; @@ -691,15 +691,14 @@ static void __iomem *msix_map_region(struct pci_dev *dev, unsigned nr_entries) static int msix_setup_entries(struct pci_dev *dev, void __iomem *base, struct msix_entry *entries, int nvec, - bool affinity) + const struct irq_affinity *affd) { - static const struct irq_affinity default_affd; struct cpumask *curmsk, *masks = NULL; struct msi_desc *entry; int ret, i; - if (affinity) { - masks = irq_create_affinity_masks(nvec, &default_affd); + if (affd) { + masks = irq_create_affinity_masks(nvec, affd); if (!masks) pr_err("Unable to allocate affinity masks, ignoring\n"); } @@ -755,14 +754,14 @@ static void msix_program_entries(struct pci_dev *dev, * @dev: pointer to the pci_dev data structure of MSI-X device function * @entries: pointer to an array of struct msix_entry entries * @nvec: number of @entries - * @affinity: flag to indicate cpu irq affinity mask should be set + * @affd: Optional pointer to enable automatic affinity assignement * * Setup the MSI-X capability structure of device function with a * single MSI-X irq. A return of zero indicates the successful setup of * requested MSI-X entries with allocated irqs or non-zero for otherwise. **/ static int msix_capability_init(struct pci_dev *dev, struct msix_entry *entries, - int nvec, bool affinity) + int nvec, const struct irq_affinity *affd) { int ret; u16 control; @@ -777,7 +776,7 @@ static int msix_capability_init(struct pci_dev *dev, struct msix_entry *entries, if (!base) return -ENOMEM; - ret = msix_setup_entries(dev, base, entries, nvec, affinity); + ret = msix_setup_entries(dev, base, entries, nvec, affd); if (ret) return ret; @@ -958,7 +957,7 @@ int pci_msix_vec_count(struct pci_dev *dev) EXPORT_SYMBOL(pci_msix_vec_count); static int __pci_enable_msix(struct pci_dev *dev, struct msix_entry *entries, -int nvec, bool affinity) +int nvec, const struct irq_affinity *affd) { int nr_entries; int i, j; @@ -990,7 +989,7 @@ static int __pci_enable_msix(struct pci_dev *dev, struct msix_entry *entries, dev_info(&dev->dev, "can't enable MSI-X (MSI IRQ already assigned)\n"); return -EINVAL; } - return msix_capability_init(dev, entries, nvec, affinity); + return msix_capability_init(dev, entries, nvec, affd); } /** @@ -1010,7 +1009,7 @@ static int __pci_enable_msix(struct pci_dev *dev, struct msix_entry *entries, **/ int pci_enable_msix(struct pci_dev *dev, struct msix_entry *entries, int nvec) { - return __pci_enable_msix(dev, entries, nvec, false); + return __pci_enable_msix(dev, entries, nvec, N
Re: [PATCH 4/7] pci/msi: Propagate irq affinity description through the MSI code
s|pci/msi|PCI/MSI| (subject) s/irq/IRQ/ (subject) On Mon, Nov 07, 2016 at 10:47:39AM -0800, Christoph Hellwig wrote: > From: Christogh Hellwig > > No API change yet, just pass it down all the way from > pci_alloc_irq_vectors to the core MSI code. pci_alloc_irq_vectors() > Signed-off-by: Christogh Hellwig Acked-by: Bjorn Helgaas > --- > drivers/pci/msi.c | 62 > +-- > 1 file changed, 33 insertions(+), 29 deletions(-) > > diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c > index 1761b8a..512f388 100644 > --- a/drivers/pci/msi.c > +++ b/drivers/pci/msi.c > @@ -551,14 +551,14 @@ static int populate_msi_sysfs(struct pci_dev *pdev) > } > > static struct msi_desc * > -msi_setup_entry(struct pci_dev *dev, int nvec, bool affinity) > +msi_setup_entry(struct pci_dev *dev, int nvec, const struct irq_affinity > *affd) > { > struct cpumask *masks = NULL; > struct msi_desc *entry; > u16 control; > > - if (affinity) { > - masks = irq_create_affinity_masks(nvec, NULL); > + if (affd) { > + masks = irq_create_affinity_masks(nvec, affd); > if (!masks) > pr_err("Unable to allocate affinity masks, ignoring\n"); > } > @@ -618,7 +618,8 @@ static int msi_verify_entries(struct pci_dev *dev) > * an error, and a positive return value indicates the number of interrupts > * which could have been allocated. > */ > -static int msi_capability_init(struct pci_dev *dev, int nvec, bool affinity) > +static int msi_capability_init(struct pci_dev *dev, int nvec, > +const struct irq_affinity *affd) > { > struct msi_desc *entry; > int ret; > @@ -626,7 +627,7 @@ static int msi_capability_init(struct pci_dev *dev, int > nvec, bool affinity) > > pci_msi_set_enable(dev, 0); /* Disable MSI during set up */ > > - entry = msi_setup_entry(dev, nvec, affinity); > + entry = msi_setup_entry(dev, nvec, affd); > if (!entry) > return -ENOMEM; > > @@ -690,14 +691,14 @@ static void __iomem *msix_map_region(struct pci_dev > *dev, unsigned nr_entries) > > static int msix_setup_entries(struct pci_dev *dev, void __iomem *base, > struct msix_entry *entries, int nvec, > - bool affinity) > + const struct irq_affinity *affd) > { > struct cpumask *curmsk, *masks = NULL; > struct msi_desc *entry; > int ret, i; > > - if (affinity) { > - masks = irq_create_affinity_masks(nvec, NULL); > + if (affd) { > + masks = irq_create_affinity_masks(nvec, affd); > if (!masks) > pr_err("Unable to allocate affinity masks, ignoring\n"); > } > @@ -753,14 +754,14 @@ static void msix_program_entries(struct pci_dev *dev, > * @dev: pointer to the pci_dev data structure of MSI-X device function > * @entries: pointer to an array of struct msix_entry entries > * @nvec: number of @entries > - * @affinity: flag to indicate cpu irq affinity mask should be set > + * @affd: Optional pointer to enable automatic affinity assignement > * > * Setup the MSI-X capability structure of device function with a > * single MSI-X irq. A return of zero indicates the successful setup of > * requested MSI-X entries with allocated irqs or non-zero for otherwise. > **/ > static int msix_capability_init(struct pci_dev *dev, struct msix_entry > *entries, > - int nvec, bool affinity) > + int nvec, const struct irq_affinity *affd) > { > int ret; > u16 control; > @@ -775,7 +776,7 @@ static int msix_capability_init(struct pci_dev *dev, > struct msix_entry *entries, > if (!base) > return -ENOMEM; > > - ret = msix_setup_entries(dev, base, entries, nvec, affinity); > + ret = msix_setup_entries(dev, base, entries, nvec, affd); > if (ret) > return ret; > > @@ -956,7 +957,7 @@ int pci_msix_vec_count(struct pci_dev *dev) > EXPORT_SYMBOL(pci_msix_vec_count); > > static int __pci_enable_msix(struct pci_dev *dev, struct msix_entry *entries, > - int nvec, bool affinity) > + int nvec, const struct irq_affinity *affd) > { > int nr_entries; > int i, j; > @@ -988,7 +989,7 @@ static int __pci_enable_msix(struct pci_dev *dev, struct > msix_entry *entries, > dev_info(&dev->dev, "can't enable MSI-X (MSI IRQ already > assigned)\n"); > return -EINVAL; > } > - return msix_capability_init(dev, entries, nvec, affinity); > + return msix_capability_init(dev, entries, nvec, affd); > } > > /** > @@ -1008,7 +1009,7 @@ static int __pci_enable_msix(struct pci_dev *dev, > struct msix_entry *entries, > **/ > int pci_enable_msix(struct pci_dev *dev, struct msix_entry *entries,
Re: [PATCH 4/7] pci/msi: Propagate irq affinity description through the MSI code
On Mon, Nov 07, 2016 at 10:47:39AM -0800, Christoph Hellwig wrote: > From: Christogh Hellwig > > No API change yet, just pass it down all the way from > pci_alloc_irq_vectors to the core MSI code. > > Signed-off-by: Christogh Hellwig > --- Looks good, Reviewed-by: Johannes Thumshirn -- Johannes Thumshirn Storage jthumsh...@suse.de+49 911 74053 689 SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg GF: Felix Imendörffer, Jane Smithard, Graham Norton HRB 21284 (AG Nürnberg) Key fingerprint = EC38 9CAB C2C4 F25D 8600 D0D0 0393 969D 2D76 0850
Re: [PATCH 4/7] pci/msi: Propagate irq affinity description through the MSI code
On 11/07/2016 07:47 PM, Christoph Hellwig wrote: From: Christogh Hellwig No API change yet, just pass it down all the way from pci_alloc_irq_vectors to the core MSI code. Signed-off-by: Christogh Hellwig --- drivers/pci/msi.c | 62 +-- 1 file changed, 33 insertions(+), 29 deletions(-) Reviewed-by: Hannes Reinecke Cheers, Hannes -- Dr. Hannes ReineckeTeamlead Storage & Networking h...@suse.de +49 911 74053 688 SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton HRB 21284 (AG Nürnberg)
[PATCH 4/7] pci/msi: Propagate irq affinity description through the MSI code
From: Christogh Hellwig No API change yet, just pass it down all the way from pci_alloc_irq_vectors to the core MSI code. Signed-off-by: Christogh Hellwig --- drivers/pci/msi.c | 62 +-- 1 file changed, 33 insertions(+), 29 deletions(-) diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c index 1761b8a..512f388 100644 --- a/drivers/pci/msi.c +++ b/drivers/pci/msi.c @@ -551,14 +551,14 @@ static int populate_msi_sysfs(struct pci_dev *pdev) } static struct msi_desc * -msi_setup_entry(struct pci_dev *dev, int nvec, bool affinity) +msi_setup_entry(struct pci_dev *dev, int nvec, const struct irq_affinity *affd) { struct cpumask *masks = NULL; struct msi_desc *entry; u16 control; - if (affinity) { - masks = irq_create_affinity_masks(nvec, NULL); + if (affd) { + masks = irq_create_affinity_masks(nvec, affd); if (!masks) pr_err("Unable to allocate affinity masks, ignoring\n"); } @@ -618,7 +618,8 @@ static int msi_verify_entries(struct pci_dev *dev) * an error, and a positive return value indicates the number of interrupts * which could have been allocated. */ -static int msi_capability_init(struct pci_dev *dev, int nvec, bool affinity) +static int msi_capability_init(struct pci_dev *dev, int nvec, + const struct irq_affinity *affd) { struct msi_desc *entry; int ret; @@ -626,7 +627,7 @@ static int msi_capability_init(struct pci_dev *dev, int nvec, bool affinity) pci_msi_set_enable(dev, 0); /* Disable MSI during set up */ - entry = msi_setup_entry(dev, nvec, affinity); + entry = msi_setup_entry(dev, nvec, affd); if (!entry) return -ENOMEM; @@ -690,14 +691,14 @@ static void __iomem *msix_map_region(struct pci_dev *dev, unsigned nr_entries) static int msix_setup_entries(struct pci_dev *dev, void __iomem *base, struct msix_entry *entries, int nvec, - bool affinity) + const struct irq_affinity *affd) { struct cpumask *curmsk, *masks = NULL; struct msi_desc *entry; int ret, i; - if (affinity) { - masks = irq_create_affinity_masks(nvec, NULL); + if (affd) { + masks = irq_create_affinity_masks(nvec, affd); if (!masks) pr_err("Unable to allocate affinity masks, ignoring\n"); } @@ -753,14 +754,14 @@ static void msix_program_entries(struct pci_dev *dev, * @dev: pointer to the pci_dev data structure of MSI-X device function * @entries: pointer to an array of struct msix_entry entries * @nvec: number of @entries - * @affinity: flag to indicate cpu irq affinity mask should be set + * @affd: Optional pointer to enable automatic affinity assignement * * Setup the MSI-X capability structure of device function with a * single MSI-X irq. A return of zero indicates the successful setup of * requested MSI-X entries with allocated irqs or non-zero for otherwise. **/ static int msix_capability_init(struct pci_dev *dev, struct msix_entry *entries, - int nvec, bool affinity) + int nvec, const struct irq_affinity *affd) { int ret; u16 control; @@ -775,7 +776,7 @@ static int msix_capability_init(struct pci_dev *dev, struct msix_entry *entries, if (!base) return -ENOMEM; - ret = msix_setup_entries(dev, base, entries, nvec, affinity); + ret = msix_setup_entries(dev, base, entries, nvec, affd); if (ret) return ret; @@ -956,7 +957,7 @@ int pci_msix_vec_count(struct pci_dev *dev) EXPORT_SYMBOL(pci_msix_vec_count); static int __pci_enable_msix(struct pci_dev *dev, struct msix_entry *entries, -int nvec, bool affinity) +int nvec, const struct irq_affinity *affd) { int nr_entries; int i, j; @@ -988,7 +989,7 @@ static int __pci_enable_msix(struct pci_dev *dev, struct msix_entry *entries, dev_info(&dev->dev, "can't enable MSI-X (MSI IRQ already assigned)\n"); return -EINVAL; } - return msix_capability_init(dev, entries, nvec, affinity); + return msix_capability_init(dev, entries, nvec, affd); } /** @@ -1008,7 +1009,7 @@ static int __pci_enable_msix(struct pci_dev *dev, struct msix_entry *entries, **/ int pci_enable_msix(struct pci_dev *dev, struct msix_entry *entries, int nvec) { - return __pci_enable_msix(dev, entries, nvec, false); + return __pci_enable_msix(dev, entries, nvec, NULL); } EXPORT_SYMBOL(pci_enable_msix); @@ -1059,9 +1060,8 @@ int pci_msi_enabled(void) EXPORT_SYMBOL(pci_msi_enabled); static int __pci_enable_msi_range(struct pci_dev *dev, int minve