How can we make the lantiq xrx200 devices faster

Are you using irqbalance ?

Yes that would be right. I put all of your patches in the 4.14-patches folder.

Its maybe a bit offtopic, but someone know how stable it is now on vdsl2 and what performance am i expecting if im building my own modem only (or bridge mode) image? Last time i tryed a year ago with my 3370 it was kind of disappointing. I was not able to keep the vdsl2 line synced more than a few minutes to hours with the proprietary vr9 driver. And the performance on the vdsl2 line wasnt that great either.

Any suggestions are welcome :slight_smile:

Well this is pretty much off topic but it actually depends on your line. If your line is in bad condition it may not work as you expect it to so if you experience any problems I'd suggest to use a separate modem in bridge mode.

I tested the working patch created from files from post #1 + 904 and 905 on O2-Box 6431.
This box have only 4 100Mbit/s ports + 1 100Mbit/s port behind the gray DSL-port.

The result like the same:
I have to devices on it and do a speedtest:
They starts fast and them the connecting breaks down, after a while the connection come up.
It works if you do not use too much data.

root@OpenWrt:~# cat /proc/interrupts
           CPU0       CPU1       
  0:       6126      29766      MIPS   0  IPI_resched
  1:       2135       1633      MIPS   1  IPI_call
  7:     915250     923515      MIPS   7  timer
  8:          0          0      MIPS   0  IPI call
  9:          0          0      MIPS   1  IPI resched
 62:          0          0       icu  62  1e101000.usb, dwc2_hsotg:usb1
 63:     183466          0       icu  63  mei_cpe
 72:          0      23343       icu  72  vrx200_rx
 73:          0      35973       icu  73  vrx200_tx
 96:      60424          0       icu  96  ptm_mailbox_isr
112:          0        263       icu 112  asc_tx
113:          0          0       icu 113  asc_rx
114:          0          0       icu 114  asc_err
126:          0          0       icu 126  gptu
127:          0          0       icu 127  gptu
128:          0          0       icu 128  gptu
129:          0          0       icu 129  gptu
130:          0          0       icu 130  gptu
131:          0          0       icu 131  gptu
ERR:          0

(Hmm, no vrx200_tx_2 inside /proc/interrupts)

dmesg

@ahmar16 with regard to fastpath: It called "PPE" (Protokoll Processor Engine)
read post #4
In my hope it is possible to create an kernelmodule from an stockfw source and use them.
But I didn't worry about it anymore.

So, I use a by jomehub 5a on a Telekom vdsl2 50/10, Line resold by Telefonica/O2. I routinely see sync-uptime in multiple months (basically no unenforced resyncs). This is as bridged-modem only, as the box was overtaxed with adding NAT, traffic shaping and wifi processing on top of the vdsl-modem duty....
One caveat is that my line is still not using vectoring, so I have no information about stability in that increasingly likely scenario....

 	                Upstream    Downstream
Current Rate (Kbps)	2239        24125
Max Rate (Kbps)  	39997	    58892
SNR Margin (dB) 	26.6	    20
Line Attenuation (dB)	17.3	    15.1
Errors (Pkts)	        0	    215

(I hope the formating is OK) ... the log from TD-W9980B(DE), stock firmware. Stability is fine, connection (22/2 Mbps) works all the day. I used openwrt firmware for about a day and it seems to be stable (I was testing different firmwares and some very very unstable, but the one directly from openwrt was OK).

Hmm irqbalance should (in theory) use the most optimal distribution. BTW even if the distribution is 1:1 it doesn't mean the load will be 1:1 too. RX interrupt have much different load than TX interrupt (at least in ethernet).

Yeah "ring is full" and "tx timeout", I'm working on it right now (most lags are already fixed). It seems SoC/kernel is too slow to actually deallocate transmitted DMA descriptors, so new packets must wait on it and they will timeout. It would be interesting to try increase system tick speed (openwrt is using 250 Hz, which is IMO pretty low for 1Gbit ethernet). BTW the ring full infos are just informative, you can decrease the event if you put RX and TX interrupt on differet core.

[ 2780.742945] lantiq,xrx200-net 1e108000.eth eth0: port 5 got link
[ 2782.790849] lantiq,xrx200-net 1e108000.eth eth0: port 5 lost link
This is weird, I didn't change the parts of the driver which control link. That must be something else.

