[kernel] Fixup irqpoll patch to really not impact machines without ASM108x bridges (rhbz 800520)

Josh Boyer jwboyer at fedoraproject.org
Fri Mar 16 16:44:50 UTC 2012


commit 6df15dd064669652e0d36826e18975af8ac28085
Author: Josh Boyer <jwboyer at redhat.com>
Date:   Fri Mar 16 07:58:36 2012 -0400

    Fixup irqpoll patch to really not impact machines without ASM108x bridges (rhbz 800520)
    
    WITH FEELING THIS TIME

 kernel.spec                            |    5 ++++-
 unhandled-irqs-switch-to-polling.patch |   25 +++++++++++++++++++++----
 2 files changed, 25 insertions(+), 5 deletions(-)
---
diff --git a/kernel.spec b/kernel.spec
index 2f37dea..e3ae5f7 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 at redhat.com>
+- Fix irqpoll patch to really only apply for ASM108x machines (rhbz 800520)
+
 * Thu Mar 15 2012 Justin M. Forbes <jforbes at 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 39169ba..2f25cda 100644
--- a/unhandled-irqs-switch-to-polling.patch
+++ b/unhandled-irqs-switch-to-polling.patch
@@ -174,17 +174,34 @@ Josh Boyer <jwboyer at 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


More information about the scm-commits mailing list