#!/bin/bash # # Copyright (c) 2015-2016 Wind River Systems, Inc. # # SPDX-License-Identifier: Apache-2.0 # source /etc/init.d/cpumap_functions.sh export NR_CPUS_LIST=("4" "8" "16" "32" "64" "128") if [ ! -z ${1} ]; then NR_CPUS_LIST=(${1//,/ }) fi function test_cpumap_to_cpulist { local NR_CPUS=$1 declare -A CPULISTS if [ ${NR_CPUS} -ge 4 ]; then CPULISTS["0"]="" CPULISTS["1"]="0" CPULISTS["2"]="1" CPULISTS["3"]="0-1" CPULISTS["5"]="0,2" CPULISTS["7"]="0-2" CPULISTS["F"]="0-3" CPULISTS["9"]="0,3" fi if [ ${NR_CPUS} -ge 8 ]; then CPULISTS["00"]="" CPULISTS["11"]="0,4" CPULISTS["FF"]="0-7" CPULISTS["81"]="0,7" fi if [ ${NR_CPUS} -ge 16 ]; then CPULISTS["0000"]="" CPULISTS["1111"]="0,4,8,12" CPULISTS["FFF"]="0-11" CPULISTS["F0F"]="0-3,8-11" CPULISTS["F0F0"]="4-7,12-15" CPULISTS["FFFF"]="0-15" CPULISTS["FFFE"]="1-15" CPULISTS["8001"]="0,15" fi if [ ${NR_CPUS} -ge 32 ]; then CPULISTS["00000000"]="" CPULISTS["11111111"]="0,4,8,12,16,20,24,28" CPULISTS["0F0F0F0F"]="0-3,8-11,16-19,24-27" CPULISTS["F0F0F0F0"]="4-7,12-15,20-23,28-31" CPULISTS["FFFFFFFF"]="0-31" CPULISTS["FFFFFFFE"]="1-31" CPULISTS["80000001"]="0,31" fi if [ ${NR_CPUS} -ge 64 ]; then CPULISTS["0000000000000000"]="" CPULISTS["1111111111111111"]="0,4,8,12,16,20,24,28,32,36,40,44,48,52,56,60" CPULISTS["0F0F0F0F0F0F0F0F"]="0-3,8-11,16-19,24-27,32-35,40-43,48-51,56-59" CPULISTS["F0F0F0F0F0F0F0F0"]="4-7,12-15,20-23,28-31,36-39,44-47,52-55,60-63" CPULISTS["FFFFFFFFFFFFFFFF"]="0-63" CPULISTS["FFFFFFFFFFFFFFFE"]="1-63" CPULISTS["8000000000000001"]="0,63" fi if [ ${NR_CPUS} -ge 128 ]; then CPULISTS["00000000000000000000000000000000"]="" CPULISTS["11111111111111111111111111111111"]="0,4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96,100,104,108,112,116,120,124" CPULISTS["0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F"]="0-3,8-11,16-19,24-27,32-35,40-43,48-51,56-59,64-67,72-75,80-83,88-91,96-99,104-107,112-115,120-123" CPULISTS["F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0"]="4-7,12-15,20-23,28-31,36-39,44-47,52-55,60-63,68-71,76-79,84-87,92-95,100-103,108-111,116-119,124-127" CPULISTS["FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"]="0-127" CPULISTS["FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE"]="1-127" CPULISTS["80000000000000000000000000000001"]="0,127" fi for CPUMAP in ${!CPULISTS[@]}; do EXPECTED=${CPULISTS[${CPUMAP}]} CPULIST=$(cpumap_to_cpulist ${CPUMAP} ${NR_CPUS}) if [ "${CPULIST}" != "${EXPECTED}" ]; then printf "\n" echo "error: (cpumap_to_list ${CPUMAP} ${NR_CPUS}) returned \"${CPULIST}\" instead of \"${EXPECTED}\"" fi printf "." done printf "\n" } function test_cpulist_to_cpumap { local NR_CPUS=$1 declare -A CPUMAPS if [ ${NR_CPUS} -ge 4 ]; then CPUMAPS[" "]="0" CPUMAPS["0"]="1" CPUMAPS["1"]="2" CPUMAPS["0-1"]="3" CPUMAPS["0,2"]="5" CPUMAPS["0-2"]="7" CPUMAPS["0-3"]="F" CPUMAPS["0,3"]="9" fi if [ ${NR_CPUS} -ge 8 ]; then CPUMAPS["0,4"]="11" CPUMAPS["0-7"]="FF" CPUMAPS["0,7"]="81" fi if [ ${NR_CPUS} -ge 16 ]; then CPUMAPS["0,4,8,12"]="1111" CPUMAPS["0-11"]="FFF" CPUMAPS["0-3,8-11"]="F0F" CPUMAPS["4-7,12-15"]="F0F0" CPUMAPS["0-15"]="FFFF" CPUMAPS["1-15"]="FFFE" CPUMAPS["0,15"]="8001" fi if [ ${NR_CPUS} -ge 32 ]; then CPUMAPS["0,4,8,12,16,20,24,28"]="11111111" CPUMAPS["0-3,8-11,16-19,24-27"]="F0F0F0F" CPUMAPS["4-7,12-15,20-23,28-31"]="F0F0F0F0" CPUMAPS["0-31"]="FFFFFFFF" CPUMAPS["1-31"]="FFFFFFFE" CPUMAPS["0,31"]="80000001" fi if [ ${NR_CPUS} -ge 64 ]; then CPUMAPS["0,4,8,12,16,20,24,28,32,36,40,44,48,52,56,60"]="1111111111111111" CPUMAPS["0-3,8-11,16-19,24-27,32-35,40-43,48-51,56-59"]="F0F0F0F0F0F0F0F" CPUMAPS["4-7,12-15,20-23,28-31,36-39,44-47,52-55,60-63"]="F0F0F0F0F0F0F0F0" CPUMAPS["0-63"]="FFFFFFFFFFFFFFFF" CPUMAPS["1-63"]="FFFFFFFFFFFFFFFE" CPUMAPS["0,63"]="8000000000000001" fi if [ ${NR_CPUS} -ge 128 ]; then CPUMAPS["0,4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96,100,104,108,112,116,120,124"]="11111111111111111111111111111111" CPUMAPS["0-3,8-11,16-19,24-27,32-35,40-43,48-51,56-59,64-67,72-75,80-83,88-91,96-99,104-107,112-115,120-123"]="F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F" CPUMAPS["4-7,12-15,20-23,28-31,36-39,44-47,52-55,60-63,68-71,76-79,84-87,92-95,100-103,108-111,116-119,124-127"]="F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0" CPUMAPS["0-127"]="FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" CPUMAPS["1-127"]="FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE" CPUMAPS["0,127"]="80000000000000000000000000000001" fi for CPULIST in ${!CPUMAPS[@]}; do EXPECTED=${CPUMAPS[${CPULIST}]} CPUMAP=$(cpulist_to_cpumap ${CPULIST} ${NR_CPUS}) if [ "${CPUMAP}" != "${EXPECTED}" ]; then printf "\n" echo "error: (cpulist_to_cpumap ${CPULIST} ${NR_CPUS}) returned \"${CPUMAP}\" instead of \"${EXPECTED}\"" fi printf "." done printf "\n" } function test_invert_cpumap { local NR_CPUS=$1 declare -A INVERSES if [ $((${NR_CPUS} % 4)) -ne 0 ]; then echo "test_invert_cpumap skipping NR_CPUS=${NR_CPUS}; not a multiple of 4" return 0 fi if [ ${NR_CPUS} -ge 4 ]; then INVERSES["0"]="FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" INVERSES["1"]="FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE" INVERSES["2"]="FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD" INVERSES["3"]="FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC" INVERSES["5"]="FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA" INVERSES["7"]="FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8" INVERSES["F"]="FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0" INVERSES["9"]="FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6" fi if [ ${NR_CPUS} -ge 8 ]; then INVERSES["11"]="FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEE" INVERSES["FF"]="FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00" INVERSES["F0"]="FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F" INVERSES["81"]="FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E" fi if [ ${NR_CPUS} -ge 16 ]; then INVERSES["1111"]="FFFFFFFFFFFFFFFFFFFFFFFFFFFFEEEE" INVERSES["FFF"]="FFFFFFFFFFFFFFFFFFFFFFFFFFFFF000" INVERSES["F0F"]="FFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0" INVERSES["F0F0"]="FFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0F" INVERSES["0F0F"]="FFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0" INVERSES["FFFF"]="FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000" INVERSES["FFFE"]="FFFFFFFFFFFFFFFFFFFFFFFFFFFF0001" INVERSES["8001"]="FFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFE" fi if [ ${NR_CPUS} -ge 32 ]; then INVERSES["11111111"]="FFFFFFFFFFFFFFFFFFFFFFFFEEEEEEEE" INVERSES["0F0F0F0F"]="FFFFFFFFFFFFFFFFFFFFFFFFF0F0F0F0" INVERSES["F0F0F0F0"]="FFFFFFFFFFFFFFFFFFFFFFFF0F0F0F0F" INVERSES["FFFFFFFF"]="FFFFFFFFFFFFFFFFFFFFFFFF00000000" INVERSES["FFFFFFFE"]="FFFFFFFFFFFFFFFFFFFFFFFF00000001" INVERSES["80000001"]="FFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFE" fi if [ ${NR_CPUS} -ge 64 ]; then INVERSES["1111111111111111"]="FFFFFFFFFFFFFFFFEEEEEEEEEEEEEEEE" INVERSES["0F0F0F0F0F0F0F0F"]="FFFFFFFFFFFFFFFFF0F0F0F0F0F0F0F0" INVERSES["F0F0F0F0F0F0F0F0"]="FFFFFFFFFFFFFFFF0F0F0F0F0F0F0F0F" INVERSES["FFFFFFFFFFFFFFFF"]="FFFFFFFFFFFFFFFF0000000000000000" INVERSES["FFFFFFFFFFFFFFFE"]="FFFFFFFFFFFFFFFF0000000000000001" INVERSES["8000000000000001"]="FFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFE" fi if [ ${NR_CPUS} -ge 128 ]; then INVERSES["11111111111111111111111111111111"]="EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" INVERSES["0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F"]="F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0" INVERSES["F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0"]="0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F" INVERSES["FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"]="00000000000000000000000000000000" INVERSES["FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE"]="00000000000000000000000000000001" INVERSES["80000000000000000000000000000001"]="7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE" fi for CPUMAP in ${!INVERSES[@]}; do EXPECTED=${INVERSES[${CPUMAP}]} if [ ${NR_CPUS} -lt 128 ]; then EXPECTED=$(echo ${EXPECTED} | cut --complement -c1-$((32-((${NR_CPUS}+3)/4)))) fi EXPECTED=$(echo ${EXPECTED} | sed -e "s/^0*//") if [ -z ${EXPECTED} ]; then EXPECTED="0" fi INVERSE=$(invert_cpumap ${CPUMAP} ${NR_CPUS}) if [ "${INVERSE}" != "${EXPECTED}" ]; then printf "\n" echo "error: (invert_cpumap ${CPUMAP} ${NR_CPUS}) returned \"${INVERSE}\" instead of \"${EXPECTED}\"" fi printf "." done printf "\n" } for NR_CPUS in ${NR_CPUS_LIST[@]}; do echo "NR_CPUS=${NR_CPUS}" test_cpumap_to_cpulist ${NR_CPUS} test_cpulist_to_cpumap ${NR_CPUS} test_invert_cpumap ${NR_CPUS} echo "" done exit 0