kernel_optimize_test/kernel/irq
Thomas Gleixner b5faba21a6 genirq: Prepare the handling of shared oneshot interrupts
For level type interrupts we need to track how many threads are on
flight to avoid useless interrupt storms when not all thread handlers
have finished yet. Keep track of the woken threads and only unmask
when there are no more threads in flight.

Yes, I'm lazy and using a bitfield. But not only because I'm lazy, the
main reason is that it's way simpler than using a refcount. A refcount
based solution would need to keep track of various things like
crashing the irq thread, spurious interrupts coming in,
disables/enables, free_irq() and some more. The bitfield keeps the
tracking simple and makes things just work. It's also nicely confined
to the thread code pathes and does not require additional checks all
over the place.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Peter Zijlstra <peterz@infradead.org>
LKML-Reference: <20110223234956.388095876@linutronix.de>
2011-02-25 20:24:21 +01:00
..
autoprobe.c genirq: Remove real old transition functions 2011-02-19 12:58:23 +01:00
chip.c genirq: Fix misplaced status update in irq_disable() 2011-02-21 21:19:59 +01:00
compat.h genirq: Move IRQ_AFFINITY_SET to core 2011-02-19 12:58:20 +01:00
debug.h genirq: Move debug code to separate header 2011-02-19 12:58:19 +01: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: Prepare the handling of shared oneshot interrupts 2011-02-25 20:24:21 +01:00
internals.h genirq: Implement irq_get/put_desc_[bus]locked/unlock() 2011-02-19 12:58:23 +01:00
irqdesc.c genirq: Use IRQ_BITMAP_BITS as search size in irq_alloc_descs() 2011-02-21 21:20:00 +01:00
Kconfig genirq: Streamline kernel/irq/Kconfig 2011-02-22 22:33:10 +01:00
Makefile genirq: Remove the now unused sparse irq leftovers 2010-10-12 16:53:44 +02:00
manage.c genirq: Prepare the handling of shared oneshot interrupts 2011-02-25 20:24:21 +01:00
migration.c genirq: Implement irq_data based move_*_irq() versions 2011-02-19 12:58:25 +01:00
pm.c genirq: Move wakeup state to irq_data 2011-02-19 12:58:22 +01:00
proc.c genirq: Reuse existing can set affinty check 2011-02-19 12:58:20 +01:00
resend.c genirq: Mirror irq trigger type bits in irq_data.state 2011-02-19 12:58:20 +01:00
settings.h genirq: Remove desc->status when GENERIC_HARDIRQS_NO_COMPAT=y 2011-02-19 12:58:22 +01:00
spurious.c genirq: Wrap the remaning IRQ_* flags 2011-02-19 12:58:21 +01:00