It wasn't used on my modem at all. In a discussion on the mailing list, there are plans to use it in the future (it is reserved for direct DSL pipe right now, but it could be potentially used for 2 TX queues for 2 VPEs).

Sadly the open source dsl firmware was not vdsl2 capable last time i checked.

Thank you all for the answers, i will not polute this thread anymore and will probably start soon my own one.

The firmware or the driver? I think the driver is opensourced, but the firmware is proprietary blob. Anyway the openwrt setup (just tested):

# /etc/init.d/dsl_control status 
ATU-C Vendor ID:                          Broadcom 177.166
ATU-C System Vendor ID:                   00,00,00,00,00,00,00,00
Chipset:                                  Lantiq-VRX200
Firmware Version:                         5.8.1.8.1.6
API Version:                              4.17.18.6
XTSE Capabilities:                        0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2
Annex:                                    B
Line Mode:                                G.993.2 (VDSL2)
Profile:                                  17a
Line State:                               UP [0x801: showtime_tc_sync]
Forward Error Correction Seconds (FECS):  Near: 0 / Far: 14526
Errored seconds (ES):                     Near: 0 / Far: 36
Severely Errored Seconds (SES):           Near: 0 / Far: 2
Loss of Signal Seconds (LOSS):            Near: 0 / Far: 2
Unavailable Seconds (UAS):                Near: 1475 / Far: 1475
Header Error Code Errors (HEC):           Near: 0 / Far: 0
Non Pre-emtive CRC errors (CRC_P):        Near: 0 / Far: 0
Pre-emtive CRC errors (CRCP_P):           Near: 0 / Far: 0
Power Management Mode:                    L0 - Synchronized
Latency [Interleave Delay]:               0.17 ms [Fast]   0.0 ms [Fast]
Data Rate:                                Down: 23.879 Mb/s / Up: 2.217 Mb/s
Line Attenuation (LATN):                  Down: 15.9 dB / Up: 17.1 dB
Signal Attenuation (SATN):                Down: 15.9 dB / Up: 18.0 dB
Noise Margin (SNR):                       Down: 21.1 dB / Up: 24.6 dB
Aggregate Transmit Power (ACTATP):        Down: -4.7 dB / Up: 12.4 dB
Max. Attainable Data Rate (ATTNDR):       Down: 63.347 Mb/s / Up: 43.498 Mb/s
Line Uptime Seconds:                      476
Line Uptime:                              7m 56s

Works great. G.993.2 is VDSL2 . "17a" is up to 100Mbps download.

OT: I just didn't get why is there "broadcom" vendor ID.

ATU-C is the DSL modem on the other end of the link. It is part of the linecard in the DSLAM.

2 Likes

Hi there i build again on o2-box 6431 without irq-balancing-patch
now it works:

all fine in dmesg

root@OpenWrt:~# cat /proc/interrupts
           CPU0       CPU1       
  7:     921523     940518      MIPS   7  timer
  8:       3129     132578      MIPS   0  IPI call
  9:      81845      93672      MIPS   1  IPI resched
 63:     119624          0       icu  63  mei_cpe
 72:     218128          0       icu  72  vrx200_rx
 73:     190977          0       icu  73  vrx200_tx
 96:     279248          0       icu  96  ptm_mailbox_isr
112:        156          0       icu 112  asc_tx
113:          0          0       icu 113  asc_rx
114:          0          0       icu 114  asc_err
126:          0          0       icu 126  gptu
127:          0          0       icu 127  gptu
128:          0          0       icu 128  gptu
129:          0          0       icu 129  gptu
130:          0          0       icu 130  gptu
131:          0          0       icu 131  gptu
ERR:          0

I can not really test the vdsl2 speed because my line have a datarate of 95Mbit/s and my Laptop and the Router have only 100Mbit/s connectors
I reached 89-90Mbit/s, but i remember i get this speed in past too (without patch)
But here are the testresult: http://www.dslreports.com/speedtest/45957706

Then i try your testscript:

But i have not really understand what will be tested or better does at make sense to test with the same device ?

So i will do an rebuild with patch 904 + 905 + only one core but vmmc support

Well but it is complex too make an build for Easybox 904x and the NAND-flash do not like to overide too much.
Additional the target should be on normal condition.
But i will do it when i have a littlebit time.

Yes i have an second device on it and i have disconnect it.

You need to run iperf3 -s on modem and my script on a normal computer (and change the IP in the script to the one of your modem). iperf3 -c (client) will connect to iperf3 -s (server) and measure the traffic between modem and host computer.

It should be possible to just run the kernel and rootfs image from the bootloader (uboot, over tftp) or install rootfs on usb stick (I'm using rootfs over NFS).

The fixed version, should be stable as the original driver. The required patches:
0904-backport-vanilla-eth-driver.patch
0905-increase-dma-descriptors.patch
0906-increase-dma-burst-size.patch
and logs:
vanilla
all changes (SMP ICU too)
/proc/interrupts

There are some changes: The ring buffer has twice size, there is a hack in tx housekeeping task (cleaning sucessfully transmitted packets) and there are no debug asserts (so it should run as fast as possible). The bigger ring buffer decreases the frequency of "full ring buffer" event, but the main problem is the housekeeping task cannot keep up with cleaning (hence the hack for cleaning more than budgeted packets). The TX DMA interrupts were changed from an end-of-descriptor to end-of-packet.

P.S. One last speedup which I can think of is using dual queue, one for each VPE, it would be useful only when 2+ streams are used. But the speed should be higher.

BTW the xrx200 network speed on localhost is only up to 500Mbit/s.

I have an issue while building:

Applying /home/ahmar/src/openwrt/target/linux/lantiq/patches-4.14/0904-backport-vanilla-eth-driver.patch using plaintext:
patching file drivers/net/ethernet/lantiq_xrx200.c
patch: **** malformed patch at line 904: int i;

Patch failed!  Please fix /home/ahmar/src/openwrt/target/linux/lantiq/patches-4.14/0904-backport-vanilla-eth-driver.patch!

Edit: I added a + in front of it and it seemed to not create any build errors but I would like to confirm if this is the intended solution.

Edit2: I built and flashed with the change I made and it's working now. No more tx errors so far. I haven't fully tested ATM but will be doing it later.

Do you mean to say that if someone were to use more than one connection, they could get more speed from LAN? I mean download managers mostly try to use 8 to 16 connections per download.

Where does this bottleneck seem to be? LAN-LAN or LAN-WAN?

Edit3:
There seems to be a bug, possibly because I changed something maybe?

Log
# This is from my Laptop
iperf3 -c 192.168.1.254 -t 60 -i 1 -R
Connecting to host 192.168.1.254, port 5201
Reverse mode, remote host 192.168.1.254 is sending
[  4] local 192.168.1.196 port 55708 connected to 192.168.1.254 port 5201
iperf3: getsockopt - Protocol not available
[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-1.00   sec  9.80 MBytes  82.2 Mbits/sec
iperf3: getsockopt - Protocol not available
[  4]   1.00-2.00   sec  9.70 MBytes  81.3 Mbits/sec
……….

# This is from router
root@OpenWrt:/# iperf3 -s
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Accepted connection from 192.168.1.196, port 55707
[  5] local 192.168.1.254 port 5201 connected to 192.168.1.196 port 55708
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.18   sec  11.5 MBytes  81.4 Mbits/sec   10   91.2 KBytes
[  5]   1.18-2.00   sec  7.95 MBytes  81.2 Mbits/sec   19   57.0 KBytes
[  5]   2.00-3.00   sec  9.51 MBytes  80.0 Mbits/sec   14   58.5 KBytes
[  5]   3.00-4.01   sec  10.3 MBytes  85.6 Mbits/sec   13   67.0 KBytes
[  5]   4.01-5.00   sec  10.2 MBytes  85.8 Mbits/sec   12   75.6 KBytes
[  5]   5.00-6.00   sec  10.2 MBytes  85.3 Mbits/sec   11   61.3 KBytes
[  5]   6.00-7.00   sec  10.7 MBytes  89.8 Mbits/sec   13   51.3 KBytes
…….
[  5]  26.00-27.00  sec  10.1 MBytes  85.1 Mbits/sec   17   62.7 KBytes
[  5]  27.00-28.00  sec  10.8 MBytes  90.5 Mbits/sec   13   54.2 KBytes
[ 2890.227836] CPU 0 Unable to handle kernel paging request at virtual address 0000042c, epc == 803a645c, ra == 803419cc
[ 2890.237026] Oops[#1]:
[ 2890.239312] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 4.14.98 #0
[ 2890.245311] task: 806407c0 task.stack: 8062e000
[ 2890.249827] $ 0   : 00000000 00000001 00000001 83b32ae8
[ 2890.255042] $ 4   : 00000428 0000001f 0000003e 00000001
[ 2890.260252] $ 8   : 0000003e 00000001 00080000 000002a4
[ 2890.265473] $12   : 001e193e 5f800000 0007cf6d 08cf98dc
[ 2890.270698] $16   : a307a3c0 83b32ae8 a22390c8 80640000
[ 2890.275931] $20   : 40000000 c0000000 827cccc0 10000000
[ 2890.281148] $24   : 00000000 8000d4d4
[ 2890.286363] $28   : 8062e000 8380de60 83b32000 803419cc
[ 2890.291601] Hi    : 0000017f
[ 2890.294462] Lo    : ef9db37d
[ 2890.297368] epc   : 803a645c napi_complete_done+0xa8/0x1e0
[ 2890.302839] ra    : 803419cc xrx200_tx_housekeeping+0x17c/0x21c
[ 2890.308736] Status: 1100ff02 KERNEL EXL
[ 2890.312652] Cause : 0080000c (ExcCode 03)
[ 2890.316654] BadVA : 0000042c
[ 2890.319533] PrId  : 00019556 (MIPS 34Kc)
[ 2890.323441] Modules linked in: ath9k ath9k_common ath9k_hw ath pppoe nf_conntrack_ipv6 mac80211 iptable_nat ipt_REJECT ipt_MASQUERADE cfg80211 xt_time xt_tcpudp xt_state xt_nat xt_multiport xt_mark xt_mac xt_limit xt_conntrack xt_comment xt_TCPMSS xt_REDIRECT xt_LOG xt_FLOWOFFLOAD pppox ppp_async owl_loader nf_reject_ipv4 nf_nat_redirect nf_nat_masquerade_ipv4 nf_conntrack_ipv4 nf_nat_ipv4 nf_nat nf_log_ipv4 nf_flow_table_hw nf_flow_table nf_defrag_ipv6 nf_defrag_ipv4 nf_conntrack_rtcache nf_conntrack ltq_deu_vr9 iptable_mangle iptable_filter ip_tables crc_ccitt compat drv_dsl_cpe_api ledtrig_usbport drv_mei_cpe ip6t_REJECT nf_reject_ipv6 nf_log_ipv6 nf_log_common ip6table_mangle ip6table_filter ip6_tables x_tables pppoatm ppp_generic slhc br2684 atm drv_ifxos dwc2 gpio_button_hotplug
[ 2890.393097] Process swapper/0 (pid: 0, threadinfo=8062e000, task=806407c0, tls=00000000)
[ 2890.401170] Stack : 80790000 80004be4 f0ebad00 800aabc4 00000001 83b32ae8 00000000 00000020
[ 2890.409524]         0000012c 804d8990 a307a3c0 83b32ae8 a22390c8 0000001f 40000000 c0000000
[ 2890.417878]         827cccc0 803419cc 81094420 000a0021 000002a0 81093c80 8068dc80 8063dfc4
[ 2890.426235]         805cb320 80640000 83b32b70 00000001 83b32ae8 00000001 81094420 00000020
[ 2890.434591]         0000012c 8380df18 0009e18e 80640000 8380df20 803a66e4 00000020 00000020
[ 2890.442945]         ...
[ 2890.445380] Call Trace:
[ 2890.447852] [<803a645c>] napi_complete_done+0xa8/0x1e0
[ 2890.452983] [<803419cc>] xrx200_tx_housekeeping+0x17c/0x21c
[ 2890.458547] [<803a66e4>] net_rx_action+0x150/0x30c
[ 2890.463356] [<804d92f0>] __do_softirq+0x128/0x2ec
[ 2890.468056] [<8003c6c0>] irq_exit+0xac/0xc8
[ 2890.472227] [<802792cc>] plat_irq_dispatch+0xfc/0x138
[ 2890.477270] [<8000bb28>] except_vec_vi_end+0xb8/0xc4
[ 2890.482238] [<8000d4f0>] r4k_wait_irqoff+0x1c/0x24
[ 2890.487023] [<8007596c>] do_idle+0xd4/0x154
[ 2890.491185] [<80075be4>] cpu_startup_entry+0x24/0x30
[ 2890.496162] [<8065cbec>] start_kernel+0x480/0x4a0
[ 2890.500847] Code: 000000c0  8e230004  8e240000 <ac830004> ac640000  ae310000  ae310004  10400002  41606000
[ 2890.510579]
[ 2890.512165] ---[ end trace 7cba65251632d345 ]---
[ 2890.520104] Kernel panic - not syncing: Fatal exception in interrupt
[ 2890.528306] Rebooting in 3 seconds..

Hi i have build again a build for the o2Box 6431 with 904 905 906 but without irq-balancing.
I build a SMP and a VPE variant but now i test it with VPE only for the moment.
I want (my) real conditions for this reason i have installed asterisk and luci-ssl and make only an VDSL speedtest (the Router have only 100Mbit/s connectors):
VPE (with only one core):
/etc/init.d/dsl_control status: Data Rate: Down: 95.767 Mb/s / Up: 30.998 Mb/s

with "option flow_offloading '1'" in /etc/config/firewall
no connection to dropbear and no opened uhttpd

and again:

iperf3 from router to raspberry-pi 3B+
https://pastebin.com/qVxi5ZYf
dmesg looks normal: https://pastebin.com/gxc2iVvW
but iperf3 ends for any reason on the router

with "option flow_offloading '1'" in /etc/config/firewall
connection to dropbear and opened startpage on luci

without flow-offloading
connection to dropbear and opened startpage on luci

without flow-offloading
no connection to dropbear and no opened uhttpd

with "option flow_offloading '1'" in /etc/config/firewall
no connection to dropbear
disabled uhttpd and disabled asterisk

dmesg and logread all OK

That's weird. Was the openwrt/kernel source updated again? But if it compiles ... :smiley: Gonna check it.

I don't know if it is possible with lantiq packet engine, but probably not. Multiple connections will still go from DSL driver. It could speed up a concurrent communication of wifi and dsl to ethernet. Wifi on VPE0, DSL on VPE1 and two queues to the ethernet. In vanilla openwrt you cannot have DSL nor wifi on VPE1 as it didn't get interrupts. Without two queues both VPEs will fight over the single one.

Localhost communication is RAM-RAM only. So low/slow/L1only cache, thin DDR2 interface and/or slow CPU. If the localhost is slow, then obviously other connections will be slow too (they will probably have a higher overhead).

d*mn I've thought I've fixed it. Well back to the debug then :smiley:

Linux version 4.14.98

I see I still have 4.14.96 version.

I try again for my Easybox 904xDSL, i installed 901 - 906 and add the patches 4027 4028 from hand to the drivers/net/ethernet/lantiq_xrx200.c
(these patches 407 4028 required for this special model)
The resulting lantiq_xrx200.c are here

i run the iperf3 testscript and the router reboot (always when i try again).
I get the following error:

[  5]   0.00-1.06   sec  25.2 MBytes   199 Mbits/sec    0    184 KBytes       
[  114.125660] Unhandled kernel unaligned access[#1]:
[  114.129050] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 4.14.101 #0
[  114.135123] task: 806928e0 task.stack: 80680000
[  114.139633] $ 0   : 00000000 00000001 00000001 87d80b08
[  114.144839] $ 4   : 000002f2 0000001f 0000004a 00000001
[  114.150061] $ 8   : 0000004a 0002ccf1 00000003 00000000
[  114.155284] $12   : 810ee8a0 00000000 00000002 8aedf400
[  114.160506] $16   : a7e4d3c0 87d80b08 7c5fa09b 80690000
[  114.165728] $20   : 40000000 c0000000 870f8e40 10000000
[  114.170952] $24   : 00000000 8000d474                  
[  114.176173] $28   : 80680000 87c0de70 87d80000 8036801c
[  114.181397] Hi    : 0000017f
[  114.184270] Lo    : ef9db37d
[  114.187164] epc   : 803cf4f8 napi_complete_done+0xa8/0x1e0
[  114.192656] ra    : 8036801c xrx200_tx_housekeeping+0x17c/0x21c
[  114.198544] Status: 1100ff02	KERNEL EXL 
[  114.202463] Cause : 00800014 (ExcCode 05)
[  114.206465] BadVA : 000002f6
[  114.209339] PrId  : 00019556 (MIPS 34Kc)
[  114.213251] Modules linked in: ltq_ptm_vr9 pppoe nf_conntrack_ipv6 iptable_nat ipt_REJECT ipt_MASQUERADE xt_time xt_tcpudp xt_state xt_nat xt_multiport xt_mark xt_mac xt_limit xt_conntrack xt_comment xt_TCPMSS xt_REDIRECT xt_LOG xt_FLOWOFFLOAD xt_CT spi_gpio spi_bitbang pppox ppp_async nf_reject_ipv4 nf_nat_redirect nf_nat_masquerade_ipv4 nf_conntrack_ipv4 nf_nat_ipv4 nf_nat nf_log_ipv4 nf_flow_table_hw nf_flow_table nf_defrag_ipv6 nf_defrag_ipv4 nf_conntrack_rtcache nf_conntrack ltq_deu_vr9 iptable_mangle iptable_filter ip_tables gpio_74x164 crc_ccitt drv_dsl_cpe_api drv_mei_cpe ip6t_REJECT nf_reject_ipv6 nf_log_ipv6 nf_log_common ip6table_mangle ip6table_filter ip6_tables x_tables pppoatm ppp_generic slhc br2684 atm drv_ifxos gpio_button_hotplug
[  114.279587] Process swapper/0 (pid: 0, threadinfo=80680000, task=806928e0, tls=00000000)
[  114.287670] Stack : 00000002 870f8780 870f8a80 870f8600 00000001 87d80b08 00000000 00000020
[  114.296025]         0000012c 8051eed8 a7e4d3c0 87d80b08 7c5fa09b 0000001f 40000000 c0000000
[  114.304381]         870f8e40 8036801c 00000600 000e0021 00000000 81114578 80820000 8068ffc4
[  114.312737]         00000000 80690000 87d80b90 00000001 87d80b08 00000001 81115440 00000020
[  114.321093]         0000012c 87c0df28 ffff4a40 80690000 87c0df30 803cf780 00000000 00000020
[  114.329449]         ...
[  114.331888] Call Trace:
[  114.334334] [<803cf4f8>] napi_complete_done+0xa8/0x1e0
[  114.339484] [<8036801c>] xrx200_tx_housekeeping+0x17c/0x21c
[  114.345049] [<803cf780>] net_rx_action+0x150/0x30c
[  114.349850] [<8051f838>] __do_softirq+0x128/0x2ec
[  114.354539] [<8003c810>] irq_exit+0xac/0xc8
[  114.358717] [<8000330c>] ltq_hw_irqdispatch+0xbc/0xfc
[  114.363773] [<8000bac8>] except_vec_vi_end+0xb8/0xc4
[  114.368727] [<8000d490>] r4k_wait_irqoff+0x1c/0x24
[  114.373521] [<80075f1c>] do_idle+0xd4/0x154
[  114.377691] [<80076194>] cpu_startup_entry+0x24/0x30
[  114.382659] [<806b3bf4>] start_kernel+0x488/0x4a8
[  114.387348] Code: 000000c0  8e230004  8e240000 <ac830004> ac640000  ae310000  ae310004  10400002  41606000 
[  114.397081] 
[  114.398683] ---[ end trace 06a23f2d9abf1308 ]---
[  114.408405] Kernel panic - not syncing: Fatal exception in interrupt
[  114.416244] Rebooting in 3 seconds..

(long version)

I thing i do no failure when i add the patches 4027 and 4028, so i thing the error starts here:

static int xrx200_tx_housekeeping(struct napi_struct *napi, int budget)
	...
	// HACK, free all descriptors, even over budget (else there will be queue stalls, slow CPU)
	pkts = pkts ? (budget - 1) : 0;

	if (pkts < budget) {
		if (napi_complete_done(&ch->napi, pkts)) {
			ltq_dma_enable_irq(&ch->dma);
		}
	}
	...

What can i do ?

I have the fixed version, but I have some strange errors in irq balancing by now. It seems there is some weird racing between irq events and irq affinity switch. It happens only in very high speeds of both, so it is problematic to test (or understand for me)... so just wait for little :smiley: .

2 Likes

Maybe OT but does compiling with -mmt -mdsp improve the results? I started with -march=34kc -mtune=34kc, -march=34kc should imply -mmt -mdsp, but I'm not sure, so I use the "complete" -march=34kc -mmt -mdsp -mtune=34kc. MT ASE should help SMP since they where made exactly for that.