Re: [PATCH 1/1] atl1c: fix issue of transmit queue 0 timed out
From: Ben Hutchings <hidden>
Date: 2012-06-26 20:23:54
Also in:
lkml
On Tue, 2012-06-26 at 12:33 -0300, Ren, Cloud wrote:
quoted hunk ↗ jump to hunk
From: xiong <redacted> some people report atl1c could cause system hang with following kernel trace info: --------------------------------------- WARNING: at.../net/sched/sch_generic.c:258 dev_watchdog+0x1db/0x1d0() ... NETDEV WATCHDOG: eth0 (atl1c): transmit queue 0 timed out ... --------------------------------------- This is caused by netif_stop_queue calling when cable Link is down but netif_wake_queue isn't called when cable Link is resume. Signed-off-by: xiong <redacted> Signed-off-by: Cloud Ren <redacted> --- drivers/net/ethernet/atheros/atl1c/atl1c_main.c | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-)diff --git a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c index 85717cb..c2736c4 100644 --- a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c +++ b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c@@ -351,6 +351,8 @@ static void atl1c_common_task(struct work_struct *work) atl1c_irq_disable(adapter); atl1c_check_link_status(adapter); atl1c_irq_enable(adapter); + if (netif_queue_stopped(netdev) && netif_carrier_ok(netdev)) + netif_wake_queue(netdev); } }
Why explicitly stop/start the queue when the link changes? That's what link_watch is for. Ben. -- Ben Hutchings, Staff Engineer, Solarflare Not speaking for my employer; that's the marketing department's job. They asked us to note that Solarflare product names are trademarked.