diff options
Diffstat (limited to 'arch/x86/kernel/irq_32.c')
-rw-r--r-- | arch/x86/kernel/irq_32.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/arch/x86/kernel/irq_32.c b/arch/x86/kernel/irq_32.c index 147352df28b9..468acd04aa2e 100644 --- a/arch/x86/kernel/irq_32.c +++ b/arch/x86/kernel/irq_32.c | |||
@@ -313,16 +313,20 @@ skip: | |||
313 | per_cpu(irq_stat,j).irq_tlb_count); | 313 | per_cpu(irq_stat,j).irq_tlb_count); |
314 | seq_printf(p, " TLB shootdowns\n"); | 314 | seq_printf(p, " TLB shootdowns\n"); |
315 | #endif | 315 | #endif |
316 | #ifdef CONFIG_X86_MCE | ||
316 | seq_printf(p, "TRM: "); | 317 | seq_printf(p, "TRM: "); |
317 | for_each_online_cpu(j) | 318 | for_each_online_cpu(j) |
318 | seq_printf(p, "%10u ", | 319 | seq_printf(p, "%10u ", |
319 | per_cpu(irq_stat,j).irq_thermal_count); | 320 | per_cpu(irq_stat,j).irq_thermal_count); |
320 | seq_printf(p, " Thermal event interrupts\n"); | 321 | seq_printf(p, " Thermal event interrupts\n"); |
322 | #endif | ||
323 | #ifdef CONFIG_X86_LOCAL_APIC | ||
321 | seq_printf(p, "SPU: "); | 324 | seq_printf(p, "SPU: "); |
322 | for_each_online_cpu(j) | 325 | for_each_online_cpu(j) |
323 | seq_printf(p, "%10u ", | 326 | seq_printf(p, "%10u ", |
324 | per_cpu(irq_stat,j).irq_spurious_count); | 327 | per_cpu(irq_stat,j).irq_spurious_count); |
325 | seq_printf(p, " Spurious interrupts\n"); | 328 | seq_printf(p, " Spurious interrupts\n"); |
329 | #endif | ||
326 | seq_printf(p, "ERR: %10u\n", atomic_read(&irq_err_count)); | 330 | seq_printf(p, "ERR: %10u\n", atomic_read(&irq_err_count)); |
327 | #if defined(CONFIG_X86_IO_APIC) | 331 | #if defined(CONFIG_X86_IO_APIC) |
328 | seq_printf(p, "MIS: %10u\n", atomic_read(&irq_mis_count)); | 332 | seq_printf(p, "MIS: %10u\n", atomic_read(&irq_mis_count)); |
@@ -331,6 +335,40 @@ skip: | |||
331 | return 0; | 335 | return 0; |
332 | } | 336 | } |
333 | 337 | ||
338 | /* | ||
339 | * /proc/stat helpers | ||
340 | */ | ||
341 | u64 arch_irq_stat_cpu(unsigned int cpu) | ||
342 | { | ||
343 | u64 sum = nmi_count(cpu); | ||
344 | |||
345 | #ifdef CONFIG_X86_LOCAL_APIC | ||
346 | sum += per_cpu(irq_stat, cpu).apic_timer_irqs; | ||
347 | #endif | ||
348 | #ifdef CONFIG_SMP | ||
349 | sum += per_cpu(irq_stat, cpu).irq_resched_count; | ||
350 | sum += per_cpu(irq_stat, cpu).irq_call_count; | ||
351 | sum += per_cpu(irq_stat, cpu).irq_tlb_count; | ||
352 | #endif | ||
353 | #ifdef CONFIG_X86_MCE | ||
354 | sum += per_cpu(irq_stat, cpu).irq_thermal_count; | ||
355 | #endif | ||
356 | #ifdef CONFIG_X86_LOCAL_APIC | ||
357 | sum += per_cpu(irq_stat, cpu).irq_spurious_count; | ||
358 | #endif | ||
359 | return sum; | ||
360 | } | ||
361 | |||
362 | u64 arch_irq_stat(void) | ||
363 | { | ||
364 | u64 sum = atomic_read(&irq_err_count); | ||
365 | |||
366 | #ifdef CONFIG_X86_IO_APIC | ||
367 | sum += atomic_read(&irq_mis_count); | ||
368 | #endif | ||
369 | return sum; | ||
370 | } | ||
371 | |||
334 | #ifdef CONFIG_HOTPLUG_CPU | 372 | #ifdef CONFIG_HOTPLUG_CPU |
335 | #include <mach_apic.h> | 373 | #include <mach_apic.h> |
336 | 374 | ||