openwrtv3/package/kernel
Alexander Couzens 17eb826a70 ltq-atm: rewrite tx path to use IRQs
The ATM subsystem is different from the generic ethernet NICs. The ATM
subsystem requires a callback when a packet has been sent. It means a
tx skb_buff need to be used after it has sent. While the generic NIC
can fill up the TX ring and free skb_buffs if it encounter a ring buffer slot
with an already sent skbuff.
The ATM drivers need call the pop() function after it has send a
single ATM package. The ATM subsystem controls via this ways the queuing.

The ppe engine use DMA channels for read and write. Every atm_vcc has it's
own TX DMA channel and each TX DMA channel has it's own ring buffer.

The old driver had multiple issues:
- Call the subsystem callback at the beginning of tx function (ppe_send).
  Didn't allowed the ATM subsystem to control the enqueued package
  amount.
- Filled up the TX ring until full and fail futher
- copy or decouple the skb from all other subsystem before giving it
  over to TX ring

The new tx path uses interupts.
- call the subsystem callback _after_ it was sent by hardware
- no need to copy our decouple the skb any more
- gives back control to the atm subsystem over the enqueued packages
- use an interupt for every sent atm package

Using interupts shouldn't be a problem because of the slow uplink bandwidth of
ADSL.
The speed _through_ the DSL router was always as high as it should
be, only traffic generated on the router itself were affected.

After changing to new tx path, the speed of iperf's run on the
router itself reached the same speed. The master/trunk wasn't as much
affected because of TCP optimisations (reboot-5022-gb2ea46fe236a).
The following results are taken on the remote server, which receives
the stream over the internet and the DSL line.

The sync moves between every sync a litte bit, but is so far stable
Latency / Interleave Delay:               Down: Fast (0.25 ms) / Up: Fast (0.50 ms)
Data Rate:                                Down: 13.287 Mb/s / Up: 1.151 Mb/s

reboot-5521-g9f8d28285d without patch
[ ID] Interval           Transfer     Bandwidth       Retr
[  5]   0.00-10.04  sec   947 KBytes   773 Kbits/sec    0             sender
[  5]   0.00-10.04  sec   928 KBytes   757 Kbits/sec                  receiver

reboot-5521-g9f8d28285d with patch
[  5]   0.00-10.06  sec  1.16 MBytes   970 Kbits/sec    0             sender
[  5]   0.00-10.06  sec  1.15 MBytes   959 Kbits/sec                  receiver

v17.01.4-239-g55c23e44f4 without patch
[ ID] Interval           Transfer     Bandwidth       Retr
[  5]   0.00-10.04  sec  87.4 KBytes  71.3 Kbits/sec    0             sender
[  5]   0.00-10.04  sec  59.6 KBytes  48.7 Kbits/sec                  receiver

v17.01.4-239-g55c23e44f4 with patch
[ ID] Interval           Transfer     Bandwidth       Retr
[  5]   0.00-10.05  sec  1.18 MBytes   983 Kbits/sec    1             sender
[  5]   0.00-10.05  sec  1.15 MBytes   959 Kbits/sec                  receiver

Signed-off-by: Alexander Couzens <lynxis@fe80.eu>
2018-02-05 16:36:26 +01:00
..
acx-mac80211 acx-mac80211: fix build on kernel 4.9 2017-11-22 08:21:53 +01:00
ar7-atm ar7-atm: fix function signatures with expected ones 2017-10-29 23:41:00 +01:00
ath10k-ct ath9k, ath10k(-ct): move spectral scan support under a separate config symbol 2018-01-13 19:54:45 +01:00
avila-wdt build: use KERNEL_MAKE_FLAGS for kernel file compilations 2017-10-29 16:17:05 +01:00
brcm2708-gpu-fw brcm2708-gpu-fw: update to latest version 2017-08-10 16:34:15 +02:00
broadcom-wl merge: ssid: update default ssid 2017-12-08 19:41:18 +01:00
button-hotplug build: use KERNEL_MAKE_FLAGS for kernel file compilations 2017-10-29 16:17:05 +01:00
dtc/patches package: kernel: dtc: Add DTO support 2017-11-06 16:39:41 +01:00
gpio-button-hotplug build: use KERNEL_MAKE_FLAGS for kernel file compilations 2017-10-29 16:17:05 +01:00
gpio-nct5104d build: use KERNEL_MAKE_FLAGS for kernel file compilations 2017-10-29 16:17:05 +01:00
hwmon-gsc build: use KERNEL_MAKE_FLAGS for kernel file compilations 2017-10-29 16:17:05 +01:00
i2c-gpio-custom build: use KERNEL_MAKE_FLAGS for kernel file compilations 2017-10-29 16:17:05 +01:00
kmod-sched-cake kmod-sched-cake: bump to latest cake bake 2018-01-11 20:36:16 +01:00
lantiq ltq-atm: rewrite tx path to use IRQs 2018-02-05 16:36:26 +01:00
leds-apu2 build: use KERNEL_MAKE_FLAGS for kernel file compilations 2017-10-29 16:17:05 +01:00
linux leds: correct ledtrig-heartbeat Kconfig description 2018-02-02 12:08:19 +01:00
mac80211 mac80211: replace revert for 11s compatiblity with upstream fix 2018-01-31 13:42:23 +01:00
mt76 mt76: update to the latest version 2018-02-05 10:31:44 +01:00
mwlwifi mwlwifi: update to version 10.3.4.0 / 2017-12-14 2017-12-31 18:46:13 +01:00
om-watchdog treewide: use the generic board_name function 2017-07-15 23:13:34 +02:00
rotary-gpio-custom build: use KERNEL_MAKE_FLAGS for kernel file compilations 2017-10-29 16:17:05 +01:00
rtc-rv5c386a build: use KERNEL_MAKE_FLAGS for kernel file compilations 2017-10-29 16:17:05 +01:00
spi-gpio-custom build: use KERNEL_MAKE_FLAGS for kernel file compilations 2017-10-29 16:17:05 +01:00
trelay build: add KERNEL_MAKE and KERNEL_MAKE_FLAGS variables and move to kernel.mk 2017-06-07 18:31:10 +02:00
w1-gpio-custom build: use KERNEL_MAKE_FLAGS for kernel file compilations 2017-10-29 16:17:05 +01:00
wrt55agv2-spidevs build: use KERNEL_MAKE_FLAGS for kernel file compilations 2017-10-29 16:17:05 +01:00