diff -urNp 2.4.19pre9ac2/arch/i386/kernel/apic.c 2.4.19pre9ac3/arch/i386/kernel/apic.c --- 2.4.19pre9ac2/arch/i386/kernel/apic.c Wed May 29 02:12:17 2002 +++ 2.4.19pre9ac3/arch/i386/kernel/apic.c Fri May 31 02:10:01 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 2.4.19pre9ac2/arch/i386/kernel/irq.c 2.4.19pre9ac3/arch/i386/kernel/irq.c --- 2.4.19pre9ac2/arch/i386/kernel/irq.c Tue Jan 22 18:55:15 2002 +++ 2.4.19pre9ac3/arch/i386/kernel/irq.c Fri May 31 02:10:02 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 diff -urNp 2.4.19pre9ac2/arch/i386/kernel/nmi.c 2.4.19pre9ac3/arch/i386/kernel/nmi.c --- 2.4.19pre9ac2/arch/i386/kernel/nmi.c Wed May 29 02:12:17 2002 +++ 2.4.19pre9ac3/arch/i386/kernel/nmi.c Fri May 31 02:10:02 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 2.4.19pre9ac2/arch/ia64/kernel/irq.c 2.4.19pre9ac3/arch/ia64/kernel/irq.c --- 2.4.19pre9ac2/arch/ia64/kernel/irq.c Wed May 29 02:12:18 2002 +++ 2.4.19pre9ac3/arch/ia64/kernel/irq.c Fri May 31 02:10:02 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 2.4.19pre9ac2/include/asm-i386/apic.h 2.4.19pre9ac3/include/asm-i386/apic.h --- 2.4.19pre9ac2/include/asm-i386/apic.h Thu May 30 02:15:30 2002 +++ 2.4.19pre9ac3/include/asm-i386/apic.h Fri May 31 02:10:08 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 2.4.19pre9ac2/include/asm-i386/hardirq.h 2.4.19pre9ac3/include/asm-i386/hardirq.h --- 2.4.19pre9ac2/include/asm-i386/hardirq.h Fri May 3 20:23:55 2002 +++ 2.4.19pre9ac3/include/asm-i386/hardirq.h Fri May 31 02:10:08 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 */ diff -urNp 2.4.19pre9ac2/kernel/softirq.c 2.4.19pre9ac3/kernel/softirq.c --- 2.4.19pre9ac2/kernel/softirq.c Thu May 30 18:07:50 2002 +++ 2.4.19pre9ac3/kernel/softirq.c Fri May 31 02:10:09 2002 @@ -40,7 +40,7 @@ - Bottom halves: globally serialized, grr... */ -irq_cpustat_t irq_stat[NR_CPUS]; +irq_cpustat_t irq_stat[NR_CPUS] ____cacheline_aligned; static struct softirq_action softirq_vec[32] __cacheline_aligned;