summaryrefslogtreecommitdiffstats
path: root/unhandled-irqs-switch-to-polling.patch
diff options
context:
space:
mode:
authorJosh Boyer <jwboyer@redhat.com>2012-03-16 07:58:36 -0400
committerJosh Boyer <jwboyer@redhat.com>2012-03-16 11:07:58 -0400
commit6df15dd064669652e0d36826e18975af8ac28085 (patch)
tree4b6fe8476255fed9d995017742f4d0bfcc7533e6 /unhandled-irqs-switch-to-polling.patch
parent6875c9a8ca919812f98b385990e6d8af43490529 (diff)
downloadkernel-6df15dd064669652e0d36826e18975af8ac28085.tar.gz
kernel-6df15dd064669652e0d36826e18975af8ac28085.tar.xz
kernel-6df15dd064669652e0d36826e18975af8ac28085.zip
Fixup irqpoll patch to really not impact machines without ASM108x bridges (rhbz 800520)
WITH FEELING THIS TIME
Diffstat (limited to 'unhandled-irqs-switch-to-polling.patch')
-rw-r--r--unhandled-irqs-switch-to-polling.patch25
1 files changed, 21 insertions, 4 deletions
diff --git a/unhandled-irqs-switch-to-polling.patch b/unhandled-irqs-switch-to-polling.patch
index 39169ba96..2f25cda6f 100644
--- a/unhandled-irqs-switch-to-polling.patch
+++ b/unhandled-irqs-switch-to-polling.patch
@@ -174,17 +174,34 @@ Josh Boyer <jwboyer@redhat.com>
* functioning device sharing an IRQ with the failing one)
*/
static void
-@@ -302,19 +332,24 @@ void note_interrupt(unsigned int irq, st
+@@ -269,6 +299,8 @@ try_misrouted_irq(unsigned int irq, stru
+ void note_interrupt(unsigned int irq, struct irq_desc *desc,
+ irqreturn_t action_ret)
+ {
++ int unhandled_thresh = 999000;
++
+ if (desc->istate & IRQS_POLL_INPROGRESS)
+ return;
+
+@@ -302,19 +334,31 @@ void note_interrupt(unsigned int irq, st
}
desc->irq_count++;
- if (likely(desc->irq_count < 100000))
-+ if (likely(desc->irq_count < 10))
- return;
+- return;
++ if (!irq_poll_and_retry)
++ if (likely(desc->irq_count < 100000))
++ return;
++ else
++ if (likely(desc->irq_count < 10))
++ return;
desc->irq_count = 0;
- if (unlikely(desc->irqs_unhandled > 99900)) {
-+ if (unlikely(desc->irqs_unhandled >= 9)) {
++ if (irq_poll_and_retry)
++ unhandled_thresh = 9;
++
++ if (unlikely(desc->irqs_unhandled >= unhandled_thresh)) {
/*
- * The interrupt is stuck
+ * The interrupt might be stuck