diff options
| -rw-r--r-- | include/linux/irq.h | 24 | ||||
| -rw-r--r-- | include/linux/irqnr.h | 19 | ||||
| -rw-r--r-- | kernel/irq/handle.c | 13 |
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 |
| 204 | extern struct irq_desc irq_desc[NR_IRQS]; | 204 | extern struct irq_desc irq_desc[NR_IRQS]; |
| 205 | 205 | #else /* CONFIG_SPARSE_IRQ */ | |
| 206 | static inline struct irq_desc *irq_to_desc(unsigned int irq) | ||
| 207 | { | ||
| 208 | return (irq < NR_IRQS) ? irq_desc + irq : NULL; | ||
| 209 | } | ||
| 210 | static 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 | |||
| 217 | extern struct irq_desc *irq_to_desc(unsigned int irq); | ||
| 218 | extern struct irq_desc *irq_to_desc_alloc_cpu(unsigned int irq, int cpu); | ||
| 219 | extern struct irq_desc *move_irq_desc(struct irq_desc *old_desc, int cpu); | 206 | extern 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 | |||
| 215 | extern struct irq_desc *irq_to_desc_alloc_cpu(unsigned int irq, int cpu); | ||
| 232 | 216 | ||
| 233 | static inline struct irq_desc * | 217 | static inline struct irq_desc * |
| 234 | irq_remap_to_desc(unsigned int irq, struct irq_desc *desc) | 218 | irq_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 | ||
| 20 | extern int nr_irqs; | 20 | extern int nr_irqs; |
| 21 | extern 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 | ||
| 24 | struct 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 | ||
| 208 | struct irq_desc irq_desc[NR_IRQS] __cacheline_aligned_in_smp = { | 208 | struct 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 | 221 | struct irq_desc *irq_to_desc(unsigned int irq) |
| 222 | { | ||
| 223 | return (irq < NR_IRQS) ? irq_desc + irq : NULL; | ||
| 224 | } | ||
| 225 | |||
| 226 | struct 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? |
