lkml.org 
[lkml]   [2008]   [Jul]   [21]   [last100]   RSS Feed
Views: [more markup]  [less markup]  [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
DateSun, 20 Jul 2008 22:11:06 -0700 (PDT)
SubjectRe: [GIT]: Networking
FromDavid Miller <>
From: David Miller <davem@davemloft.net>
Date: Sun, 20 Jul 2008 19:48:56 -0700 (PDT)

> From: Alexey Dobriyan <adobriyan@gmail.com>
> Date: Mon, 21 Jul 2008 06:40:56 +0400
> 
> > OK, the problem is really this buglet:
> > 
> > 	BUG_ON(q == &noop_qdisc);
> > 	__netif_schedule
> > 	netif_tx_wake_queue
> > 	netif_wake_queue
> > 	atl1_check_link
> > 	atl1_up		or	atlx_link_chg_task
> > 				run_workqueue
> 
> Thanks for the backtrace I'll work on fixing this.

[ Jeff and co., this is basically the kind of patch I want
  to see eventually for the Intel drivers too... ]

Alexey, please try this patch:

atl1: Do not wake queue before queue has been started.

Based upon a bug report by Alexey Dobriyan.

Packet flow during link state events should not be done by
waking and stopping the TX queue anyways, that is handled
transparently by netif_carrier_{on,off}().
So, remove the netif_{wake,stop}_queue() calls in the link
check code, and add the necessary netif_start_queue() call
to atl1_up().
Signed-off-by: David S. Miller <davem@davemloft.net>

diff --git a/drivers/net/atlx/atl1.c b/drivers/net/atlx/atl1.c
index 3e22e78..f12e3d1 100644
--- a/drivers/net/atlx/atl1.c
+++ b/drivers/net/atlx/atl1.c
@@ -1308,7 +1308,6 @@ static u32 atl1_check_link(struct atl1_adapter *adapter)
 				dev_info(&adapter->pdev->dev, "link is down\n");
 			adapter->link_speed = SPEED_0;
 			netif_carrier_off(netdev);
-			netif_stop_queue(netdev);
 		}
 		return 0;
 	}
@@ -1358,7 +1357,6 @@ static u32 atl1_check_link(struct atl1_adapter *adapter)
 		if (!netif_carrier_ok(netdev)) {
 			/* Link down -> Up */
 			netif_carrier_on(netdev);
-			netif_wake_queue(netdev);
 		}
 		return 0;
 	}
@@ -2627,6 +2625,7 @@ static s32 atl1_up(struct atl1_adapter *adapter)
 	mod_timer(&adapter->watchdog_timer, jiffies);
 	atlx_irq_enable(adapter);
 	atl1_check_link(adapter);
+	netif_start_queue(netdev);
 	return 0;
 
 err_up:

\
 
 \ /
  Last update: 2008-07-21 07:13    [from the cache]
©2003-2008