arm: gic: Check for error code on irq_domain_add

This API now returns an error. Since gic_init_bases() is called
early on, there's probably not a whole lot we can do here except
send a warning.

Change-Id: I2835dacfa191db0ce70434de23e6ee540fe33b57
Signed-off-by: Michael Bohan <mbohan@codeaurora.org>
This commit is contained in:
Michael Bohan
2012-01-12 15:32:21 -08:00
parent 6f4df41a29
commit 33efecf03d

View File

@@ -788,7 +788,7 @@ void __init gic_init_bases(unsigned int gic_nr, int irq_start,
{ {
struct gic_chip_data *gic; struct gic_chip_data *gic;
struct irq_domain *domain; struct irq_domain *domain;
int gic_irqs; int gic_irqs, rc;
BUG_ON(gic_nr >= MAX_GIC_NR); BUG_ON(gic_nr >= MAX_GIC_NR);
@@ -801,11 +801,8 @@ void __init gic_init_bases(unsigned int gic_nr, int irq_start,
gic->dist_base.percpu_base = alloc_percpu(void __iomem *); gic->dist_base.percpu_base = alloc_percpu(void __iomem *);
gic->cpu_base.percpu_base = alloc_percpu(void __iomem *); gic->cpu_base.percpu_base = alloc_percpu(void __iomem *);
if (WARN_ON(!gic->dist_base.percpu_base || if (WARN_ON(!gic->dist_base.percpu_base ||
!gic->cpu_base.percpu_base)) { !gic->cpu_base.percpu_base))
free_percpu(gic->dist_base.percpu_base); goto init_bases_err;
free_percpu(gic->cpu_base.percpu_base);
return;
}
for_each_possible_cpu(cpu) { for_each_possible_cpu(cpu) {
unsigned long offset = percpu_offset * cpu_logical_map(cpu); unsigned long offset = percpu_offset * cpu_logical_map(cpu);
@@ -857,13 +854,23 @@ void __init gic_init_bases(unsigned int gic_nr, int irq_start,
} }
domain->priv = gic; domain->priv = gic;
domain->ops = &gic_irq_domain_ops; domain->ops = &gic_irq_domain_ops;
irq_domain_add(domain); rc = irq_domain_add(domain);
if (rc) {
WARN(1, "Unable to create irq_domain\n");
goto init_bases_err;
}
irq_domain_register(domain); irq_domain_register(domain);
gic_chip.flags |= gic_arch_extn.flags; gic_chip.flags |= gic_arch_extn.flags;
gic_dist_init(gic); gic_dist_init(gic);
gic_cpu_init(gic); gic_cpu_init(gic);
gic_pm_init(gic); gic_pm_init(gic);
return;
init_bases_err:
free_percpu(gic->dist_base.percpu_base);
free_percpu(gic->cpu_base.percpu_base);
} }
void __cpuinit gic_secondary_init(unsigned int gic_nr) void __cpuinit gic_secondary_init(unsigned int gic_nr)