aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux
diff options
context:
space:
mode:
authorKOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>2009-01-03 13:11:05 -0500
committerIngo Molnar <mingo@elte.hu>2009-01-07 17:18:08 -0500
commit01d07820a0df6b6134c1bb75b1e84c9d0cdab3be (patch)
tree381feeeacd197139e7fab66f2829a8390cbbcab2 /include/linux
parentede6f5aea054d3fb67c78857f7abdee602302043 (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.h8
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