No description
Find a file
Felix Fietkau 96eb3d883d cns3xxx: ethernet - resolve SMP issue
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
2014-02-27 23:02:37 +00:00
config config: lxc: enable KERNEL_POSIX_MQUEUE 2014-01-24 13:49:39 +00:00
docs docs: update remaining references to functions.sh 2012-12-20 15:29:33 +00:00
include build: allow packages to declare ABI versions to detect necessary package rebuilds 2014-02-23 17:32:04 +00:00
package ath5k: fix enabling 5/10 mhz channel bandwidth support 2014-02-27 21:36:28 +00:00
scripts scripts/kconfig.pl: Indicate which file we couldn't open 2014-01-19 17:27:04 +00:00
target cns3xxx: ethernet - resolve SMP issue 2014-02-27 23:02:37 +00:00
toolchain musl: move the dependency on BROKEN to the right config symbol 2014-02-26 12:13:02 +00:00
tools cmake: upgrade to 2.8.12.2 2014-02-16 21:51:10 +00:00
.gitattributes add .gitattributes to prevent the git autocrlf option from messing with CRLF/LF in files 2012-05-08 13:30:49 +00:00
.gitignore add git-src to .gitignore 2014-01-12 12:06:39 +00:00
BSDmakefile add missing copyright header 2007-02-26 01:05:09 +00:00
Config.in move menuconfig options into separate files 2013-11-22 14:30:40 +00:00
feeds.conf.default feeds: disable the x-wrt feed, it is unmaintained 2014-02-03 14:29:04 +00:00
LICENSE finally move buildroot-ng to trunk 2016-03-20 17:29:15 +01:00
Makefile build: it is no longer necessary to call make target/linux/clean as part of make clean 2012-12-02 15:26:28 +00:00
README build: BSD compile fixes 2013-03-07 17:32:29 +00:00
rules.mk FPU type should not interfere with the ABI selection. Also make sure we either do real soft-float or hard-float on ARM, with the right options. 2013-11-29 10:59:51 +00:00

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