diff options
Diffstat (limited to 'arch/x86/kernel/irq_32.c')
-rw-r--r-- | arch/x86/kernel/irq_32.c | 49 |
1 files changed, 43 insertions, 6 deletions
diff --git a/arch/x86/kernel/irq_32.c b/arch/x86/kernel/irq_32.c index e173b763f148..d3fde94f7345 100644 --- a/arch/x86/kernel/irq_32.c +++ b/arch/x86/kernel/irq_32.c | |||
@@ -255,9 +255,17 @@ int show_interrupts(struct seq_file *p, void *v) | |||
255 | } | 255 | } |
256 | 256 | ||
257 | if (i < NR_IRQS) { | 257 | if (i < NR_IRQS) { |
258 | unsigned any_count = 0; | ||
259 | |||
258 | spin_lock_irqsave(&irq_desc[i].lock, flags); | 260 | spin_lock_irqsave(&irq_desc[i].lock, flags); |
261 | #ifndef CONFIG_SMP | ||
262 | any_count = kstat_irqs(i); | ||
263 | #else | ||
264 | for_each_online_cpu(j) | ||
265 | any_count |= kstat_cpu(j).irqs[i]; | ||
266 | #endif | ||
259 | action = irq_desc[i].action; | 267 | action = irq_desc[i].action; |
260 | if (!action) | 268 | if (!action && !any_count) |
261 | goto skip; | 269 | goto skip; |
262 | seq_printf(p, "%3d: ",i); | 270 | seq_printf(p, "%3d: ",i); |
263 | #ifndef CONFIG_SMP | 271 | #ifndef CONFIG_SMP |
@@ -268,10 +276,12 @@ int show_interrupts(struct seq_file *p, void *v) | |||
268 | #endif | 276 | #endif |
269 | seq_printf(p, " %8s", irq_desc[i].chip->name); | 277 | seq_printf(p, " %8s", irq_desc[i].chip->name); |
270 | seq_printf(p, "-%-8s", irq_desc[i].name); | 278 | seq_printf(p, "-%-8s", irq_desc[i].name); |
271 | seq_printf(p, " %s", action->name); | ||
272 | 279 | ||
273 | for (action=action->next; action; action = action->next) | 280 | if (action) { |
274 | seq_printf(p, ", %s", action->name); | 281 | seq_printf(p, " %s", action->name); |
282 | while ((action = action->next) != NULL) | ||
283 | seq_printf(p, ", %s", action->name); | ||
284 | } | ||
275 | 285 | ||
276 | seq_putc(p, '\n'); | 286 | seq_putc(p, '\n'); |
277 | skip: | 287 | skip: |
@@ -280,14 +290,41 @@ skip: | |||
280 | seq_printf(p, "NMI: "); | 290 | seq_printf(p, "NMI: "); |
281 | for_each_online_cpu(j) | 291 | for_each_online_cpu(j) |
282 | seq_printf(p, "%10u ", nmi_count(j)); | 292 | seq_printf(p, "%10u ", nmi_count(j)); |
283 | seq_putc(p, '\n'); | 293 | seq_printf(p, " Non-maskable interrupts\n"); |
284 | #ifdef CONFIG_X86_LOCAL_APIC | 294 | #ifdef CONFIG_X86_LOCAL_APIC |
285 | seq_printf(p, "LOC: "); | 295 | seq_printf(p, "LOC: "); |
286 | for_each_online_cpu(j) | 296 | for_each_online_cpu(j) |
287 | seq_printf(p, "%10u ", | 297 | seq_printf(p, "%10u ", |
288 | per_cpu(irq_stat,j).apic_timer_irqs); | 298 | per_cpu(irq_stat,j).apic_timer_irqs); |
289 | seq_putc(p, '\n'); | 299 | seq_printf(p, " Local timer interrupts\n"); |
290 | #endif | 300 | #endif |
301 | #ifdef CONFIG_SMP | ||
302 | seq_printf(p, "RES: "); | ||
303 | for_each_online_cpu(j) | ||
304 | seq_printf(p, "%10u ", | ||
305 | per_cpu(irq_stat,j).irq_resched_count); | ||
306 | seq_printf(p, " Rescheduling interrupts\n"); | ||
307 | seq_printf(p, "CAL: "); | ||
308 | for_each_online_cpu(j) | ||
309 | seq_printf(p, "%10u ", | ||
310 | per_cpu(irq_stat,j).irq_call_count); | ||
311 | seq_printf(p, " function call interrupts\n"); | ||
312 | seq_printf(p, "TLB: "); | ||
313 | for_each_online_cpu(j) | ||
314 | seq_printf(p, "%10u ", | ||
315 | per_cpu(irq_stat,j).irq_tlb_count); | ||
316 | seq_printf(p, " TLB shootdowns\n"); | ||
317 | #endif | ||
318 | seq_printf(p, "TRM: "); | ||
319 | for_each_online_cpu(j) | ||
320 | seq_printf(p, "%10u ", | ||
321 | per_cpu(irq_stat,j).irq_thermal_count); | ||
322 | seq_printf(p, " Thermal event interrupts\n"); | ||
323 | seq_printf(p, "SPU: "); | ||
324 | for_each_online_cpu(j) | ||
325 | seq_printf(p, "%10u ", | ||
326 | per_cpu(irq_stat,j).irq_spurious_count); | ||
327 | seq_printf(p, " Spurious interrupts\n"); | ||
291 | seq_printf(p, "ERR: %10u\n", atomic_read(&irq_err_count)); | 328 | seq_printf(p, "ERR: %10u\n", atomic_read(&irq_err_count)); |
292 | #if defined(CONFIG_X86_IO_APIC) | 329 | #if defined(CONFIG_X86_IO_APIC) |
293 | seq_printf(p, "MIS: %10u\n", atomic_read(&irq_mis_count)); | 330 | seq_printf(p, "MIS: %10u\n", atomic_read(&irq_mis_count)); |