aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/ramips
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@nbd.name>2019-01-21 17:14:52 +0100
committerFelix Fietkau <nbd@nbd.name>2019-01-29 11:27:02 +0100
commit01895c315f0485779a2e312c58708a32b4ea1f9a (patch)
treefb5c231a696d3812c9a91f926d4d00ce3cef584e /target/linux/ramips
parente1496d631eb23407a45e5d3a42627d5d591fdb0a (diff)
downloadupstream-01895c315f0485779a2e312c58708a32b4ea1f9a.tar.gz
upstream-01895c315f0485779a2e312c58708a32b4ea1f9a.tar.bz2
upstream-01895c315f0485779a2e312c58708a32b4ea1f9a.zip
ramips: move wifi related interrupts off the main core on SMP systems
Improves LAN<->WLAN bridging/routing performance Signed-off-by: Felix Fietkau <nbd@nbd.name>
Diffstat (limited to 'target/linux/ramips')
-rwxr-xr-xtarget/linux/ramips/base-files/etc/init.d/set-irq-affinity31
1 files changed, 31 insertions, 0 deletions
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
index 0000000000..9a3afefa5a
--- /dev/null
+++ b/target/linux/ramips/base-files/etc/init.d/set-irq-affinity
@@ -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
+}