diff options
author | Josh Boyer <jwboyer@redhat.com> | 2012-03-16 07:58:36 -0400 |
---|---|---|
committer | Josh Boyer <jwboyer@redhat.com> | 2012-03-16 11:07:58 -0400 |
commit | 6df15dd064669652e0d36826e18975af8ac28085 (patch) | |
tree | 4b6fe8476255fed9d995017742f4d0bfcc7533e6 | |
parent | 6875c9a8ca919812f98b385990e6d8af43490529 (diff) | |
download | kernel-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
-rw-r--r-- | kernel.spec | 5 | ||||
-rw-r--r-- | unhandled-irqs-switch-to-polling.patch | 25 |
2 files changed, 25 insertions, 5 deletions
diff --git a/kernel.spec b/kernel.spec index 2f37deabd..e3ae5f7c3 100644 --- a/kernel.spec +++ b/kernel.spec @@ -62,7 +62,7 @@ Summary: The Linux kernel # For non-released -rc kernels, this will be appended after the rcX and # gitX tags, so a 3 here would become part of release "0.rcX.gitX.3" # -%global baserelease 5 +%global baserelease 6 %global fedora_build %{baserelease} # base_sublevel is the kernel version we're starting with and patching @@ -2350,6 +2350,9 @@ fi # ||----w | # || || %changelog +* Fri Mar 16 2012 Josh Boyer <jwboyer@redhat.com> +- Fix irqpoll patch to really only apply for ASM108x machines (rhbz 800520) + * Thu Mar 15 2012 Justin M. Forbes <jforbes@redhat.com> - CVE-2012-1179 fix pmd_bad() triggering in code paths holding mmap_sem read mode (rhbz 803809) 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 |