[openwrt/openwrt] rockchip: distribute net interrupts

LEDE Commits lede-commits at lists.infradead.org
Tue Jul 28 10:02:17 EDT 2020


blocktrron pushed a commit to openwrt/openwrt.git, branch master:
https://git.openwrt.org/7a4fc8906cd2256e7381d1c043e19872eeb06883

commit 7a4fc8906cd2256e7381d1c043e19872eeb06883
Author: David Bauer <mail at david-bauer.net>
AuthorDate: Mon Jul 27 23:13:02 2020 +0200

    rockchip: distribute net interrupts
    
    This adds a hotplug script for distributing interrupts of eth0 and eth1
    across different cores. Otherwise the forwarding performance between
    eth0 and eth1 is severely affected.
    
    The existing SMP distribution mechanic in OpenWrt can't be used here, as
    the actual device IRQ has to be moved to dedicated cores. In case of
    eth1, this is in fact the USB3 controller.
    
    Signed-off-by: David Bauer <mail at david-bauer.net>
---
 .../etc/hotplug.d/net/40-net-smp-affinity          | 30 ++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/target/linux/rockchip/armv8/base-files/etc/hotplug.d/net/40-net-smp-affinity b/target/linux/rockchip/armv8/base-files/etc/hotplug.d/net/40-net-smp-affinity
new file mode 100644
index 0000000000..ab3f954654
--- /dev/null
+++ b/target/linux/rockchip/armv8/base-files/etc/hotplug.d/net/40-net-smp-affinity
@@ -0,0 +1,30 @@
+#!/bin/sh
+
+[ "$ACTION" = add ] || exit
+
+get_device_irq() {
+	local device="$1"
+
+	local line=$(grep -m 1 "${device}\$" /proc/interrupts)
+	echo $(echo ${line} | sed 's/:.*//')
+}
+
+set_interface_core() {
+	local core_mask="$1"
+	local interface="$2"
+	local device="$3"
+
+	[ -z "${device}" ] && device="$interface"
+
+	local irq=$(get_device_irq "$device")
+
+	echo "${core_mask}" > /proc/irq/${irq}/smp_affinity
+}
+
+case "$(board_name)" in
+friendlyarm,nanopi-r2s)
+	set_interface_core 2 "eth0"
+	set_interface_core 4 "eth1" "xhci-hcd:usb3"
+	;;
+esac
+



More information about the lede-commits mailing list