Thread (2 messages) 2 messages, 2 authors, 2012-01-25

[RFCv2 13/14] irq_domain: Remove 'new' irq_domain in favour of the ppc one

From: Rob Herring <hidden>
Date: 2012-01-24 22:10:08
Also in: linux-devicetree, linuxppc-dev, lkml
Subsystem: arm port, the rest · Maintainers: Russell King, Linus Torvalds

On 01/23/2012 03:07 PM, Grant Likely wrote:
quoted hunk
This patch removes the simplistic implementation of irq_domains and enables
the powerpc infrastructure for all irq_domain users.  The powerpc
infrastructure includes support for complex mappings between Linux and
hardware irq numbers, and can manage allocation of irq_descs.

This patch also converts the few users of irq_domain_add()/irq_domain_del()
to call irq_domain_add_legacy() instead.

v2: Fix removal of irq_alloc_descs() call in gic driver

Signed-off-by: Grant Likely <redacted>
---
 arch/arm/common/gic.c               |   85 ++++++++-----------
 arch/arm/common/vic.c               |   16 +---
 arch/arm/include/asm/hardware/gic.h |    4 +-
 arch/arm/include/asm/hardware/vic.h |    2 +
 arch/arm/mach-exynos/common.c       |    2 +-
 arch/arm/mach-versatile/core.c      |    5 +-
 drivers/mfd/twl-core.c              |   12 +--
 include/linux/irqdomain.h           |   45 +---------
 kernel/irq/irqdomain.c              |  159 +++--------------------------------
 9 files changed, 69 insertions(+), 261 deletions(-)
diff --git a/arch/arm/common/gic.c b/arch/arm/common/gic.c
snip
quoted hunk
@@ -716,17 +708,17 @@ void __init gic_init_bases(unsigned int gic_nr, int irq_start,
 		gic_irqs = 1020;
 	gic->gic_irqs = gic_irqs;
 
-	domain->nr_irq = gic_irqs - domain->hwirq_base;
-	domain->irq_base = irq_alloc_descs(irq_start, 16, domain->nr_irq,
-					   numa_node_id());
-	if (IS_ERR_VALUE(domain->irq_base)) {
+	irq_base = irq_alloc_descs(irq_start, 16, gic_irqs - hwirq_base,
+				   numa_node_id());
+	if (IS_ERR_VALUE(irq_base)) {
 		WARN(1, "Cannot allocate irq_descs @ IRQ%d, assuming pre-allocated\n",
 		     irq_start);
-		domain->irq_base = irq_start;
+		irq_base = irq_start;
 	}
-	domain->host_data = gic;
-	domain->ops = &gic_irq_domain_ops;
-	irq_domain_add(domain);
+	gic->domain = irq_domain_add_legacy(node, gic_irqs, irq_base,
gic_irqs is wrong here. It needs 16 or 32 subtracted off. This patch
will fix things:
diff --git a/arch/arm/common/gic.c b/arch/arm/common/gic.c
index 44bf4e7..5fc0c97 100644
--- a/arch/arm/common/gic.c
+++ b/arch/arm/common/gic.c
@@ -707,8 +707,9 @@ void __init gic_init_bases(unsigned int gic_nr, int
irq_start,
        if (gic_irqs > 1020)
                gic_irqs = 1020;
        gic->gic_irqs = gic_irqs;
+       gic_irqs -= hwirq_base;

-       irq_base = irq_alloc_descs(irq_start, 16, gic_irqs - hwirq_base,
+       irq_base = irq_alloc_descs(irq_start, 16, gic_irqs,
                                   numa_node_id());
        if (IS_ERR_VALUE(irq_base)) {
                WARN(1, "Cannot allocate irq_descs @ IRQ%d, assuming
pre-allocated\n",
+				    hwirq_base, &gic_irq_domain_ops, gic);
+	if (WARN_ON(!gic->domain))
+		return;
 
 	gic_chip.flags |= gic_arch_extn.flags;
 	gic_dist_init(gic);
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help