aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/linux/interrupt.h4
-rw-r--r--kernel/irq/handle.c2
-rw-r--r--kernel/irq/spurious.c4
3 files changed, 9 insertions, 1 deletions
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
index 80e63d8e9b15..f7b01b9a35b3 100644
--- a/include/linux/interrupt.h
+++ b/include/linux/interrupt.h
@@ -44,6 +44,9 @@
44 * IRQF_TIMER - Flag to mark this interrupt as timer interrupt 44 * IRQF_TIMER - Flag to mark this interrupt as timer interrupt
45 * IRQF_PERCPU - Interrupt is per cpu 45 * IRQF_PERCPU - Interrupt is per cpu
46 * IRQF_NOBALANCING - Flag to exclude this interrupt from irq balancing 46 * IRQF_NOBALANCING - Flag to exclude this interrupt from irq balancing
47 * IRQF_IRQPOLL - Interrupt is used for polling (only the interrupt that is
48 * registered first in an shared interrupt is considered for
49 * performance reasons)
47 */ 50 */
48#define IRQF_DISABLED 0x00000020 51#define IRQF_DISABLED 0x00000020
49#define IRQF_SAMPLE_RANDOM 0x00000040 52#define IRQF_SAMPLE_RANDOM 0x00000040
@@ -52,6 +55,7 @@
52#define IRQF_TIMER 0x00000200 55#define IRQF_TIMER 0x00000200
53#define IRQF_PERCPU 0x00000400 56#define IRQF_PERCPU 0x00000400
54#define IRQF_NOBALANCING 0x00000800 57#define IRQF_NOBALANCING 0x00000800
58#define IRQF_IRQPOLL 0x00001000
55 59
56/* 60/*
57 * Migration helpers. Scheduled for removal in 9/2007 61 * Migration helpers. Scheduled for removal in 9/2007
diff --git a/kernel/irq/handle.c b/kernel/irq/handle.c
index 515ad40bde15..32e1ab1477d1 100644
--- a/kernel/irq/handle.c
+++ b/kernel/irq/handle.c
@@ -180,6 +180,8 @@ fastcall unsigned int __do_IRQ(unsigned int irq)
180 if (desc->chip->ack) 180 if (desc->chip->ack)
181 desc->chip->ack(irq); 181 desc->chip->ack(irq);
182 action_ret = handle_IRQ_event(irq, desc->action); 182 action_ret = handle_IRQ_event(irq, desc->action);
183 if (!noirqdebug)
184 note_interrupt(irq, desc, action_ret);
183 desc->chip->end(irq); 185 desc->chip->end(irq);
184 return 1; 186 return 1;
185 } 187 }
diff --git a/kernel/irq/spurious.c b/kernel/irq/spurious.c
index 9d8c79b48823..b0d81aae472f 100644
--- a/kernel/irq/spurious.c
+++ b/kernel/irq/spurious.c
@@ -146,7 +146,9 @@ void note_interrupt(unsigned int irq, struct irq_desc *desc,
146 146
147 if (unlikely(irqfixup)) { 147 if (unlikely(irqfixup)) {
148 /* Don't punish working computers */ 148 /* Don't punish working computers */
149 if ((irqfixup == 2 && irq == 0) || action_ret == IRQ_NONE) { 149 if ((irqfixup == 2 && ((irq == 0) ||
150 (desc->action->flags & IRQF_IRQPOLL))) ||
151 action_ret == IRQ_NONE) {
150 int ok = misrouted_irq(irq); 152 int ok = misrouted_irq(irq);
151 if (action_ret == IRQ_NONE) 153 if (action_ret == IRQ_NONE)
152 desc->irqs_unhandled -= ok; 154 desc->irqs_unhandled -= ok;