diff options
| -rw-r--r-- | fs/proc/stat.c | 20 | ||||
| -rw-r--r-- | include/linux/irq.h | 9 | ||||
| -rw-r--r-- | include/linux/irqnr.h | 19 |
3 files changed, 29 insertions, 19 deletions
diff --git a/fs/proc/stat.c b/fs/proc/stat.c index a13431ab7c65..3cb9492801c0 100644 --- a/fs/proc/stat.c +++ b/fs/proc/stat.c | |||
| @@ -45,9 +45,12 @@ static int show_stat(struct seq_file *p, void *v) | |||
| 45 | softirq = cputime64_add(softirq, kstat_cpu(i).cpustat.softirq); | 45 | softirq = cputime64_add(softirq, kstat_cpu(i).cpustat.softirq); |
| 46 | steal = cputime64_add(steal, kstat_cpu(i).cpustat.steal); | 46 | steal = cputime64_add(steal, kstat_cpu(i).cpustat.steal); |
| 47 | guest = cputime64_add(guest, kstat_cpu(i).cpustat.guest); | 47 | guest = cputime64_add(guest, kstat_cpu(i).cpustat.guest); |
| 48 | for_each_irq_desc(j, desc) { | 48 | for_each_irq_nr(j) { |
| 49 | #ifdef CONFIG_SPARSE_IRQ | ||
| 50 | desc = irq_to_desc(j); | ||
| 49 | if (!desc) | 51 | if (!desc) |
| 50 | continue; | 52 | continue; |
| 53 | #endif | ||
| 51 | sum += kstat_irqs_cpu(j, i); | 54 | sum += kstat_irqs_cpu(j, i); |
| 52 | } | 55 | } |
| 53 | sum += arch_irq_stat_cpu(i); | 56 | sum += arch_irq_stat_cpu(i); |
| @@ -92,14 +95,17 @@ static int show_stat(struct seq_file *p, void *v) | |||
| 92 | seq_printf(p, "intr %llu", (unsigned long long)sum); | 95 | seq_printf(p, "intr %llu", (unsigned long long)sum); |
| 93 | 96 | ||
| 94 | /* sum again ? it could be updated? */ | 97 | /* sum again ? it could be updated? */ |
| 95 | for (j = 0; j < NR_IRQS; j++) { | 98 | for_each_irq_nr(j) { |
| 96 | desc = irq_to_desc(j); | ||
| 97 | per_irq_sum = 0; | 99 | per_irq_sum = 0; |
| 98 | 100 | #ifdef CONFIG_SPARSE_IRQ | |
| 99 | if (desc) { | 101 | desc = irq_to_desc(j); |
| 100 | for_each_possible_cpu(i) | 102 | if (!desc) { |
| 101 | per_irq_sum += kstat_irqs_cpu(j, i); | 103 | seq_printf(p, " %u", per_irq_sum); |
| 104 | continue; | ||
| 102 | } | 105 | } |
| 106 | #endif | ||
| 107 | for_each_possible_cpu(i) | ||
| 108 | per_irq_sum += kstat_irqs_cpu(j, i); | ||
| 103 | 109 | ||
| 104 | seq_printf(p, " %u", per_irq_sum); | 110 | seq_printf(p, " %u", per_irq_sum); |
| 105 | } | 111 | } |
diff --git a/include/linux/irq.h b/include/linux/irq.h index 63b00439d4d2..b5749db3e5a1 100644 --- a/include/linux/irq.h +++ b/include/linux/irq.h | |||
| @@ -198,7 +198,6 @@ extern void arch_init_copy_chip_data(struct irq_desc *old_desc, | |||
| 198 | extern void arch_free_chip_data(struct irq_desc *old_desc, struct irq_desc *desc); | 198 | extern void arch_free_chip_data(struct irq_desc *old_desc, struct irq_desc *desc); |
| 199 | 199 | ||
| 200 | #ifndef CONFIG_SPARSE_IRQ | 200 | #ifndef CONFIG_SPARSE_IRQ |
| 201 | |||
| 202 | extern struct irq_desc irq_desc[NR_IRQS]; | 201 | extern struct irq_desc irq_desc[NR_IRQS]; |
| 203 | 202 | ||
| 204 | static inline struct irq_desc *irq_to_desc(unsigned int irq) | 203 | static inline struct irq_desc *irq_to_desc(unsigned int irq) |
| @@ -210,14 +209,6 @@ static inline struct irq_desc *irq_to_desc_alloc_cpu(unsigned int irq, int cpu) | |||
| 210 | return irq_to_desc(irq); | 209 | return irq_to_desc(irq); |
| 211 | } | 210 | } |
| 212 | 211 | ||
| 213 | #ifdef CONFIG_GENERIC_HARDIRQS | ||
| 214 | # define for_each_irq_desc(irq, desc) \ | ||
| 215 | for (irq = 0, desc = irq_desc; irq < nr_irqs; irq++, desc++) | ||
| 216 | # define for_each_irq_desc_reverse(irq, desc) \ | ||
| 217 | for (irq = nr_irqs - 1, desc = irq_desc + (nr_irqs - 1); \ | ||
| 218 | irq >= 0; irq--, desc--) | ||
| 219 | #endif | ||
| 220 | |||
| 221 | #else | 212 | #else |
| 222 | 213 | ||
| 223 | extern struct irq_desc *irq_to_desc(unsigned int irq); | 214 | extern struct irq_desc *irq_to_desc(unsigned int irq); |
diff --git a/include/linux/irqnr.h b/include/linux/irqnr.h index 7a299e989f8b..13754f813589 100644 --- a/include/linux/irqnr.h +++ b/include/linux/irqnr.h | |||
| @@ -8,9 +8,22 @@ | |||
| 8 | # define for_each_irq_desc(irq, desc) \ | 8 | # define for_each_irq_desc(irq, desc) \ |
| 9 | for (irq = 0; irq < nr_irqs; irq++) | 9 | for (irq = 0; irq < nr_irqs; irq++) |
| 10 | 10 | ||
| 11 | static inline early_sparse_irq_init(void) | 11 | # define for_each_irq_desc_reverse(irq, desc) \ |
| 12 | { | 12 | for (irq = nr_irqs - 1; irq >= 0; irq--) |
| 13 | } | 13 | #else |
| 14 | #ifndef CONFIG_SPARSE_IRQ | ||
| 15 | |||
| 16 | struct irq_desc; | ||
| 17 | extern int nr_irqs; | ||
| 18 | # define for_each_irq_desc(irq, desc) \ | ||
| 19 | for (irq = 0, desc = irq_desc; irq < nr_irqs; irq++, desc++) | ||
| 20 | # define for_each_irq_desc_reverse(irq, desc) \ | ||
| 21 | for (irq = nr_irqs - 1, desc = irq_desc + (nr_irqs - 1); \ | ||
| 22 | irq >= 0; irq--, desc--) | ||
| 14 | #endif | 23 | #endif |
| 24 | #endif | ||
| 25 | |||
| 26 | #define for_each_irq_nr(irq) \ | ||
| 27 | for (irq = 0; irq < nr_irqs; irq++) | ||
| 15 | 28 | ||
| 16 | #endif | 29 | #endif |
