x86: move kstat_irqs from kstat to irq_desc

based on Eric's patch ...

together mold it with dyn_array for irq_desc, will allcate kstat_irqs for
nr_irq_desc alltogether if needed. -- at that point nr_cpus is known already.

v2: make sure system without generic_hardirqs works they don't have irq_desc
v3: fix merging
v4: [mingo@elte.hu] fix typo

[ mingo@elte.hu ] irq: build fix

fix:

 arch/x86/xen/spinlock.c: In function 'xen_spin_lock_slow':
 arch/x86/xen/spinlock.c:90: error: 'struct kernel_stat' has no member named 'irqs'

Signed-off-by: Yinghai Lu <yhlu.kernel@gmail.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
Yinghai Lu 2008-08-19 20:50:09 -07:00 committed by Ingo Molnar
parent 3060d6fe28
commit 7f95ec9e4c
11 changed files with 113 additions and 63 deletions

View file

@ -28,10 +28,8 @@ struct cpu_usage_stat {
struct kernel_stat {
struct cpu_usage_stat cpustat;
#ifdef CONFIG_HAVE_DYN_ARRAY
unsigned int *irqs;
#else
unsigned int irqs[NR_IRQS];
#ifndef CONFIG_GENERIC_HARDIRQS
unsigned int irqs[NR_IRQS];
#endif
};
@ -43,15 +41,25 @@ DECLARE_PER_CPU(struct kernel_stat, kstat);
extern unsigned long long nr_context_switches(void);
#ifndef CONFIG_GENERIC_HARDIRQS
static inline unsigned int kstat_irqs_cpu(unsigned int irq, int cpu)
{
return kstat_cpu(cpu).irqs[irq];
}
#else
extern unsigned int kstat_irqs_cpu(unsigned int irq, int cpu);
#endif
/*
* Number of interrupts per specific IRQ source, since bootup
*/
static inline int kstat_irqs(int irq)
static inline unsigned int kstat_irqs(unsigned int irq)
{
int cpu, sum = 0;
unsigned int sum = 0;
int cpu;
for_each_possible_cpu(cpu)
sum += kstat_cpu(cpu).irqs[irq];
sum += kstat_irqs_cpu(irq, cpu);
return sum;
}