Added IRQ redistribution for BPi M2 / sun6i

Changed i.MX6 settings to not rely on any variables, slightly improving IRQ distribution on multi core CPUs and to fail silently if board has less CPU cores.
This commit is contained in:
Thomas Kaiser
2016-06-12 19:38:41 +02:00
committed by GitHub
parent 11bde288da
commit 49df99bfbf

View File

@@ -191,14 +191,12 @@ prepare_board() {
# IRQ distribution based on $HARDWARE and/or $ID, probably some sort of user feedback (leds)
case ${HARDWARE} in
Freescale)
# i.MX6 boards
if [ $CORES -gt 1 ]; then
echo 2 >/proc/irq/$(awk -F":" "/ethernet/ {print \$1}" </proc/interrupts | sed 's/\ //g' | head -1)/smp_affinity
fi
Freescale) # i.MX6 boards, send Ethernet to cpu1, MMC to cpu2/cpu3 (when available)
echo 2 >/proc/irq/$(awk -F":" "/ethernet/ {print \$1}" </proc/interrupts | sed 's/\ //g' | head -1)/smp_affinity 2>/dev/null
echo 4 >/proc/irq/$(awk -F":" "/mmc1/ {print \$1}" </proc/interrupts | sed 's/\ //g' | head -1)/smp_affinity 2>/dev/null
echo 8 >/proc/irq/$(awk -F":" "/mmc0/ {print \$1}" </proc/interrupts | sed 's/\ //g' | head -1)/smp_affinity 2>/dev/null
;;
gs705a)
# Roseapple Pi/LeMaker Guitar: send USB IRQs to cpu1/cpu2, DMA0 to cpu2 and Ethernet + SD card to cpu3
gs705a) # Roseapple Pi/LeMaker Guitar: send USB IRQs to cpu1/cpu2, DMA0 to cpu2 and Ethernet + SD card to cpu3
echo 2 >/proc/irq/$(awk -F":" "/usb1/ {print \$1}" </proc/interrupts | sed 's/\ //g')/smp_affinity
echo 4 >/proc/irq/$(awk -F":" "/usb2/ {print \$1}" </proc/interrupts | sed 's/\ //g')/smp_affinity 2>/dev/null
echo 4 >/proc/irq/$(awk -F":" "/usb3/ {print \$1}" </proc/interrupts | sed 's/\ //g')/smp_affinity 2>/dev/null
@@ -206,8 +204,7 @@ prepare_board() {
echo 8 >/proc/irq/$(awk -F":" "/ethernet_mac/ {print \$1}" </proc/interrupts | sed 's/\ //g')/smp_affinity
echo 8 >/proc/irq/$(awk -F":" "/sdcard/ {print \$1}" </proc/interrupts | sed 's/\ //g')/smp_affinity
;;
Marvell)
# Clearfog: Send network IRQs to cpu1 on both kernels
Marvell) # Clearfog: Send network IRQs to cpu1 on both kernels
for i in $(awk -F':' '/mwlwifi|mvneta|eth0/{print $1}' /proc/interrupts); do
echo 2 >/proc/irq/$i/smp_affinity
done
@@ -220,8 +217,7 @@ prepare_board() {
done
echo 3 >/proc/irq/$(awk -F":" "/usb1/ {print \$1}" </proc/interrupts | sed 's/\ //g')/smp_affinity_list
;;
ODROID-XU3)
# ODROID XU4
ODROID-XU3) # ODROID XU4
echo 2 >/proc/irq/$(awk -F":" "/usb2/ {print \$1}" </proc/interrupts | sed 's/\ //g')/smp_affinity
echo 4 >/proc/irq/$(awk -F":" "/usb3/ {print \$1}" </proc/interrupts | sed 's/\ //g')/smp_affinity
echo 8 >/proc/irq/$(awk -F":" "/usb5/ {print \$1}" </proc/interrupts | sed 's/\ //g')/smp_affinity
@@ -231,19 +227,22 @@ prepare_board() {
echo 64 >/proc/irq/$i/smp_affinity
done
;;
sun4i|sun5i)
# only one core, nothing to do
sun4i|sun5i) # only one core, nothing to improve
:
;;
sun6i)
# A31/A31s boards (Banana Pi M2)
:
sun6i) # Banana Pi M2: process eth0 on cpu1, SDIO on cpu2, USB on cpu3
echo 2 >/proc/irq/$(awk -F":" '/eth0/ {print $1}' </proc/interrupts | sed 's/\ //g')/smp_affinity
for i in $(awk -F':' '/sunxi-mmc/{print $1}' /proc/interrupts); do
echo 4 >/proc/irq/$i/smp_affinity
done
for i in $(awk -F':' '/hcd:usb/{print $1}' /proc/interrupts); do
echo 8 >/proc/irq/$i/smp_affinity
done
;;
sun7i)
# try to redistribute eth0 irq to dedicated core
sun7i) # try to redistribute eth0 irq to dedicated core
echo 2 >/proc/irq/$(awk -F":" '/eth0/ {print $1}' </proc/interrupts | sed 's/\ //g')/smp_affinity 2>/dev/null
;;
sun8i)
sun8i) # H3 boards, try to do the best based on specific board since interfaces vary a lot
# 10 or 120 sec user feedback that the board is ready after 1st login with 3.4 kernel
SwapState="$(grep swap /etc/fstab)"
if [ "X${SwapState}" != "X" ]; then