x86: hardirq: introduce inc_irq_stat()
authorHiroshi Shimamoto <h-shimamoto@ct.jp.nec.com>
Tue, 9 Dec 2008 03:19:26 +0000 (19:19 -0800)
committerIngo Molnar <mingo@elte.hu>
Fri, 12 Dec 2008 10:59:49 +0000 (11:59 +0100)
Impact: cleanup

Introduce inc_irq_stat() macro and unify irq_stat accounting code.

Signed-off-by: Hiroshi Shimamoto <h-shimamoto@ct.jp.nec.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
arch/x86/include/asm/hardirq_32.h
arch/x86/include/asm/hardirq_64.h
arch/x86/kernel/apic.c
arch/x86/kernel/smp.c
arch/x86/kernel/traps.c

index 5ca135e72f2b0952889c395eee74d865e7fbed26..cf7954d1405fe646c6835072c6a1bf924656ac85 100644 (file)
@@ -22,6 +22,8 @@ DECLARE_PER_CPU(irq_cpustat_t, irq_stat);
 #define __ARCH_IRQ_STAT
 #define __IRQ_STAT(cpu, member) (per_cpu(irq_stat, cpu).member)
 
+#define inc_irq_stat(member)   (__get_cpu_var(irq_stat).member++)
+
 void ack_bad_irq(unsigned int irq);
 #include <linux/irq_cpustat.h>
 
index 1ba381fc51d38eca1012239b6949dedd59ad9f0d..b5a6b5d56704c89330d2f88f515c5d25281e105f 100644 (file)
@@ -11,6 +11,8 @@
 
 #define __ARCH_IRQ_STAT 1
 
+#define inc_irq_stat(member)   add_pda(member, 1)
+
 #define local_softirq_pending() read_pda(__softirq_pending)
 
 #define __ARCH_SET_SOFTIRQ_PENDING 1
index 16f94879b52578aba3e689d7a8adcccf59ab8ecb..1771dd7468116669f39d2707d16900a6b8129a94 100644 (file)
@@ -783,11 +783,7 @@ static void local_apic_timer_interrupt(void)
        /*
         * the NMI deadlock-detector uses this.
         */
-#ifdef CONFIG_X86_64
-       add_pda(apic_timer_irqs, 1);
-#else
-       per_cpu(irq_stat, cpu).apic_timer_irqs++;
-#endif
+       inc_irq_stat(apic_timer_irqs);
 
        evt->event_handler(evt);
 }
@@ -1695,14 +1691,11 @@ void smp_spurious_interrupt(struct pt_regs *regs)
        if (v & (1 << (SPURIOUS_APIC_VECTOR & 0x1f)))
                ack_APIC_irq();
 
-#ifdef CONFIG_X86_64
-       add_pda(irq_spurious_count, 1);
-#else
+       inc_irq_stat(irq_spurious_count);
+
        /* see sw-dev-man vol 3, chapter 7.4.13.5 */
        printk(KERN_INFO "spurious APIC interrupt on CPU#%d, "
               "should never happen.\n", smp_processor_id());
-       __get_cpu_var(irq_stat).irq_spurious_count++;
-#endif
        irq_exit();
 }
 
index 18f9b19f5f8f5d46582b64501d83d11cb4376eb6..d18537ce2c79424cb10f8f912b627ba36bb2c862 100644 (file)
@@ -178,11 +178,7 @@ static void native_smp_send_stop(void)
 void smp_reschedule_interrupt(struct pt_regs *regs)
 {
        ack_APIC_irq();
-#ifdef CONFIG_X86_32
-       __get_cpu_var(irq_stat).irq_resched_count++;
-#else
-       add_pda(irq_resched_count, 1);
-#endif
+       inc_irq_stat(irq_resched_count);
 }
 
 void smp_call_function_interrupt(struct pt_regs *regs)
@@ -190,11 +186,7 @@ void smp_call_function_interrupt(struct pt_regs *regs)
        ack_APIC_irq();
        irq_enter();
        generic_smp_call_function_interrupt();
-#ifdef CONFIG_X86_32
-       __get_cpu_var(irq_stat).irq_call_count++;
-#else
-       add_pda(irq_call_count, 1);
-#endif
+       inc_irq_stat(irq_call_count);
        irq_exit();
 }
 
@@ -203,11 +195,7 @@ void smp_call_function_single_interrupt(struct pt_regs *regs)
        ack_APIC_irq();
        irq_enter();
        generic_smp_call_function_single_interrupt();
-#ifdef CONFIG_X86_32
-       __get_cpu_var(irq_stat).irq_call_count++;
-#else
-       add_pda(irq_call_count, 1);
-#endif
+       inc_irq_stat(irq_call_count);
        irq_exit();
 }
 
index 04d242ab0161967985bcb7f9e24f9fe54fb9f33f..d815293e6d940546d52790d74591ec3e857caa9e 100644 (file)
@@ -481,11 +481,7 @@ do_nmi(struct pt_regs *regs, long error_code)
 {
        nmi_enter();
 
-#ifdef CONFIG_X86_32
-       { int cpu; cpu = smp_processor_id(); ++nmi_count(cpu); }
-#else
-       add_pda(__nmi_count, 1);
-#endif
+       inc_irq_stat(__nmi_count);
 
        if (!ignore_nmis)
                default_do_nmi(regs);