OpenWRT branches i work with
96eb3d883d
The combination of r35942 and r35952 causes an issue where eth_schedule_poll() can be called from a different CPU between the call to napi_complete() and the setting of cur_index which can break the rx ring accounting and cause ethernet latency and/or ethernet stalls. The issue can be easilly created by adding a couple of artificial delays such as: @@ -715,6 +715,7 @@ static int eth_poll(struct napi_struct *napi, int budget) if (!received) { napi_complete(napi); +udelay(1000); enable_irq(IRQ_CNS3XXX_SW_R0RXC); } @@ -727,6 +728,7 @@ static int eth_poll(struct napi_struct *napi, int budget) rx_ring->cur_index = i; wmb(); +udelay(1000); enable_rx_dma(sw); return received; This patch moves the setting of cur_index back up where it needs to be and addresses the original corner case that r35942 was trying to catch in an improved fashion by checking to see if the rx descriptor ring has become full before interrupts were re-enabled so that a poll can be scheduled again and avoid an rx stall caused by rx interrupts ceasing to fire again. Signed-off-by: Tim Harvey <tharvey@gateworks.com> SVN-Revision: 39761 |
||
---|---|---|
config | ||
docs | ||
include | ||
package | ||
scripts | ||
target | ||
toolchain | ||
tools | ||
.gitattributes | ||
.gitignore | ||
BSDmakefile | ||
Config.in | ||
feeds.conf.default | ||
LICENSE | ||
Makefile | ||
README | ||
rules.mk |
This is the buildsystem for the OpenWrt Linux distribution. Please use "make menuconfig" to configure your appreciated configuration for the toolchain and firmware. You need to have installed gcc, binutils, bzip2, flex, python, perl make, find, grep, diff, unzip, gawk, getopt, libz-dev and libc headers. Run "./scripts/feeds update -a" to get all the latest package definitions defined in feeds.conf / feeds.conf.default respectively and "./scripts/feeds install -a" to install symlinks of all of them into package/feeds/. Use "make menuconfig" to configure your image. Simply running "make" will build your firmware. It will download all sources, build the cross-compile toolchain, the kernel and all choosen applications. You can use "scripts/flashing/flash.sh" for remotely updating your embedded system via tftp. The OpenWrt system is documented in docs/. You will need a LaTeX distribution and the tex4ht package to build the documentation. Type "make -C docs/" to build it. To build your own firmware you need to have access to a Linux, BSD or MacOSX system (case-sensitive filesystem required). Cygwin will not be supported because of the lack of case sensitiveness in the file system. Sunshine! Your OpenWrt Project http://openwrt.org