Fix hard reset of alix/soekris hardware under heavy NIC load
authorJo-Philipp Wich <jow@openwrt.org>
Thu, 9 Aug 2012 09:41:22 +0000 (09:41 +0000)
committerJo-Philipp Wich <jow@openwrt.org>
Thu, 9 Aug 2012 09:41:22 +0000 (09:41 +0000)
commit02022ba366be4c4cf52eaec3804afd22d7e965bb
tree88346759e647e8a73d1d48b568f21b458cdcc340
parentde9e6bce12af37650a86ae342804a44f5ec6a584
Fix hard reset of alix/soekris hardware under heavy NIC load

The following patch corrects a hard reset that occurs on alix and
soekris net5501 hardware. Specifically, this is an issue with the via
rhine NIC driver. Under periods of extreme load, the via rhine driver
can cause a reset of the entire system. When this happens no output is
seen on the console, the device simply reboots. This was reported in the
following ticket:

Consistent crash on Soekris NET5501
https://dev.openwrt.org/ticket/11882

I was able to reproduce the problem locally with numerous alix 2d13
platforms. Under heavy 64 byte frame size load from a Smartbits traffic
generator, the alix hardware will hard reset in under 5 minutes. The
same hardware, under the same load, on FreeBSD 9.0 does not reset.

The patch below backports most of the via rhine changes from kernel 3.5.
With OpenWrt trunk being on kernel 3.3.8, it seemed prudent to bring
these changes in to avoid this serious issue.

I've tested this heavily in my test environment and was able to keep the
device stable under load for extended periods of time without any resets.

Also, a nice side effect of this change is that it significantly raises
the performance the platform. Without this patch the alix 2d13 can move
approximately 29,000 packets per second at 64 byte frame sizes. After
this patch the alix can move 52,000 packets per second at 64 byte frame
sizes.

I put this patch under the x86 patches as those are the only platforms
with via rhine hardware that I'm aware of. If it needs to go some place
else please let me know.

Thanks,
Adam

Signed-off-by: Adam Gensler <openwrt@kristenandadam.net>
SVN-Revision: 33072
target/linux/x86/patches-3.3/003-via-rhine-crash-fix.patch [new file with mode: 0644]