diff options
author | Zhang, Yanmin <yanmin.zhang@intel.com> | 2005-05-16 21:53:43 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-05-17 07:59:18 -0700 |
commit | 4f167fb491725ca0be9df0d76b4b2dd862cdfe0b (patch) | |
tree | a4b15758261a9680d7f57530502ade350d99b46f /kernel/irq/handle.c | |
parent | 7baeb6a5ccab2d472679a053e64a63ac423c3a42 (diff) | |
download | linux-4f167fb491725ca0be9df0d76b4b2dd862cdfe0b.tar.gz linux-4f167fb491725ca0be9df0d76b4b2dd862cdfe0b.tar.bz2 linux-4f167fb491725ca0be9df0d76b4b2dd862cdfe0b.zip |
[PATCH] spurious interrupt fix
On my IA64 machine, after kernel 2.6.12-rc3 boots, an edge-triggered
interrupt (IRQ 46) keeps triggered over and over again. There is no IRQ 46
interrupt action handler. It has lots of impact on performance.
Kernel 2.6.10 and its prior versions have no the problem. Basically,
kernel 2.6.10 will mask the spurious edge interrupt if the interrupt is
triggered for the second time and its status includes
IRQ_DISABLE|IRQ_PENDING.
Originally, IA64 kernel has its own specific _irq_desc definitions in file
arch/ia64/kernel/irq.c. The definition initiates _irq_desc[irq].status to
IRQ_DISABLE. Since kernel 2.6.11, it was moved to architecture independent
codes, i.e. kernel/irq/handle.c, but kernel/irq/handle.c initiates
_irq_desc[irq].status to 0 instead of IRQ_DISABLE.
Signed-off-by: Zhang Yanmin <yanmin.zhang@intel.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'kernel/irq/handle.c')
-rw-r--r-- | kernel/irq/handle.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/kernel/irq/handle.c b/kernel/irq/handle.c index 2fb0e46e11f3..06b5a6323998 100644 --- a/kernel/irq/handle.c +++ b/kernel/irq/handle.c @@ -30,6 +30,7 @@ */ irq_desc_t irq_desc[NR_IRQS] __cacheline_aligned = { [0 ... NR_IRQS-1] = { + .status = IRQ_DISABLED, .handler = &no_irq_type, .lock = SPIN_LOCK_UNLOCKED } |