Re: BQL support in gianfar causes network hickup
From: Eric Dumazet <hidden>
Date: 2012-11-24 23:43:48
Subsystem:
freescale etsec ethernet driver (gianfar), networking drivers, the rest · Maintainers:
Claudiu Manoil, Andrew Lunn, "David S. Miller", Eric Dumazet, Jakub Kicinski, Paolo Abeni, Linus Torvalds
On Sat, 2012-11-24 at 20:42 +0000, Tino Keitel wrote:
Paul Gortmaker <paul.gortmaker <at> windriver.com> writes:quoted
On 12-11-23 10:58 AM, Keitel, Tino (ALC NetworX GmbH) wrote:quoted
Hi, commit d8a0f1b0af67679bba886784de10d8c21acc4e0e causes the following trace on a Freescale RDB8313 board:Thanks for the report.quoted
NETDEV WATCHDOG: eth1 (fsl-gianfar): transmit queue 0 timed out ------------[ cut here ]------------ WARNING: at /home/keitelt1/src/git/linux-stable/net/sched/sch_generic.c:255 Modules linked in: NIP: c02448b0 LR: c02448b0 CTR: c01c19b8 REGS: c7ffbe40 TRAP: 0700 Not tainted (3.7.0-rc6-rt18)^^^^^^^^^^^^^^^ I almost overlooked the above. It would have been nice to see more explicit information on what kernel you are running. I say that because the above concerns me. For several reasons. 1) it looks to be not mainline, but preempt_rt 2) There is no RT on 3.7 yet, so I'm assuming this is a custom forward port of the 250 odd RT patches. (The RT is 3.6.7-rt18, i.e. based on the 3.6 gregKH stable tree.)Sorry for the confusion. This was a 3.7.0-rc6 tree, and I forgot git clean after trying the rt-patches and git reset --hard v3.7.0-rc6, so the localversion file for -rt was still present, and the kernel was named 3.7.0-rc6-rt18. If I got this right, this should be a normal kernel with just the version file modified. I tried kernel 3.3, which doesnt have the issue. I tried 3.4, 3.6.7 and 3.7-rc6, which all show the kernel trace and ptp client misbehaviour. I tried 3.4, 3.6.7, 3.7-rc6 and 3.6.5-rt18 with the patch I posted, and they were ok. The patch I posted is for 3.7-rc6.
Hmm, I wonder if BQL makes a particular bug showing more often. I see gianfar uses a very small watchdog_timeo of 1 second, while many drivers use 5 seconds. What happens if you change this to 5 seconds ?
diff --git a/drivers/net/ethernet/freescale/gianfar.c b/drivers/net/ethernet/freescale/gianfar.c
index 19ac096..3a994f9 100644
--- a/drivers/net/ethernet/freescale/gianfar.c
+++ b/drivers/net/ethernet/freescale/gianfar.c@@ -101,7 +101,7 @@ #include "gianfar.h" -#define TX_TIMEOUT (1*HZ) +#define TX_TIMEOUT (5*HZ) const char gfar_driver_version[] = "1.3";