genirq: Prevent spurious detection for unconditionally polled interrupts
authorThomas Gleixner <tglx@linutronix.de>
Wed, 6 Nov 2013 11:30:07 +0000 (12:30 +0100)
committerThomas Gleixner <tglx@linutronix.de>
Wed, 13 Nov 2013 15:03:02 +0000 (16:03 +0100)
commitb39898cd4077f4b6ec706e717c938751c34e1dc4
treeff5abed20e1f0199124d83844e714a3eff2b895b
parent9b66bfb28049594fe2bb2b91607ba302f511ce8b
genirq: Prevent spurious detection for unconditionally polled interrupts

On a 68k platform a couple of interrupts are demultiplexed and
"polled" from a top level interrupt. Unfortunately there is no way to
determine which of the sub interrupts raised the top level interrupt,
so all of the demultiplexed interrupt handlers need to be
invoked. Given a high enough frequency this can trigger the spurious
interrupt detection mechanism, if one of the demultiplex interrupts
returns IRQ_NONE continuously. But this is a false positive as the
polling causes this behaviour and not buggy hardware/software.

Introduce IRQ_POLLED which can be set at interrupt chip setup time via
irq_set_status_flags(). The flag excludes the interrupt from the
spurious detector and from all core polling activities.

Reported-and-tested-by: Michael Schmitz <schmitzmic@gmail.com>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: linux-m68k@vger.kernel.org
Link: http://lkml.kernel.org/r/alpine.DEB.2.02.1311061149250.23353@ionos.tec.linutronix.de
include/linux/irq.h
kernel/irq/settings.h
kernel/irq/spurious.c