Commit 592d9a08 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'irq-urgent-2020-12-06' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull irq fixes from Thomas Gleixner:
 "A set of updates for the interrupt subsystem:

   - Make multiqueue devices which use the managed interrupt affinity
     infrastructure work on PowerPC/Pseries. PowerPC does not use the
     generic infrastructure for setting up PCI/MSI interrupts and the
     multiqueue changes failed to update the legacy PCI/MSI
     infrastructure. Make this work by passing the affinity setup
     information down to the mapping and allocation functions.

   - Move Jason Cooper from MAINTAINERS to CREDITS as his mail is
     bouncing and he's not reachable. We hope all is well with him and
     say thanks for his work over the years"

* tag 'irq-urgent-2020-12-06' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  powerpc/pseries: Pass MSI affinity to irq_create_mapping()
  genirq/irqdomain: Add an irq_create_mapping_affinity() function
  MAINTAINERS: Move Jason Cooper to CREDITS
parents ff615c98 9ea69a55
...@@ -740,6 +740,11 @@ S: (ask for current address) ...@@ -740,6 +740,11 @@ S: (ask for current address)
S: Portland, Oregon S: Portland, Oregon
S: USA S: USA
N: Jason Cooper
D: ARM/Marvell SOC co-maintainer
D: irqchip co-maintainer
D: MVEBU PCI DRIVER co-maintainer
N: Robin Cornelius N: Robin Cornelius
E: robincornelius@users.sourceforge.net E: robincornelius@users.sourceforge.net
D: Ralink rt2x00 WLAN driver D: Ralink rt2x00 WLAN driver
......
...@@ -2014,7 +2014,6 @@ M: Philipp Zabel <philipp.zabel@gmail.com> ...@@ -2014,7 +2014,6 @@ M: Philipp Zabel <philipp.zabel@gmail.com>
S: Maintained S: Maintained
ARM/Marvell Dove/MV78xx0/Orion SOC support ARM/Marvell Dove/MV78xx0/Orion SOC support
M: Jason Cooper <jason@lakedaemon.net>
M: Andrew Lunn <andrew@lunn.ch> M: Andrew Lunn <andrew@lunn.ch>
M: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com> M: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
M: Gregory Clement <gregory.clement@bootlin.com> M: Gregory Clement <gregory.clement@bootlin.com>
...@@ -2031,7 +2030,6 @@ F: arch/arm/plat-orion/ ...@@ -2031,7 +2030,6 @@ F: arch/arm/plat-orion/
F: drivers/soc/dove/ F: drivers/soc/dove/
ARM/Marvell Kirkwood and Armada 370, 375, 38x, 39x, XP, 3700, 7K/8K, CN9130 SOC support ARM/Marvell Kirkwood and Armada 370, 375, 38x, 39x, XP, 3700, 7K/8K, CN9130 SOC support
M: Jason Cooper <jason@lakedaemon.net>
M: Andrew Lunn <andrew@lunn.ch> M: Andrew Lunn <andrew@lunn.ch>
M: Gregory Clement <gregory.clement@bootlin.com> M: Gregory Clement <gregory.clement@bootlin.com>
M: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com> M: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
...@@ -9257,7 +9255,6 @@ F: kernel/irq/ ...@@ -9257,7 +9255,6 @@ F: kernel/irq/
IRQCHIP DRIVERS IRQCHIP DRIVERS
M: Thomas Gleixner <tglx@linutronix.de> M: Thomas Gleixner <tglx@linutronix.de>
M: Jason Cooper <jason@lakedaemon.net>
M: Marc Zyngier <maz@kernel.org> M: Marc Zyngier <maz@kernel.org>
L: linux-kernel@vger.kernel.org L: linux-kernel@vger.kernel.org
S: Maintained S: Maintained
...@@ -13403,7 +13400,6 @@ F: drivers/pci/controller/mobiveil/pcie-mobiveil* ...@@ -13403,7 +13400,6 @@ F: drivers/pci/controller/mobiveil/pcie-mobiveil*
PCI DRIVER FOR MVEBU (Marvell Armada 370 and Armada XP SOC support) PCI DRIVER FOR MVEBU (Marvell Armada 370 and Armada XP SOC support)
M: Thomas Petazzoni <thomas.petazzoni@bootlin.com> M: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
M: Jason Cooper <jason@lakedaemon.net>
L: linux-pci@vger.kernel.org L: linux-pci@vger.kernel.org
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
S: Maintained S: Maintained
......
...@@ -458,7 +458,8 @@ static int rtas_setup_msi_irqs(struct pci_dev *pdev, int nvec_in, int type) ...@@ -458,7 +458,8 @@ static int rtas_setup_msi_irqs(struct pci_dev *pdev, int nvec_in, int type)
return hwirq; return hwirq;
} }
virq = irq_create_mapping(NULL, hwirq); virq = irq_create_mapping_affinity(NULL, hwirq,
entry->affinity);
if (!virq) { if (!virq) {
pr_debug("rtas_msi: Failed mapping hwirq %d\n", hwirq); pr_debug("rtas_msi: Failed mapping hwirq %d\n", hwirq);
......
...@@ -384,11 +384,19 @@ extern void irq_domain_associate_many(struct irq_domain *domain, ...@@ -384,11 +384,19 @@ extern void irq_domain_associate_many(struct irq_domain *domain,
extern void irq_domain_disassociate(struct irq_domain *domain, extern void irq_domain_disassociate(struct irq_domain *domain,
unsigned int irq); unsigned int irq);
extern unsigned int irq_create_mapping(struct irq_domain *host, extern unsigned int irq_create_mapping_affinity(struct irq_domain *host,
irq_hw_number_t hwirq); irq_hw_number_t hwirq,
const struct irq_affinity_desc *affinity);
extern unsigned int irq_create_fwspec_mapping(struct irq_fwspec *fwspec); extern unsigned int irq_create_fwspec_mapping(struct irq_fwspec *fwspec);
extern void irq_dispose_mapping(unsigned int virq); extern void irq_dispose_mapping(unsigned int virq);
static inline unsigned int irq_create_mapping(struct irq_domain *host,
irq_hw_number_t hwirq)
{
return irq_create_mapping_affinity(host, hwirq, NULL);
}
/** /**
* irq_linear_revmap() - Find a linux irq from a hw irq number. * irq_linear_revmap() - Find a linux irq from a hw irq number.
* @domain: domain owning this hardware interrupt * @domain: domain owning this hardware interrupt
......
...@@ -624,17 +624,19 @@ unsigned int irq_create_direct_mapping(struct irq_domain *domain) ...@@ -624,17 +624,19 @@ unsigned int irq_create_direct_mapping(struct irq_domain *domain)
EXPORT_SYMBOL_GPL(irq_create_direct_mapping); EXPORT_SYMBOL_GPL(irq_create_direct_mapping);
/** /**
* irq_create_mapping() - Map a hardware interrupt into linux irq space * irq_create_mapping_affinity() - Map a hardware interrupt into linux irq space
* @domain: domain owning this hardware interrupt or NULL for default domain * @domain: domain owning this hardware interrupt or NULL for default domain
* @hwirq: hardware irq number in that domain space * @hwirq: hardware irq number in that domain space
* @affinity: irq affinity
* *
* Only one mapping per hardware interrupt is permitted. Returns a linux * Only one mapping per hardware interrupt is permitted. Returns a linux
* irq number. * irq number.
* If the sense/trigger is to be specified, set_irq_type() should be called * If the sense/trigger is to be specified, set_irq_type() should be called
* on the number returned from that call. * on the number returned from that call.
*/ */
unsigned int irq_create_mapping(struct irq_domain *domain, unsigned int irq_create_mapping_affinity(struct irq_domain *domain,
irq_hw_number_t hwirq) irq_hw_number_t hwirq,
const struct irq_affinity_desc *affinity)
{ {
struct device_node *of_node; struct device_node *of_node;
int virq; int virq;
...@@ -660,7 +662,8 @@ unsigned int irq_create_mapping(struct irq_domain *domain, ...@@ -660,7 +662,8 @@ unsigned int irq_create_mapping(struct irq_domain *domain,
} }
/* Allocate a virtual interrupt number */ /* Allocate a virtual interrupt number */
virq = irq_domain_alloc_descs(-1, 1, hwirq, of_node_to_nid(of_node), NULL); virq = irq_domain_alloc_descs(-1, 1, hwirq, of_node_to_nid(of_node),
affinity);
if (virq <= 0) { if (virq <= 0) {
pr_debug("-> virq allocation failed\n"); pr_debug("-> virq allocation failed\n");
return 0; return 0;
...@@ -676,7 +679,7 @@ unsigned int irq_create_mapping(struct irq_domain *domain, ...@@ -676,7 +679,7 @@ unsigned int irq_create_mapping(struct irq_domain *domain,
return virq; return virq;
} }
EXPORT_SYMBOL_GPL(irq_create_mapping); EXPORT_SYMBOL_GPL(irq_create_mapping_affinity);
/** /**
* irq_create_strict_mappings() - Map a range of hw irqs to fixed linux irqs * irq_create_strict_mappings() - Map a range of hw irqs to fixed linux irqs
......
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