45 lines
995 B
Bash
45 lines
995 B
Bash
#!/bin/sh
|
|
|
|
[ "$ACTION" = add ] || exit
|
|
|
|
get_device_irq() {
|
|
local device="$1"
|
|
local line
|
|
local seconds="0"
|
|
|
|
# wait up to 10 seconds for the irq/device to appear
|
|
while [ "${seconds}" -le 10 ]; do
|
|
line=$(grep -m 1 "${device}\$" /proc/interrupts) && break
|
|
seconds="$(( seconds + 2 ))"
|
|
sleep 2
|
|
done
|
|
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-r5s)
|
|
set_interface_core 8 "eth0"
|
|
echo f > /sys/class/net/eth0/queues/rx-0/rps_cpus
|
|
set_interface_core 4 "eth1-0"
|
|
set_interface_core 4 "eth1-16"
|
|
set_interface_core 4 "eth1-18"
|
|
echo b > /sys/class/net/eth1/queues/rx-0/rps_cpus
|
|
set_interface_core 2 "eth2-0"
|
|
set_interface_core 2 "eth2-16"
|
|
set_interface_core 2 "eth2-18"
|
|
echo d > /sys/class/net/eth2/queues/rx-0/rps_cpus
|
|
;;
|
|
esac
|