]> git.baikalelectronics.ru Git - kernel.git/commit
genirq: Mark polled irqs and defer the real handler
authorThomas Gleixner <tglx@linutronix.de>
Mon, 7 Feb 2011 09:34:30 +0000 (10:34 +0100)
committerThomas Gleixner <tglx@linutronix.de>
Sat, 19 Feb 2011 11:58:09 +0000 (12:58 +0100)
commitdad4f6637da6ca190452c0b5f90f2f84a6f79c8b
tree767d2cf011437a266a655ce2ec39360cb85f7f28
parent84f2d24a3c99e7ff11fd71785d054d7ee9481bab
genirq: Mark polled irqs and defer the real handler

With the chip.end() function gone we might run into a situation where
a poll call runs and the real interrupt comes in, sees IRQ_INPROGRESS
and disables the line. That might be a perfect working one, which will
then be masked forever.

So mark them polled while the poll runs. When the real handler sees
IRQ_INPROGRESS it checks the poll flag and waits for the polling to
complete. Add the necessary amount of sanity checks to it to avoid
deadlocks.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
include/linux/irq.h
kernel/irq/chip.c
kernel/irq/internals.h
kernel/irq/spurious.c