Commit d474d92d authored by Thomas Gleixner's avatar Thomas Gleixner

x86/apic: Remove X86_IRQ_ALLOC_CONTIGUOUS_VECTORS

Now that the PCI/MSI core code does early checking for multi-MSI support
X86_IRQ_ALLOC_CONTIGUOUS_VECTORS is not required anymore.

Remove the flag and rely on MSI_FLAG_MULTI_PCI_MSI.
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Reviewed-by: default avatarJason Gunthorpe <jgg@nvidia.com>
Link: https://lore.kernel.org/r/20221111122015.865042356@linutronix.de
parent 2569f62c
...@@ -7,9 +7,7 @@ ...@@ -7,9 +7,7 @@
#ifdef CONFIG_X86_LOCAL_APIC #ifdef CONFIG_X86_LOCAL_APIC
enum { enum {
/* Allocate contiguous CPU vectors */ X86_IRQ_ALLOC_LEGACY = 0x1,
X86_IRQ_ALLOC_CONTIGUOUS_VECTORS = 0x1,
X86_IRQ_ALLOC_LEGACY = 0x2,
}; };
extern int x86_fwspec_is_ioapic(struct irq_fwspec *fwspec); extern int x86_fwspec_is_ioapic(struct irq_fwspec *fwspec);
......
...@@ -161,12 +161,10 @@ int pci_msi_prepare(struct irq_domain *domain, struct device *dev, int nvec, ...@@ -161,12 +161,10 @@ int pci_msi_prepare(struct irq_domain *domain, struct device *dev, int nvec,
msi_alloc_info_t *arg) msi_alloc_info_t *arg)
{ {
init_irq_alloc_info(arg, NULL); init_irq_alloc_info(arg, NULL);
if (to_pci_dev(dev)->msix_enabled) { if (to_pci_dev(dev)->msix_enabled)
arg->type = X86_IRQ_ALLOC_TYPE_PCI_MSIX; arg->type = X86_IRQ_ALLOC_TYPE_PCI_MSIX;
} else { else
arg->type = X86_IRQ_ALLOC_TYPE_PCI_MSI; arg->type = X86_IRQ_ALLOC_TYPE_PCI_MSI;
arg->flags |= X86_IRQ_ALLOC_CONTIGUOUS_VECTORS;
}
return 0; return 0;
} }
......
...@@ -539,10 +539,6 @@ static int x86_vector_alloc_irqs(struct irq_domain *domain, unsigned int virq, ...@@ -539,10 +539,6 @@ static int x86_vector_alloc_irqs(struct irq_domain *domain, unsigned int virq,
if (disable_apic) if (disable_apic)
return -ENXIO; return -ENXIO;
/* Currently vector allocator can't guarantee contiguous allocations */
if ((info->flags & X86_IRQ_ALLOC_CONTIGUOUS_VECTORS) && nr_irqs > 1)
return -ENOSYS;
/* /*
* Catch any attempt to touch the cascade interrupt on a PIC * Catch any attempt to touch the cascade interrupt on a PIC
* equipped system. * equipped system.
......
...@@ -3297,13 +3297,6 @@ static int irq_remapping_alloc(struct irq_domain *domain, unsigned int virq, ...@@ -3297,13 +3297,6 @@ static int irq_remapping_alloc(struct irq_domain *domain, unsigned int virq,
if (nr_irqs > 1 && info->type != X86_IRQ_ALLOC_TYPE_PCI_MSI) if (nr_irqs > 1 && info->type != X86_IRQ_ALLOC_TYPE_PCI_MSI)
return -EINVAL; return -EINVAL;
/*
* With IRQ remapping enabled, don't need contiguous CPU vectors
* to support multiple MSI interrupts.
*/
if (info->type == X86_IRQ_ALLOC_TYPE_PCI_MSI)
info->flags &= ~X86_IRQ_ALLOC_CONTIGUOUS_VECTORS;
sbdf = get_devid(info); sbdf = get_devid(info);
if (sbdf < 0) if (sbdf < 0)
return -EINVAL; return -EINVAL;
......
...@@ -1337,13 +1337,6 @@ static int intel_irq_remapping_alloc(struct irq_domain *domain, ...@@ -1337,13 +1337,6 @@ static int intel_irq_remapping_alloc(struct irq_domain *domain,
if (nr_irqs > 1 && info->type != X86_IRQ_ALLOC_TYPE_PCI_MSI) if (nr_irqs > 1 && info->type != X86_IRQ_ALLOC_TYPE_PCI_MSI)
return -EINVAL; return -EINVAL;
/*
* With IRQ remapping enabled, don't need contiguous CPU vectors
* to support multiple MSI interrupts.
*/
if (info->type == X86_IRQ_ALLOC_TYPE_PCI_MSI)
info->flags &= ~X86_IRQ_ALLOC_CONTIGUOUS_VECTORS;
ret = irq_domain_alloc_irqs_parent(domain, virq, nr_irqs, arg); ret = irq_domain_alloc_irqs_parent(domain, virq, nr_irqs, arg);
if (ret < 0) if (ret < 0)
return ret; return ret;
......
...@@ -611,20 +611,7 @@ static unsigned int hv_msi_get_int_vector(struct irq_data *data) ...@@ -611,20 +611,7 @@ static unsigned int hv_msi_get_int_vector(struct irq_data *data)
return cfg->vector; return cfg->vector;
} }
static int hv_msi_prepare(struct irq_domain *domain, struct device *dev, #define hv_msi_prepare pci_msi_prepare
int nvec, msi_alloc_info_t *info)
{
int ret = pci_msi_prepare(domain, dev, nvec, info);
/*
* By using the interrupt remapper in the hypervisor IOMMU, contiguous
* CPU vectors is not needed for multi-MSI
*/
if (info->type == X86_IRQ_ALLOC_TYPE_PCI_MSI)
info->flags &= ~X86_IRQ_ALLOC_CONTIGUOUS_VECTORS;
return ret;
}
/** /**
* hv_arch_irq_unmask() - "Unmask" the IRQ by setting its current * hv_arch_irq_unmask() - "Unmask" the IRQ by setting its current
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment