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)
commitc8a01662123f194edfd4aa5bf35abd68c547e4f4
treef87af4dfeb4a4d30dd9538bbcef57d645f89af5e
parent47380a4388c18e700f45a03131020a0eabefdba0
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]