Loading arch/x86/include/asm/hardirq_64.h +19 −5 Original line number Diff line number Diff line Loading @@ -3,22 +3,36 @@ #include <linux/threads.h> #include <linux/irq.h> #include <asm/pda.h> #include <asm/apic.h> typedef struct { unsigned int __softirq_pending; unsigned int __nmi_count; /* arch dependent */ unsigned int apic_timer_irqs; /* arch dependent */ unsigned int irq0_irqs; unsigned int irq_resched_count; unsigned int irq_call_count; unsigned int irq_tlb_count; unsigned int irq_thermal_count; unsigned int irq_spurious_count; unsigned int irq_threshold_count; } ____cacheline_aligned irq_cpustat_t; DECLARE_PER_CPU(irq_cpustat_t, irq_stat); /* We can have at most NR_VECTORS irqs routed to a cpu at a time */ #define MAX_HARDIRQS_PER_CPU NR_VECTORS #define __ARCH_IRQ_STAT 1 #define inc_irq_stat(member) add_pda(member, 1) #define inc_irq_stat(member) percpu_add(irq_stat.member, 1) #define local_softirq_pending() read_pda(__softirq_pending) #define local_softirq_pending() percpu_read(irq_stat.__softirq_pending) #define __ARCH_SET_SOFTIRQ_PENDING 1 #define set_softirq_pending(x) write_pda(__softirq_pending, (x)) #define or_softirq_pending(x) or_pda(__softirq_pending, (x)) #define set_softirq_pending(x) percpu_write(irq_stat.__softirq_pending, (x)) #define or_softirq_pending(x) percpu_or(irq_stat.__softirq_pending, (x)) extern void ack_bad_irq(unsigned int irq); Loading arch/x86/include/asm/pda.h +0 −10 Original line number Diff line number Diff line Loading @@ -25,19 +25,9 @@ struct x8664_pda { char *irqstackptr; short nodenumber; /* number of current node (32k max) */ short in_bootmem; /* pda lives in bootmem */ unsigned int __softirq_pending; unsigned int __nmi_count; /* number of NMI on this CPUs */ short mmu_state; short isidle; struct mm_struct *active_mm; unsigned apic_timer_irqs; unsigned irq0_irqs; unsigned irq_resched_count; unsigned irq_call_count; unsigned irq_tlb_count; unsigned irq_thermal_count; unsigned irq_threshold_count; unsigned irq_spurious_count; } ____cacheline_aligned_in_smp; DECLARE_PER_CPU(struct x8664_pda, __pda); Loading arch/x86/kernel/irq.c +1 −5 Original line number Diff line number Diff line Loading @@ -36,11 +36,7 @@ void ack_bad_irq(unsigned int irq) #endif } #ifdef CONFIG_X86_32 #define irq_stats(x) (&per_cpu(irq_stat, x)) #else # define irq_stats(x) cpu_pda(x) #endif /* * /proc/interrupts printing: */ Loading arch/x86/kernel/irq_64.c +3 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,9 @@ #include <asm/io_apic.h> #include <asm/idle.h> DEFINE_PER_CPU_SHARED_ALIGNED(irq_cpustat_t, irq_stat); EXPORT_PER_CPU_SYMBOL(irq_stat); /* * Probabilistic stack overflow check: * Loading arch/x86/kernel/nmi.c +1 −9 Original line number Diff line number Diff line Loading @@ -61,11 +61,7 @@ static int endflag __initdata; static inline unsigned int get_nmi_count(int cpu) { #ifdef CONFIG_X86_64 return cpu_pda(cpu)->__nmi_count; #else return nmi_count(cpu); #endif return per_cpu(irq_stat, cpu).__nmi_count; } static inline int mce_in_progress(void) Loading @@ -82,12 +78,8 @@ static inline int mce_in_progress(void) */ static inline unsigned int get_timer_irqs(int cpu) { #ifdef CONFIG_X86_64 return read_pda(apic_timer_irqs) + read_pda(irq0_irqs); #else return per_cpu(irq_stat, cpu).apic_timer_irqs + per_cpu(irq_stat, cpu).irq0_irqs; #endif } #ifdef CONFIG_SMP Loading Loading
arch/x86/include/asm/hardirq_64.h +19 −5 Original line number Diff line number Diff line Loading @@ -3,22 +3,36 @@ #include <linux/threads.h> #include <linux/irq.h> #include <asm/pda.h> #include <asm/apic.h> typedef struct { unsigned int __softirq_pending; unsigned int __nmi_count; /* arch dependent */ unsigned int apic_timer_irqs; /* arch dependent */ unsigned int irq0_irqs; unsigned int irq_resched_count; unsigned int irq_call_count; unsigned int irq_tlb_count; unsigned int irq_thermal_count; unsigned int irq_spurious_count; unsigned int irq_threshold_count; } ____cacheline_aligned irq_cpustat_t; DECLARE_PER_CPU(irq_cpustat_t, irq_stat); /* We can have at most NR_VECTORS irqs routed to a cpu at a time */ #define MAX_HARDIRQS_PER_CPU NR_VECTORS #define __ARCH_IRQ_STAT 1 #define inc_irq_stat(member) add_pda(member, 1) #define inc_irq_stat(member) percpu_add(irq_stat.member, 1) #define local_softirq_pending() read_pda(__softirq_pending) #define local_softirq_pending() percpu_read(irq_stat.__softirq_pending) #define __ARCH_SET_SOFTIRQ_PENDING 1 #define set_softirq_pending(x) write_pda(__softirq_pending, (x)) #define or_softirq_pending(x) or_pda(__softirq_pending, (x)) #define set_softirq_pending(x) percpu_write(irq_stat.__softirq_pending, (x)) #define or_softirq_pending(x) percpu_or(irq_stat.__softirq_pending, (x)) extern void ack_bad_irq(unsigned int irq); Loading
arch/x86/include/asm/pda.h +0 −10 Original line number Diff line number Diff line Loading @@ -25,19 +25,9 @@ struct x8664_pda { char *irqstackptr; short nodenumber; /* number of current node (32k max) */ short in_bootmem; /* pda lives in bootmem */ unsigned int __softirq_pending; unsigned int __nmi_count; /* number of NMI on this CPUs */ short mmu_state; short isidle; struct mm_struct *active_mm; unsigned apic_timer_irqs; unsigned irq0_irqs; unsigned irq_resched_count; unsigned irq_call_count; unsigned irq_tlb_count; unsigned irq_thermal_count; unsigned irq_threshold_count; unsigned irq_spurious_count; } ____cacheline_aligned_in_smp; DECLARE_PER_CPU(struct x8664_pda, __pda); Loading
arch/x86/kernel/irq.c +1 −5 Original line number Diff line number Diff line Loading @@ -36,11 +36,7 @@ void ack_bad_irq(unsigned int irq) #endif } #ifdef CONFIG_X86_32 #define irq_stats(x) (&per_cpu(irq_stat, x)) #else # define irq_stats(x) cpu_pda(x) #endif /* * /proc/interrupts printing: */ Loading
arch/x86/kernel/irq_64.c +3 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,9 @@ #include <asm/io_apic.h> #include <asm/idle.h> DEFINE_PER_CPU_SHARED_ALIGNED(irq_cpustat_t, irq_stat); EXPORT_PER_CPU_SYMBOL(irq_stat); /* * Probabilistic stack overflow check: * Loading
arch/x86/kernel/nmi.c +1 −9 Original line number Diff line number Diff line Loading @@ -61,11 +61,7 @@ static int endflag __initdata; static inline unsigned int get_nmi_count(int cpu) { #ifdef CONFIG_X86_64 return cpu_pda(cpu)->__nmi_count; #else return nmi_count(cpu); #endif return per_cpu(irq_stat, cpu).__nmi_count; } static inline int mce_in_progress(void) Loading @@ -82,12 +78,8 @@ static inline int mce_in_progress(void) */ static inline unsigned int get_timer_irqs(int cpu) { #ifdef CONFIG_X86_64 return read_pda(apic_timer_irqs) + read_pda(irq0_irqs); #else return per_cpu(irq_stat, cpu).apic_timer_irqs + per_cpu(irq_stat, cpu).irq0_irqs; #endif } #ifdef CONFIG_SMP Loading