aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>2008-12-25 22:24:24 -0500
committerIngo Molnar <mingo@elte.hu>2008-12-26 03:48:17 -0500
commitf9af0e70911e9d6cc9a68f784dca86415486084d (patch)
tree58a83c34cc8a511b5e05d48425251621e9b471a1
parent51bc39f4ba35bae153b32145077fb1109bcae14c (diff)
irq: for_each_irq_desc() move to irqnr.h
Impact: cleanup before CONFIG_SPARSE_IRQ age, for_each_irq_desc() sat in irqnr.h and could be called from generic code. CONFIG_SPARSE_IRQ breaks this assumption, but SPARSE_IRQ version for_each_irq_desc() also can move into irqnr.h easily. Also, this patch unifies CONFIG_SPARSE_IRQ and !CONFIG_SPARSE_IRQ for_each_irq_desc(). Signed-off-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
-rw-r--r--include/linux/irq.h24
-rw-r--r--include/linux/irqnr.h19
-rw-r--r--kernel/irq/handle.c13
3 files changed, 24 insertions, 32 deletions
diff --git a/include/linux/irq.h b/include/linux/irq.h
index 98564dc64476..69da275c0ebd 100644
--- a/include/linux/irq.h
+++ b/include/linux/irq.h
@@ -202,33 +202,17 @@ extern void arch_free_chip_data(struct irq_desc *old_desc, struct irq_desc *desc
202 202
203#ifndef CONFIG_SPARSE_IRQ 203#ifndef CONFIG_SPARSE_IRQ
204extern struct irq_desc irq_desc[NR_IRQS]; 204extern struct irq_desc irq_desc[NR_IRQS];
205 205#else /* CONFIG_SPARSE_IRQ */
206static inline struct irq_desc *irq_to_desc(unsigned int irq)
207{
208 return (irq < NR_IRQS) ? irq_desc + irq : NULL;
209}
210static inline struct irq_desc *irq_to_desc_alloc_cpu(unsigned int irq, int cpu)
211{
212 return irq_to_desc(irq);
213}
214
215#else
216
217extern struct irq_desc *irq_to_desc(unsigned int irq);
218extern struct irq_desc *irq_to_desc_alloc_cpu(unsigned int irq, int cpu);
219extern struct irq_desc *move_irq_desc(struct irq_desc *old_desc, int cpu); 206extern struct irq_desc *move_irq_desc(struct irq_desc *old_desc, int cpu);
220 207
221# define for_each_irq_desc(irq, desc) \
222 for (irq = 0, desc = irq_to_desc(irq); irq < nr_irqs; irq++, desc = irq_to_desc(irq))
223# define for_each_irq_desc_reverse(irq, desc) \
224 for (irq = nr_irqs - 1, desc = irq_to_desc(irq); irq >= 0; irq--, desc = irq_to_desc(irq))
225
226#define kstat_irqs_this_cpu(DESC) \ 208#define kstat_irqs_this_cpu(DESC) \
227 ((DESC)->kstat_irqs[smp_processor_id()]) 209 ((DESC)->kstat_irqs[smp_processor_id()])
228#define kstat_incr_irqs_this_cpu(irqno, DESC) \ 210#define kstat_incr_irqs_this_cpu(irqno, DESC) \
229 ((DESC)->kstat_irqs[smp_processor_id()]++) 211 ((DESC)->kstat_irqs[smp_processor_id()]++)
230 212
231#endif 213#endif /* CONFIG_SPARSE_IRQ */
214
215extern struct irq_desc *irq_to_desc_alloc_cpu(unsigned int irq, int cpu);
232 216
233static inline struct irq_desc * 217static inline struct irq_desc *
234irq_remap_to_desc(unsigned int irq, struct irq_desc *desc) 218irq_remap_to_desc(unsigned int irq, struct irq_desc *desc)
diff --git a/include/linux/irqnr.h b/include/linux/irqnr.h
index 95d2b74641f5..c4a59c7a478b 100644
--- a/include/linux/irqnr.h
+++ b/include/linux/irqnr.h
@@ -15,20 +15,19 @@
15 15
16# define for_each_irq_desc_reverse(irq, desc) \ 16# define for_each_irq_desc_reverse(irq, desc) \
17 for (irq = nr_irqs - 1; irq >= 0; irq--) 17 for (irq = nr_irqs - 1; irq >= 0; irq--)
18#else 18#else /* CONFIG_GENERIC_HARDIRQS */
19 19
20extern int nr_irqs; 20extern int nr_irqs;
21extern struct irq_desc *irq_to_desc(unsigned int irq);
21 22
22#ifndef CONFIG_SPARSE_IRQ 23# define for_each_irq_desc(irq, desc) \
24 for (irq = 0, desc = irq_to_desc(irq); irq < nr_irqs; \
25 irq++, desc = irq_to_desc(irq))
26# define for_each_irq_desc_reverse(irq, desc) \
27 for (irq = nr_irqs - 1, desc = irq_to_desc(irq); irq >= 0; \
28 irq--, desc = irq_to_desc(irq))
23 29
24struct irq_desc; 30#endif /* CONFIG_GENERIC_HARDIRQS */
25# define for_each_irq_desc(irq, desc) \
26 for (irq = 0, desc = irq_desc; irq < nr_irqs; irq++, desc++)
27# define for_each_irq_desc_reverse(irq, desc) \
28 for (irq = nr_irqs - 1, desc = irq_desc + (nr_irqs - 1); \
29 irq >= 0; irq--, desc--)
30#endif
31#endif
32 31
33#define for_each_irq_nr(irq) \ 32#define for_each_irq_nr(irq) \
34 for (irq = 0; irq < nr_irqs; irq++) 33 for (irq = 0; irq < nr_irqs; irq++)
diff --git a/kernel/irq/handle.c b/kernel/irq/handle.c
index 6492400cb50d..4db7d2df86b6 100644
--- a/kernel/irq/handle.c
+++ b/kernel/irq/handle.c
@@ -203,7 +203,7 @@ out_unlock:
203 return desc; 203 return desc;
204} 204}
205 205
206#else 206#else /* !CONFIG_SPARSE_IRQ */
207 207
208struct irq_desc irq_desc[NR_IRQS] __cacheline_aligned_in_smp = { 208struct irq_desc irq_desc[NR_IRQS] __cacheline_aligned_in_smp = {
209 [0 ... NR_IRQS-1] = { 209 [0 ... NR_IRQS-1] = {
@@ -218,7 +218,16 @@ struct irq_desc irq_desc[NR_IRQS] __cacheline_aligned_in_smp = {
218 } 218 }
219}; 219};
220 220
221#endif 221struct irq_desc *irq_to_desc(unsigned int irq)
222{
223 return (irq < NR_IRQS) ? irq_desc + irq : NULL;
224}
225
226struct irq_desc *irq_to_desc_alloc_cpu(unsigned int irq, int cpu)
227{
228 return irq_to_desc(irq);
229}
230#endif /* !CONFIG_SPARSE_IRQ */
222 231
223/* 232/*
224 * What should we do if we get a hw irq event on an illegal vector? 233 * What should we do if we get a hw irq event on an illegal vector?