Commit eef24afb28561a5a9f4be8f8da97735b7e6a826f
Committed by
Thomas Gleixner
1 parent
5bd078dda4
Exists in
master
and in
4 other branches
irq: Fix check for already initialized irq_domain in irq_domain_add
The sanity check in irq_domain_add() tests desc->irq_data != NULL or irq_data->domain != NULL. This prevents adding an irq_domain to a irq descriptor when irq_data exists, which true when the irq descriptor exists. This went unnoticed so far as the simple domain code did not enter this code path because domain->nr_irqs is always 0 for the simple domains. Split the check for irq_data == NULL out and have a separate warning for it. [ tglx: Made the check for irq_data == NULL separate ] Signed-off-by: Rob Herring <rob.herring@calxeda.com> Cc: Grant Likely <grant.likely@secretlab.ca> Cc: marc.zyngier@arm.com Cc: thomas.abraham@linaro.org Cc: jamie@jamieiles.com Cc: b-cousson@ti.com Cc: shawn.guo@linaro.org Cc: linux-arm-kernel@lists.infradead.org Cc: devicetree-discuss@lists.ozlabs.org Link: http://lkml.kernel.org/r/1316017900-19918-3-git-send-email-robherring2@gmail.com Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Showing 1 changed file with 5 additions and 1 deletions Side-by-side Diff
kernel/irq/irqdomain.c
... | ... | @@ -29,7 +29,11 @@ |
29 | 29 | */ |
30 | 30 | for (hwirq = 0; hwirq < domain->nr_irq; hwirq++) { |
31 | 31 | d = irq_get_irq_data(irq_domain_to_irq(domain, hwirq)); |
32 | - if (d || d->domain) { | |
32 | + if (!d) { | |
33 | + WARN(1, "error: assigning domain to non existant irq_desc"); | |
34 | + return; | |
35 | + } | |
36 | + if (d->domain) { | |
33 | 37 | /* things are broken; just report, don't clean up */ |
34 | 38 | WARN(1, "error: irq_desc already assigned to a domain"); |
35 | 39 | return; |