linux/kernel/irq
Eric Dumazet 6c9ae009b2 irq: use per_cpu kstat_irqs
Use modern per_cpu API to increment {soft|hard}irq counters, and use
per_cpu allocation for (struct irq_desc)->kstats_irq instead of an array.

This gives better SMP/NUMA locality and saves few instructions per irq.

With small nr_cpuids values (8 for example), kstats_irq was a small array
(less than L1_CACHE_BYTES), potentially source of false sharing.

In the !CONFIG_SPARSE_IRQ case, remove the huge, NUMA/cache unfriendly
kstat_irqs_all[NR_IRQS][NR_CPUS] array.

Note: we still populate kstats_irq for all possible irqs in
early_irq_init().  We probably could use on-demand allocations.  (Code
included in alloc_descs()).  Problem is not all IRQS are used with a prior
alloc_descs() call.

kstat_irqs_this_cpu() is not used anymore, remove it.

Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Reviewed-by: Christoph Lameter <cl@linux.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: Tejun Heo <tj@kernel.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-01-13 17:32:31 -08:00
..
autoprobe.c genirq: Provide compat handling for chip->set_type() 2010-10-04 12:43:47 +02:00
chip.c genirq: Sanitize dynamic irq handling 2010-10-12 16:53:44 +02:00
devres.c devres/irq: Fix devm_irq_match comment 2010-02-11 16:01:02 +01:00
dummychip.c genirq: Fix CONFIG_GENIRQ_NO_DEPRECATED=y build 2010-10-12 21:59:55 +02:00
handle.c genirq: Distangle kernel/irq/handle.c 2010-10-12 16:39:05 +02:00
internals.h genirq: Remove the now unused sparse irq leftovers 2010-10-12 16:53:44 +02:00
irqdesc.c irq: use per_cpu kstat_irqs 2011-01-13 17:32:31 -08:00
Kconfig genirq: Remove the now unused sparse irq leftovers 2010-10-12 16:53:44 +02:00
Makefile genirq: Remove the now unused sparse irq leftovers 2010-10-12 16:53:44 +02:00
manage.c sched: Constify function scope static struct sched_param usage 2011-01-07 15:55:45 +01:00
migration.c genirq: Provide compat handling for chip->set_affinity() 2010-10-04 12:43:46 +02:00
pm.c genirq: Convert irq_desc.lock to raw_spinlock 2009-12-14 23:55:33 +01:00
proc.c genirq: Fix incorrect proc spurious output 2010-12-01 08:44:26 +01:00
resend.c genirq: Provide compat handling for chip->retrigger() 2010-10-04 12:43:50 +02:00
spurious.c genirq: Provide config option to disable deprecated code 2010-10-04 13:40:24 +02:00