Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753513AbYAOFxd (ORCPT ); Tue, 15 Jan 2008 00:53:33 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1751781AbYAOFxW (ORCPT ); Tue, 15 Jan 2008 00:53:22 -0500 Received: from 74-93-104-97-Washington.hfc.comcastbusiness.net ([74.93.104.97]:33800 "EHLO sunset.davemloft.net" rhost-flags-OK-FAIL-OK-OK) by vger.kernel.org with ESMTP id S1751440AbYAOFxV (ORCPT ); Tue, 15 Jan 2008 00:53:21 -0500 Date: Mon, 14 Jan 2008 21:53:17 -0800 (PST) Message-Id: <20080114.215317.38045859.davem@davemloft.net> To: elendil@planet.nl Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [REGRESSION] 2.6.24-rc7: e1000: Detected Tx Unit Hang From: David Miller In-Reply-To: <200801150625.10823.elendil@planet.nl> References: <200801150625.10823.elendil@planet.nl> X-Mailer: Mew version 5.2 on Emacs 22.1 / Mule 5.0 (SAKAKI) Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1894 Lines: 49 From: Frans Pop Date: Tue, 15 Jan 2008 06:25:10 +0100 > kernel: e1000: eth0: e1000_clean_tx_irq: Detected Tx Unit Hang Does this make the problem go away? (Note this isn't the final correct patch we should apply. There is no reason why this revert back to the older ->poll() logic here should have any effect on the TX hang triggering...) diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c index 13d57b0..cada32c 100644 --- a/drivers/net/e1000/e1000_main.c +++ b/drivers/net/e1000/e1000_main.c @@ -3919,7 +3919,7 @@ e1000_clean(struct napi_struct *napi, int budget) { struct e1000_adapter *adapter = container_of(napi, struct e1000_adapter, napi); struct net_device *poll_dev = adapter->netdev; - int work_done = 0; + int tx_work = 0, work_done = 0; /* Must NOT use netdev_priv macro here. */ adapter = poll_dev->priv; @@ -3929,8 +3929,8 @@ e1000_clean(struct napi_struct *napi, int budget) * simultaneously. A failure obtaining the lock means * tx_ring[0] is currently being cleaned anyway. */ if (spin_trylock(&adapter->tx_queue_lock)) { - e1000_clean_tx_irq(adapter, - &adapter->tx_ring[0]); + tx_work = e1000_clean_tx_irq(adapter, + &adapter->tx_ring[0]); spin_unlock(&adapter->tx_queue_lock); } @@ -3938,7 +3938,7 @@ e1000_clean(struct napi_struct *napi, int budget) &work_done, budget); /* If budget not fully consumed, exit the polling mode */ - if (work_done < budget) { + if (!tx_work && (work_done < budget)) { if (likely(adapter->itr_setting & 3)) e1000_set_itr(adapter); netif_rx_complete(poll_dev, napi); -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/