[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20070726091254.GA8063@elte.hu>
Date: Thu, 26 Jul 2007 11:12:54 +0200
From: Ingo Molnar <mingo@...e.hu>
To: Jarek Poplawski <jarkao2@...pl>
Cc: Thomas Gleixner <tglx@...utronix.de>,
Marcin ??lusarz <marcin.slusarz@...il.com>,
Linus Torvalds <torvalds@...ux-foundation.org>,
Jean-Baptiste Vignaud <vignaud@...dmail.fr>,
linux-kernel <linux-kernel@...r.kernel.org>,
shemminger <shemminger@...ux-foundation.org>,
linux-net <linux-net@...r.kernel.org>,
netdev <netdev@...r.kernel.org>,
Andrew Morton <akpm@...ux-foundation.org>,
Alan Cox <alan@...rguk.ukuu.org.uk>
Subject: Re: 2.6.20->2.6.21 - networking dies after random time
* Jarek Poplawski <jarkao2@...pl> wrote:
> On Thu, Jul 26, 2007 at 10:31:20AM +0200, Ingo Molnar wrote:
> ...
> > yeah. The patch below enables sw-resend on x86, to test the theory
> > whether the APIC-driven hardware-vector-resend code has some problem.
>
> I think Marcin is using x86_64 (Athlon 64) yet.
yeah - i meant to cover both arches but forgot about x86_64 - updated
patch attached below.
Ingo
----------------->
Subject: x86: activate HARDIRQS_SW_RESEND
From: Ingo Molnar <mingo@...e.hu>
activate the software-triggered IRQ-resend logic.
it appears some chipsets/cpus do not handle local-APIC driven IRQ
resends all that well, so always use the soft mechanism to trigger
the execution of pending interrupts.
Signed-off-by: Ingo Molnar <mingo@...e.hu>
---
arch/i386/Kconfig | 4 ++++
arch/x86_64/Kconfig | 4 ++++
kernel/irq/manage.c | 8 ++++++++
3 files changed, 16 insertions(+)
Index: linux-rt-rebase.q/arch/i386/Kconfig
===================================================================
--- linux-rt-rebase.q.orig/arch/i386/Kconfig
+++ linux-rt-rebase.q/arch/i386/Kconfig
@@ -1284,6 +1284,10 @@ config GENERIC_PENDING_IRQ
depends on GENERIC_HARDIRQS && SMP
default y
+config HARDIRQS_SW_RESEND
+ bool
+ default y
+
config X86_SMP
bool
depends on SMP && !X86_VOYAGER
Index: linux-rt-rebase.q/arch/x86_64/Kconfig
===================================================================
--- linux-rt-rebase.q.orig/arch/x86_64/Kconfig
+++ linux-rt-rebase.q/arch/x86_64/Kconfig
@@ -721,6 +721,10 @@ config GENERIC_PENDING_IRQ
depends on GENERIC_HARDIRQS && SMP
default y
+config HARDIRQS_SW_RESEND
+ bool
+ default y
+
menu "Power management options"
source kernel/power/Kconfig
Index: linux-rt-rebase.q/kernel/irq/manage.c
===================================================================
--- linux-rt-rebase.q.orig/kernel/irq/manage.c
+++ linux-rt-rebase.q/kernel/irq/manage.c
@@ -175,6 +175,14 @@ void enable_irq(unsigned int irq)
desc->depth--;
}
spin_unlock_irqrestore(&desc->lock, flags);
+#ifdef CONFIG_HARDIRQS_SW_RESEND
+ /*
+ * Do a bh disable/enable pair to trigger any pending
+ * irq resend logic:
+ */
+ local_bh_disable();
+ local_bh_enable();
+#endif
}
EXPORT_SYMBOL(enable_irq);
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists