diff mbox

smsc911x: Fix Console Hang when bringing the interface down.

Message ID 1258028078-10933-1-git-send-email-srk@ti.com
State Accepted, archived
Delegated to: David Miller
Headers show

Commit Message

Sriram Nov. 12, 2009, 12:14 p.m. UTC
In the NAPI poll function, check for netif_running() is unnecassary.
In addition to associated runtime overhead, it also results in
continuous softirq loop when the interface is brought down under heavy
traffic(tested with Traffic Generator).Once the interface is disabled,
the poll function always returns zero(with the check for netif_running)
and napi_complete() would never get called resulting in softirq loop.

Signed-off-by: Sriramakrishnan <srk@ti.com>
---
Fix has been validated on OMAP3EVM. Similar issue found with TI Davinci
EMAC driver for which a patch has been posted to this list.


 drivers/net/smsc911x.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

Comments

David Miller Nov. 16, 2009, 6:18 a.m. UTC | #1
From: Sriramakrishnan <srk@ti.com>
Date: Thu, 12 Nov 2009 17:44:38 +0530

> In the NAPI poll function, check for netif_running() is unnecassary.
> In addition to associated runtime overhead, it also results in
> continuous softirq loop when the interface is brought down under heavy
> traffic(tested with Traffic Generator).Once the interface is disabled,
> the poll function always returns zero(with the check for netif_running)
> and napi_complete() would never get called resulting in softirq loop.
> 
> Signed-off-by: Sriramakrishnan <srk@ti.com>

Applied to net-2.6
--
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 mbox

Patch

diff --git a/drivers/net/smsc911x.c b/drivers/net/smsc911x.c
index ccdd196..f9cdcbc 100644
--- a/drivers/net/smsc911x.c
+++ b/drivers/net/smsc911x.c
@@ -986,7 +986,7 @@  static int smsc911x_poll(struct napi_struct *napi, int budget)
 	struct net_device *dev = pdata->dev;
 	int npackets = 0;
 
-	while (likely(netif_running(dev)) && (npackets < budget)) {
+	while (npackets < budget) {
 		unsigned int pktlength;
 		unsigned int pktwords;
 		struct sk_buff *skb;