Message ID | 1266592438-10772-1-git-send-email-anemo@mba.ocn.ne.jp |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
From: Atsushi Nemoto <anemo@mba.ocn.ne.jp> Date: Sat, 20 Feb 2010 00:13:58 +0900 > The netif_wake_queue() is called correctly (i.e. only on !txfull > condition) from txdone routine. So Unconditional call to the > netif_wake_queue() here is wrong. This might cause calling of > start_xmit routine on txfull state and trigger BUG_ON. > > This bug does not happen when NAPI disabled. After txdone there > must be at least one free tx slot. But with NAPI, this is not > true anymore and the BUG_ON can hits on heavy load. > > In this driver NAPI was enabled on 2.6.33-rc1 so this is > regression from 2.6.32 kernel. > > Reported-by: Ralf Roesch <ralf.roesch@rw-gmbh.de> > Signed-off-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp> Patch applied, thanks. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
From: Atsushi Nemoto <anemo@mba.ocn.ne.jp> Date: Sat, 20 Feb 2010 00:31:22 +0900 (JST) > On Sat, 20 Feb 2010 00:13:58 +0900, Atsushi Nemoto <anemo@mba.ocn.ne.jp> wrote: >> @@ -1437,7 +1437,6 @@ static int tc35815_do_interrupt(struct net_device *dev, u32 status, int limit) >> /* Transmit complete. */ >> lp->lstats.tx_ints++; >> tc35815_txdone(dev); >> - netif_wake_queue(dev); >> if (ret < 0) >> ret = 0; >> } > > BTY, it looks isa-skelton.c have same problem. ... > I suppose here is the far origin of the bug :) Please send a patch for this. Thank you. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/net/tc35815.c b/drivers/net/tc35815.c index 75a669d..d71c197 100644 --- a/drivers/net/tc35815.c +++ b/drivers/net/tc35815.c @@ -1437,7 +1437,6 @@ static int tc35815_do_interrupt(struct net_device *dev, u32 status, int limit) /* Transmit complete. */ lp->lstats.tx_ints++; tc35815_txdone(dev); - netif_wake_queue(dev); if (ret < 0) ret = 0; }
The netif_wake_queue() is called correctly (i.e. only on !txfull condition) from txdone routine. So Unconditional call to the netif_wake_queue() here is wrong. This might cause calling of start_xmit routine on txfull state and trigger BUG_ON. This bug does not happen when NAPI disabled. After txdone there must be at least one free tx slot. But with NAPI, this is not true anymore and the BUG_ON can hits on heavy load. In this driver NAPI was enabled on 2.6.33-rc1 so this is regression from 2.6.32 kernel. Reported-by: Ralf Roesch <ralf.roesch@rw-gmbh.de> Signed-off-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp> --- drivers/net/tc35815.c | 1 - 1 files changed, 0 insertions(+), 1 deletions(-)