Re: [PATCH 1/1] atl1c: fix issue of transmit queue 0 timed out

From: Ben Hutchings
Date: Tue Jun 26 2012 - 16:23:48 EST


On Tue, 2012-06-26 at 12:33 -0300, Ren, Cloud wrote:
> From: xiong <xiong@xxxxxxxxxxxxxxxx>
>
> 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 <xiong@xxxxxxxxxxxxxxxx>
> Signed-off-by: Cloud Ren <cjren@xxxxxxxxxxxxxxxx>
> ---
> 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.

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/