diff --git a/armv8/base-files/etc/init.d/nvme-smp-affinity b/armv8/base-files/etc/init.d/nvme-smp-affinity new file mode 100755 index 0000000..c840250 --- /dev/null +++ b/armv8/base-files/etc/init.d/nvme-smp-affinity @@ -0,0 +1,42 @@ +#!/bin/sh /etc/rc.common + +START=00 +STOP=90 + +get_device_irq() { + local device="$1" + local line + local seconds="0" + + while [ "${seconds}" -le 10 ]; do + line=$(grep -m 1 "${device}\$" /proc/interrupts) && break + seconds="$(( seconds + 2 ))" + sleep 2 + done + echo ${line} | sed 's/:.*//' +} + +set_smp_affinity() { + local core_mask="$1" + local interface="$2" + + [ -z "$interface" ] && return 0 + + local irq=$(get_device_irq "$interface") + echo "${core_mask}" > /proc/irq/${irq}/smp_affinity +} + +boot() { + . /lib/functions/uci-defaults.sh + + case "$(board_name)" in + friendlyarm,nanopi-r5s) + set_smp_affinity "1" "nvme0q0" + set_smp_affinity "2" "nvme0q1" + set_smp_affinity "1" "nvme0q2" + set_smp_affinity "1" "nvme0q3" + set_smp_affinity "2" "nvme0q4" + ;; + esac +} + diff --git a/armv8/base-files/etc/rc.d/K00nvme-smp-affinity b/armv8/base-files/etc/rc.d/K00nvme-smp-affinity new file mode 120000 index 0000000..1662676 --- /dev/null +++ b/armv8/base-files/etc/rc.d/K00nvme-smp-affinity @@ -0,0 +1 @@ +../init.d/nvme-smp-affinity \ No newline at end of file