[<prev] [next>] [day] [month] [year] [list]
Message-ID: <20070706155321.55edc032@freepuppy.rosehill.hemminger.net>
Date: Fri, 6 Jul 2007 15:53:21 -0700
From: Stephen Hemminger <shemminger@...ux-foundation.org>
To: Jeff Garzik <jgarzik@...ox.com>
Cc: netdev@...r.kernel.org
Subject: sky2: restore workarounds for lost interrupts
Sky2 will hang under load due to lost IRQ. It is reproducible fastest on
Yukon EC chips, but others may have same problem.
This patch restores a couple of workarounds from 2.6.16 that reduce
the likely hood of failure. It is not possible to prove this is sufficient
to stop hangs.
* restart transmit moderation timer in case it expires during IRQ routine
* default to having 10 HZ watchdog timer.
At this point it more important not to hang than to worry about the
power cost. If possible please put in 2.6.22.
Signed-off-by: Stephen Hemminger <shemminger@...ux-foundation.org>
--- a/drivers/net/sky2.c 2007-07-05 22:41:48.000000000 -0700
+++ b/drivers/net/sky2.c 2007-07-05 22:42:46.000000000 -0700
@@ -96,7 +96,7 @@ static int disable_msi = 0;
module_param(disable_msi, int, 0);
MODULE_PARM_DESC(disable_msi, "Disable Message Signaled Interrupt (MSI)");
-static int idle_timeout = 0;
+static int idle_timeout = 100;
module_param(idle_timeout, int, 0);
MODULE_PARM_DESC(idle_timeout, "Watchdog timer for lost interrupts (ms)");
@@ -2490,6 +2490,13 @@ static int sky2_poll(struct net_device *
work_done = sky2_status_intr(hw, work_limit);
if (work_done < work_limit) {
+ /* Bug/Errata workaround?
+ * Need to kick the TX irq moderation timer.
+ */
+ if (sky2_read8(hw, STAT_TX_TIMER_CTRL) == TIM_START) {
+ sky2_write8(hw, STAT_TX_TIMER_CTRL, TIM_STOP);
+ sky2_write8(hw, STAT_TX_TIMER_CTRL, TIM_START);
+ }
netif_rx_complete(dev0);
/* end of interrupt, re-enables also acts as I/O synchronization */
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists