diff options
author | KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> | 2009-01-03 13:11:05 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-01-07 17:18:08 -0500 |
commit | 01d07820a0df6b6134c1bb75b1e84c9d0cdab3be (patch) | |
tree | 381feeeacd197139e7fab66f2829a8390cbbcab2 /include/linux | |
parent | ede6f5aea054d3fb67c78857f7abdee602302043 (diff) |
sparseirq: make for_each_irq_desc() more robust
Raja reported for_each_irq_desc() has possibility unsafeness:
if anyone write folliwing code, for_each_irq_desc() doesn't work
as intended:
(right now this code does not exist at all)
if (safe)
for_each_irq_desc(irq, desc) {
...
}
else
panic();
Reported-by: Raja R Harinath <harinath@hurrynot.org>
Signed-off-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'include/linux')
-rw-r--r-- | include/linux/irqnr.h | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/include/linux/irqnr.h b/include/linux/irqnr.h index 86af92e9e84c..52ebbb4b161d 100644 --- a/include/linux/irqnr.h +++ b/include/linux/irqnr.h | |||
@@ -28,13 +28,17 @@ extern struct irq_desc *irq_to_desc(unsigned int irq); | |||
28 | # define for_each_irq_desc(irq, desc) \ | 28 | # define for_each_irq_desc(irq, desc) \ |
29 | for (irq = 0, desc = irq_to_desc(irq); irq < nr_irqs; \ | 29 | for (irq = 0, desc = irq_to_desc(irq); irq < nr_irqs; \ |
30 | irq++, desc = irq_to_desc(irq)) \ | 30 | irq++, desc = irq_to_desc(irq)) \ |
31 | if (desc) | 31 | if (!desc) \ |
32 | ; \ | ||
33 | else | ||
32 | 34 | ||
33 | 35 | ||
34 | # define for_each_irq_desc_reverse(irq, desc) \ | 36 | # define for_each_irq_desc_reverse(irq, desc) \ |
35 | for (irq = nr_irqs - 1, desc = irq_to_desc(irq); irq >= 0; \ | 37 | for (irq = nr_irqs - 1, desc = irq_to_desc(irq); irq >= 0; \ |
36 | irq--, desc = irq_to_desc(irq)) \ | 38 | irq--, desc = irq_to_desc(irq)) \ |
37 | if (desc) | 39 | if (!desc) \ |
40 | ; \ | ||
41 | else | ||
38 | 42 | ||
39 | #endif /* CONFIG_GENERIC_HARDIRQS */ | 43 | #endif /* CONFIG_GENERIC_HARDIRQS */ |
40 | 44 | ||