aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/kernel/irq.c
diff options
context:
space:
mode:
authorMichael Ellerman <michael@ellerman.id.au>2009-10-13 15:45:00 -0400
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>2009-10-30 02:21:31 -0400
commit750ab112919220a1d14491ae210b689bcb7d6d66 (patch)
tree4d2cb0c572438c088d062acd83c7f2dbb8055c27 /arch/powerpc/kernel/irq.c
parent76f1d94f3ebdee0d14cab4d87bdeed1cf9badb17 (diff)
powerpc: Rearrange and fix show_interrupts() for sparse irq_descs
Move the default case out of the if, ie. when we're just displaying an irq. And consolidate all the odd cases at the top, ie. printing the header and footer. And in the process cope with sparse irq_descs. Signed-off-by: Michael Ellerman <michael@ellerman.id.au> Acked-by: Grant Likely <grant.likely@secretlab.ca> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Diffstat (limited to 'arch/powerpc/kernel/irq.c')
-rw-r--r--arch/powerpc/kernel/irq.c64
1 files changed, 37 insertions, 27 deletions
diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c
index baa49eb93228..63e27d5c52de 100644
--- a/arch/powerpc/kernel/irq.c
+++ b/arch/powerpc/kernel/irq.c
@@ -187,33 +187,7 @@ int show_interrupts(struct seq_file *p, void *v)
187 for_each_online_cpu(j) 187 for_each_online_cpu(j)
188 seq_printf(p, "CPU%d ", j); 188 seq_printf(p, "CPU%d ", j);
189 seq_putc(p, '\n'); 189 seq_putc(p, '\n');
190 } 190 } else if (i == nr_irqs) {
191
192 if (i < NR_IRQS) {
193 desc = irq_to_desc(i);
194 spin_lock_irqsave(&desc->lock, flags);
195 action = desc->action;
196 if (!action || !action->handler)
197 goto skip;
198 seq_printf(p, "%3d: ", i);
199#ifdef CONFIG_SMP
200 for_each_online_cpu(j)
201 seq_printf(p, "%10u ", kstat_irqs_cpu(i, j));
202#else
203 seq_printf(p, "%10u ", kstat_irqs(i));
204#endif /* CONFIG_SMP */
205 if (desc->chip)
206 seq_printf(p, " %s ", desc->chip->typename);
207 else
208 seq_puts(p, " None ");
209 seq_printf(p, "%s", (desc->status & IRQ_LEVEL) ? "Level " : "Edge ");
210 seq_printf(p, " %s", action->name);
211 for (action = action->next; action; action = action->next)
212 seq_printf(p, ", %s", action->name);
213 seq_putc(p, '\n');
214skip:
215 spin_unlock_irqrestore(&desc->lock, flags);
216 } else if (i == NR_IRQS) {
217#if defined(CONFIG_PPC32) && defined(CONFIG_TAU_INT) 191#if defined(CONFIG_PPC32) && defined(CONFIG_TAU_INT)
218 if (tau_initialized){ 192 if (tau_initialized){
219 seq_puts(p, "TAU: "); 193 seq_puts(p, "TAU: ");
@@ -223,7 +197,43 @@ skip:
223 } 197 }
224#endif /* CONFIG_PPC32 && CONFIG_TAU_INT*/ 198#endif /* CONFIG_PPC32 && CONFIG_TAU_INT*/
225 seq_printf(p, "BAD: %10u\n", ppc_spurious_interrupts); 199 seq_printf(p, "BAD: %10u\n", ppc_spurious_interrupts);
200
201 return 0;
226 } 202 }
203
204 desc = irq_to_desc(i);
205 if (!desc)
206 return 0;
207
208 spin_lock_irqsave(&desc->lock, flags);
209
210 action = desc->action;
211 if (!action || !action->handler)
212 goto skip;
213
214 seq_printf(p, "%3d: ", i);
215#ifdef CONFIG_SMP
216 for_each_online_cpu(j)
217 seq_printf(p, "%10u ", kstat_irqs_cpu(i, j));
218#else
219 seq_printf(p, "%10u ", kstat_irqs(i));
220#endif /* CONFIG_SMP */
221
222 if (desc->chip)
223 seq_printf(p, " %s ", desc->chip->typename);
224 else
225 seq_puts(p, " None ");
226
227 seq_printf(p, "%s", (desc->status & IRQ_LEVEL) ? "Level " : "Edge ");
228 seq_printf(p, " %s", action->name);
229
230 for (action = action->next; action; action = action->next)
231 seq_printf(p, ", %s", action->name);
232 seq_putc(p, '\n');
233
234skip:
235 spin_unlock_irqrestore(&desc->lock, flags);
236
227 return 0; 237 return 0;
228} 238}
229 239