diff -urNp ref/arch/i386/kernel/apic.c 2.4.20pre5aa1/arch/i386/kernel/apic.c --- ref/arch/i386/kernel/apic.c Thu Aug 29 02:13:02 2002 +++ 2.4.20pre5aa1/arch/i386/kernel/apic.c Fri Aug 30 01:38:43 2002 @@ -1055,7 +1055,6 @@ inline void smp_local_timer_interrupt(st * [ if a single-CPU system runs an SMP kernel then we call the local * interrupt as well. Thus we cannot inline the local irq ... ] */ -unsigned int apic_timer_irqs [NR_CPUS]; void smp_apic_timer_interrupt(struct pt_regs * regs) { @@ -1064,7 +1063,7 @@ void smp_apic_timer_interrupt(struct pt_ /* * the NMI deadlock-detector uses this. */ - apic_timer_irqs[cpu]++; + irq_stat[cpu].apic_timer_irqs++; /* * NOTE! We'd better ACK the irq immediately, diff -urNp ref/arch/i386/kernel/irq.c 2.4.20pre5aa1/arch/i386/kernel/irq.c --- ref/arch/i386/kernel/irq.c Thu Aug 29 02:13:02 2002 +++ 2.4.20pre5aa1/arch/i386/kernel/irq.c Fri Aug 30 01:38:43 2002 @@ -170,7 +170,7 @@ int get_irq_list(char *buf) p += sprintf(p, "LOC: "); for (j = 0; j < smp_num_cpus; j++) p += sprintf(p, "%10u ", - apic_timer_irqs[cpu_logical_map(j)]); + irq_stat[cpu_logical_map(j)].apic_timer_irqs); p += sprintf(p, "\n"); #endif p += sprintf(p, "ERR: %10u\n", atomic_read(&irq_err_count)); diff -urNp ref/arch/i386/kernel/nmi.c 2.4.20pre5aa1/arch/i386/kernel/nmi.c --- ref/arch/i386/kernel/nmi.c Fri Aug 9 14:52:06 2002 +++ 2.4.20pre5aa1/arch/i386/kernel/nmi.c Fri Aug 30 01:38:43 2002 @@ -343,7 +343,7 @@ void nmi_watchdog_tick (struct pt_regs * */ int sum, cpu = smp_processor_id(); - sum = apic_timer_irqs[cpu]; + sum = irq_stat[cpu].apic_timer_irqs; if (last_irq_sums[cpu] == sum) { /* diff -urNp ref/arch/ia64/kernel/irq.c 2.4.20pre5aa1/arch/ia64/kernel/irq.c --- ref/arch/ia64/kernel/irq.c Fri Aug 9 14:52:06 2002 +++ 2.4.20pre5aa1/arch/ia64/kernel/irq.c Fri Aug 30 01:38:43 2002 @@ -172,7 +172,7 @@ int get_irq_list(char *buf) p += sprintf(p, "LOC: "); for (j = 0; j < smp_num_cpus; j++) p += sprintf(p, "%10u ", - apic_timer_irqs[cpu_logical_map(j)]); + irq_stat[cpu_logical_map(j)].apic_timer_irqs); p += sprintf(p, "\n"); #endif p += sprintf(p, "ERR: %10u\n", atomic_read(&irq_err_count)); diff -urNp ref/include/asm-i386/apic.h 2.4.20pre5aa1/include/asm-i386/apic.h --- ref/include/asm-i386/apic.h Fri Aug 9 14:52:20 2002 +++ 2.4.20pre5aa1/include/asm-i386/apic.h Fri Aug 30 01:38:43 2002 @@ -85,7 +85,6 @@ extern void enable_APIC_timer(void); extern struct pm_dev *apic_pm_register(pm_dev_t, unsigned long, pm_callback); extern void apic_pm_unregister(struct pm_dev*); -extern unsigned int apic_timer_irqs [NR_CPUS]; extern int check_nmi_watchdog (void); extern unsigned int nmi_watchdog; diff -urNp ref/include/asm-i386/hardirq.h 2.4.20pre5aa1/include/asm-i386/hardirq.h --- ref/include/asm-i386/hardirq.h Tue Jul 16 23:56:42 2002 +++ 2.4.20pre5aa1/include/asm-i386/hardirq.h Fri Aug 30 01:38:43 2002 @@ -13,6 +13,9 @@ typedef struct { unsigned int __syscall_count; struct task_struct * __ksoftirqd_task; /* waitqueue is too large */ unsigned int __nmi_count; /* arch dependent */ +#if CONFIG_X86_LOCAL_APIC + unsigned int apic_timer_irqs; /* arch dependent */ +#endif } ____cacheline_aligned irq_cpustat_t; #include /* Standard mappings for irq_cpustat_t above */