[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#600286: linux-image-2.6.32-5-amd64: atl1c driver hangs after "NETDEV WATCHDOG: eth0 (atl1c): transmit queue 0 timed out"

On Fri, 2010-10-15 at 16:34 +0200, Niels Möller wrote:
> Package: linux-2.6
> Version: 2.6.32-23
> Severity: important
> *** Please type your report below this line ***
> My wired network interface stops working (not able to transmit any
> packets, I think, but it might be reception which is broken. Anyway,
> ping to hosts on the local network results in a No route to host error,
> which means that sending or receiving arp packets fail).
> It has hanged in this way twice today, each time after I did two things
> which might be related:
> 1. I sent some large packets (tcp over ipv4 over ethernet) of size up to
>    roughly 20000 bytes and at a rate close to the links capacity of
>    100Mbit/s. One such packet, displayed by tcpdump:
> 13:58:15.872214 00:26:9e:b3:2f:3b (oui Unknown) > 00:11:25:85:b0:1a (oui Unknown), ethertype IPv4 (0x0800), length 22790: > Flags [.], seq 1079380:1102104, ack 1, win 32, options [nop,nop,TS val 19304579 ecr 1030215], length 22724
>    I have no idea why the kernel sent such large packets. According to
>    ifconfig eth0, the MTU is 1500 bytes. Is it supposed to work like
>    that, or is this another bug?

This driver and hardware implement TCP Segmentation Offload (TSO), which
means the kernel can provide oversized pseudo-packets that are turned
into multiple packets on the wire.

I did notice a later bug fix to this driver which might possibly address
the bug you're seeing.  Please can you test the attached patch,
following the instructions at


Ben Hutchings
Once a job is fouled up, anything done to improve it makes it worse.
From: Jie Yang <jie.yang@atheros.com>
Date: Tue, 27 Oct 2009 22:31:19 -0700
Subject: [PATCH] atl1c: duplicate atl1c_get_tpd

commit 678b77e265f6d66f1e68f3d095841c44ba5ab112 upstream.

remove duplicate atl1c_get_tpd, it may cause hardware to send wrong packets.

Signed-off-by: Jie Yang <jie.yang@atheros.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
 drivers/net/atl1c/atl1c_main.c |    2 --
 1 files changed, 0 insertions(+), 2 deletions(-)

diff --git a/drivers/net/atl1c/atl1c_main.c b/drivers/net/atl1c/atl1c_main.c
index 1372e9a..3b8801a 100644
--- a/drivers/net/atl1c/atl1c_main.c
+++ b/drivers/net/atl1c/atl1c_main.c
@@ -1981,8 +1981,6 @@ static void atl1c_tx_map(struct atl1c_adapter *adapter,
 		else {
 			use_tpd = atl1c_get_tpd(adapter, type);
 			memcpy(use_tpd, tpd, sizeof(struct atl1c_tpd_desc));
-			use_tpd = atl1c_get_tpd(adapter, type);
-			memcpy(use_tpd, tpd, sizeof(struct atl1c_tpd_desc));
 		buffer_info = atl1c_get_tx_buffer(adapter, use_tpd);
 		buffer_info->length = buf_len - mapped_len;

Attachment: signature.asc
Description: This is a digitally signed message part

Reply to: