ramips: move wifi related interrupts off the main core on SMP systems
authorFelix Fietkau <nbd@nbd.name>
Mon, 21 Jan 2019 16:14:52 +0000 (17:14 +0100)
committerFelix Fietkau <nbd@nbd.name>
Tue, 29 Jan 2019 10:27:02 +0000 (11:27 +0100)
Improves LAN<->WLAN bridging/routing performance

Signed-off-by: Felix Fietkau <nbd@nbd.name>
target/linux/ramips/base-files/etc/init.d/set-irq-affinity [new file with mode: 0755]

diff --git a/target/linux/ramips/base-files/etc/init.d/set-irq-affinity b/target/linux/ramips/base-files/etc/init.d/set-irq-affinity
new file mode 100755 (executable)
index 0000000..9a3afef
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/sh /etc/rc.common
+
+START=99
+
+get_irq() {
+       local name="$1"
+       grep -m 1 "$name" /proc/interrupts | cut -d: -f1 | sed 's, *,,'
+}
+
+set_irq_affinity() {
+       local name="$1"
+       local val="$2"
+       local irq="$(get_irq "$name")"
+       [ -n "$irq" ] || return
+       echo "$val" > "/proc/irq/$irq/smp_affinity"
+}
+
+start() {
+       if grep -q 'processor.*: 2' /proc/cpuinfo; then
+               mask1=4
+               mask2=8
+       elif grep -q 'processor.*: 1' /proc/cpuinfo; then
+               mask1=2
+               mask2=2
+       else
+               return
+       fi
+
+       set_irq_affinity mt76x2e $mask1
+       set_irq_affinity mt7603e $mask2
+}