Au1xxx ethernet race condition?

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

 



-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

While preforming network soak test on our au1550 based board, I noticed
lots of netdev timeout messages.

If I increased the ETH_TX_TIMEOUT to 5*HZ from HZ/4, I can see that traffic does stop until the watchdog barks.

However if I print out the TX DMA status at this stage all the buffers
are ready to use.

My theory as to why this occurs is that in au1000_tx there is a race condition.

If a tx_done interrupt for the last tx buffer occurs between reading buff_stat (line 1905, au1000_eth.c) and calling netif_stop_queue then
the queue won't get woken until the watchdog barks.

I inserted a local_irq_save() at line 1903 and a local_irq_restore()
at line 1915 and that seems to have fixed the problem. (Been running
for half an hour with no netdev timeouts).

I'm sure this is overkill. Can anyone else confirm?
a) they see the problem
b) that there is a better solution

As an aside, the network stack for the 2.6 kernel is pretty slow, as large 32k udp pckts don't use anywhere near the amount of cycles that 1.5k udp pckts do.
Suggests to me that it is the udp/ip path that is the bottleneck.


Just had a look at the mailing list and it looks like sylvain is
having a similar problem. Can you try this fix and see if it removes
your netdev tx timeouts sylvain?

thankx

- -- mailto:jaypee@xxxxxxxxxx
http://www.jaypee.org.uk
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (GNU/Linux)

iD8DBQFC+w3ZZDxnKy3oOpYRAsPKAKCe5R6qBsmMDyBY1w/MvoL1CvabvwCdEz9g
xFXbK05i7hD0PAYwotk2+u0=
=W7tS
-----END PGP SIGNATURE-----





[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux