1f08c3bdfSopenharmony_ci#!/bin/bash 2f08c3bdfSopenharmony_ci 3f08c3bdfSopenharmony_ciTMPDIR=/tmp 4f08c3bdfSopenharmony_ci 5f08c3bdfSopenharmony_ciPASS=0 6f08c3bdfSopenharmony_ciFAIL=1 7f08c3bdfSopenharmony_ciNOSUPPORT=2 8f08c3bdfSopenharmony_ciMISSING_FILE=3 9f08c3bdfSopenharmony_ciUNTESTED=4 10f08c3bdfSopenharmony_ciYES=0 11f08c3bdfSopenharmony_ci 12f08c3bdfSopenharmony_cicleanup() { 13f08c3bdfSopenharmony_ci if [ -f ${1} ] ; then 14f08c3bdfSopenharmony_ci rm -f ${1} 15f08c3bdfSopenharmony_ci fi 16f08c3bdfSopenharmony_ci} 17f08c3bdfSopenharmony_ci 18f08c3bdfSopenharmony_cicheck_arch() { 19f08c3bdfSopenharmony_ci case "$(uname -m)" in 20f08c3bdfSopenharmony_ci i[4-6]86|x86_64) 21f08c3bdfSopenharmony_ci ;; 22f08c3bdfSopenharmony_ci *) 23f08c3bdfSopenharmony_ci tst_brkm TCONF "Arch not supported; not running testcases" 24f08c3bdfSopenharmony_ci ;; 25f08c3bdfSopenharmony_ci esac 26f08c3bdfSopenharmony_ci} 27f08c3bdfSopenharmony_ci 28f08c3bdfSopenharmony_cicheck_config_options() { 29f08c3bdfSopenharmony_ci if ( ! ${3} "${1}" ${2} | grep -v "#" > /dev/null ) ; then 30f08c3bdfSopenharmony_ci tst_brkm TCONF "NOSUPPORT: current system dosen't support ${1}" 31f08c3bdfSopenharmony_ci fi 32f08c3bdfSopenharmony_ci} 33f08c3bdfSopenharmony_ci 34f08c3bdfSopenharmony_ciget_topology() { 35f08c3bdfSopenharmony_ci declare -a cpus 36f08c3bdfSopenharmony_ci declare -a phyid 37f08c3bdfSopenharmony_ci 38f08c3bdfSopenharmony_ci total_cpus=`tst_ncpus` 39f08c3bdfSopenharmony_ci (( total_cpus-=1 )) 40f08c3bdfSopenharmony_ci for cpu in $(seq 0 "${total_cpus}" ) 41f08c3bdfSopenharmony_ci do 42f08c3bdfSopenharmony_ci cpus[$cpu]=cpu${cpu} 43f08c3bdfSopenharmony_ci phyid[$cpu]=$(cat \ 44f08c3bdfSopenharmony_ci /sys/devices/system/cpu/cpu${cpu}/topology/physical_package_id) 45f08c3bdfSopenharmony_ci done 46f08c3bdfSopenharmony_ci j=0 47f08c3bdfSopenharmony_ci while [ "${j}" -lt "${total_cpus}" ] 48f08c3bdfSopenharmony_ci do 49f08c3bdfSopenharmony_ci (( k = $j + 1 )) 50f08c3bdfSopenharmony_ci if [ ${phyid[$j]} -eq ${phyid[$k]} ] ; then 51f08c3bdfSopenharmony_ci echo "${cpus[$j]} -P ${cpus[$k]}" | sed -e "s/cpu//g" 52f08c3bdfSopenharmony_ci fi 53f08c3bdfSopenharmony_ci (( j+=1 )) 54f08c3bdfSopenharmony_ci done 55f08c3bdfSopenharmony_ci} 56f08c3bdfSopenharmony_ci 57f08c3bdfSopenharmony_cicheck_cpufreq() { 58f08c3bdfSopenharmony_ci total_cpus=`tst_ncpus` 59f08c3bdfSopenharmony_ci (( total_cpus-=1 )) 60f08c3bdfSopenharmony_ci 61f08c3bdfSopenharmony_ci for cpu in $(seq 0 "${total_cpus}" ) 62f08c3bdfSopenharmony_ci do 63f08c3bdfSopenharmony_ci if [ ! -d /sys/devices/system/cpu/cpu${cpu}/cpufreq ] ; then 64f08c3bdfSopenharmony_ci tst_brkm TCONF "NOSUPPORT: cpufreq support not " \ 65f08c3bdfSopenharmony_ci "found please check Kernel configuration " \ 66f08c3bdfSopenharmony_ci "or BIOS settings" 67f08c3bdfSopenharmony_ci fi 68f08c3bdfSopenharmony_ci done 69f08c3bdfSopenharmony_ci} 70f08c3bdfSopenharmony_ci 71f08c3bdfSopenharmony_ciget_supporting_freq() { 72f08c3bdfSopenharmony_ci cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_available_frequencies \ 73f08c3bdfSopenharmony_ci | uniq 74f08c3bdfSopenharmony_ci} 75f08c3bdfSopenharmony_ci 76f08c3bdfSopenharmony_ciget_supporting_govr() { 77f08c3bdfSopenharmony_ci cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_available_governors \ 78f08c3bdfSopenharmony_ci | uniq 79f08c3bdfSopenharmony_ci} 80f08c3bdfSopenharmony_ci 81f08c3bdfSopenharmony_ciis_hyper_threaded() { 82f08c3bdfSopenharmony_ci siblings=`grep siblings /proc/cpuinfo | uniq | cut -f2 -d':'` 83f08c3bdfSopenharmony_ci cpu_cores=`grep "cpu cores" /proc/cpuinfo | uniq | cut -f2 -d':'` 84f08c3bdfSopenharmony_ci [ $siblings -gt $cpu_cores ]; echo $? 85f08c3bdfSopenharmony_ci} 86f08c3bdfSopenharmony_ci 87f08c3bdfSopenharmony_cicheck_input() { 88f08c3bdfSopenharmony_ci validity_check=${2:-valid} 89f08c3bdfSopenharmony_ci testfile=$3 90f08c3bdfSopenharmony_ci if [ "${validity_check}" = "invalid" ] ; then 91f08c3bdfSopenharmony_ci PASS="Testcase FAIL - Able to execute" 92f08c3bdfSopenharmony_ci FAIL="Testcase PASS - Unable to execute" 93f08c3bdfSopenharmony_ci else 94f08c3bdfSopenharmony_ci PASS="Testcase PASS" 95f08c3bdfSopenharmony_ci FAIL="Testcase FAIL" 96f08c3bdfSopenharmony_ci fi 97f08c3bdfSopenharmony_ci RC=0 98f08c3bdfSopenharmony_ci for input in ${1} 99f08c3bdfSopenharmony_ci do 100f08c3bdfSopenharmony_ci echo ${input} > ${test_file} 2>/dev/null 101f08c3bdfSopenharmony_ci return_value=$? 102f08c3bdfSopenharmony_ci output=$(cat ${test_file}) 103f08c3bdfSopenharmony_ci if [ "${return_value}" = "0" -a "${input}" = "${output}" ] ; then 104f08c3bdfSopenharmony_ci echo "${0}: ${PASS}: echo ${input} > ${test_file}" 105f08c3bdfSopenharmony_ci if [ "${validity_check}" = "invalid" ] ; then 106f08c3bdfSopenharmony_ci RC=1 107f08c3bdfSopenharmony_ci fi 108f08c3bdfSopenharmony_ci else 109f08c3bdfSopenharmony_ci echo "${0}: ${FAIL}: echo ${input} > ${test_file}" 110f08c3bdfSopenharmony_ci if [ "${validity_check}" = "valid" ] ; then 111f08c3bdfSopenharmony_ci RC=1 112f08c3bdfSopenharmony_ci fi 113f08c3bdfSopenharmony_ci fi 114f08c3bdfSopenharmony_ci done 115f08c3bdfSopenharmony_ci return $RC 116f08c3bdfSopenharmony_ci} 117f08c3bdfSopenharmony_ci 118f08c3bdfSopenharmony_ciis_multi_socket() { 119f08c3bdfSopenharmony_ci no_of_sockets=`cat \ 120f08c3bdfSopenharmony_ci /sys/devices/system/cpu/cpu*/topology/physical_package_id \ 121f08c3bdfSopenharmony_ci | sort -u | wc -l` 122f08c3bdfSopenharmony_ci [ $no_of_sockets -gt 1 ] ; echo $? 123f08c3bdfSopenharmony_ci} 124f08c3bdfSopenharmony_ci 125f08c3bdfSopenharmony_ciis_multi_core() { 126f08c3bdfSopenharmony_ci siblings=`grep siblings /proc/cpuinfo | uniq | cut -f2 -d':'` 127f08c3bdfSopenharmony_ci cpu_cores=`grep "cpu cores" /proc/cpuinfo | uniq | cut -f2 -d':'` 128f08c3bdfSopenharmony_ci if [ $siblings -eq $cpu_cores ]; then 129f08c3bdfSopenharmony_ci [ $cpu_cores -gt 1 ]; echo $? 130f08c3bdfSopenharmony_ci else 131f08c3bdfSopenharmony_ci : $(( num_of_cpus = siblings / cpu_cores )) 132f08c3bdfSopenharmony_ci [ $num_of_cpus -gt 1 ]; echo $? 133f08c3bdfSopenharmony_ci fi 134f08c3bdfSopenharmony_ci} 135f08c3bdfSopenharmony_ci 136f08c3bdfSopenharmony_ciis_dual_core() { 137f08c3bdfSopenharmony_ci siblings=`grep siblings /proc/cpuinfo | uniq | cut -f2 -d':'` 138f08c3bdfSopenharmony_ci cpu_cores=`grep "cpu cores" /proc/cpuinfo | uniq \ 139f08c3bdfSopenharmony_ci | cut -f2 -d':'` 140f08c3bdfSopenharmony_ci if [ $siblings -eq $cpu_cores ]; then 141f08c3bdfSopenharmony_ci [ $cpu_cores -eq 2 ]; echo $? 142f08c3bdfSopenharmony_ci else 143f08c3bdfSopenharmony_ci : $(( num_of_cpus = siblings / cpu_cores )) 144f08c3bdfSopenharmony_ci [ $num_of_cpus -eq 2 ]; echo $? 145f08c3bdfSopenharmony_ci fi 146f08c3bdfSopenharmony_ci} 147f08c3bdfSopenharmony_ci 148f08c3bdfSopenharmony_ciget_kernel_version() { 149f08c3bdfSopenharmony_ci # Get kernel minor version 150f08c3bdfSopenharmony_ci export kernel_version=`uname -r | awk -F. '{print $1"."$2"."$3}' \ 151f08c3bdfSopenharmony_ci | cut -f1 -d'-'` 152f08c3bdfSopenharmony_ci} 153f08c3bdfSopenharmony_ci 154f08c3bdfSopenharmony_ciget_valid_input() { 155f08c3bdfSopenharmony_ci kernel_version=$1 156f08c3bdfSopenharmony_ci case "$kernel_version" in 157f08c3bdfSopenharmony_ci '2.6.26' | '2.6.27' | '2.6.28') 158f08c3bdfSopenharmony_ci export valid_input="0 1" ;; 159f08c3bdfSopenharmony_ci *) export valid_input="0 1 2" ;; 160f08c3bdfSopenharmony_ci esac 161f08c3bdfSopenharmony_ci} 162f08c3bdfSopenharmony_ci 163f08c3bdfSopenharmony_cianalyze_result_hyperthreaded() { 164f08c3bdfSopenharmony_ci sched_mc=$1 165f08c3bdfSopenharmony_ci pass_count=$2 166f08c3bdfSopenharmony_ci sched_smt=$3 167f08c3bdfSopenharmony_ci PASS="Test PASS" 168f08c3bdfSopenharmony_ci FAIL="Test FAIL" 169f08c3bdfSopenharmony_ci 170f08c3bdfSopenharmony_ci RC=0 171f08c3bdfSopenharmony_ci case "$sched_mc" in 172f08c3bdfSopenharmony_ci 0) 173f08c3bdfSopenharmony_ci case "$sched_smt" in 174f08c3bdfSopenharmony_ci 0) 175f08c3bdfSopenharmony_ci if [ $pass_count -lt 5 ]; then 176f08c3bdfSopenharmony_ci echo "${PASS}: cpu consolidation failed for" \ 177f08c3bdfSopenharmony_ci "sched_mc=$sched_mc & sched_smt=$sched_smt" 178f08c3bdfSopenharmony_ci else 179f08c3bdfSopenharmony_ci RC=1 180f08c3bdfSopenharmony_ci echo "${FAIL}: cpu consolidation passed for" \ 181f08c3bdfSopenharmony_ci "sched_mc=$sched_mc & sched_smt=$sched_smt" 182f08c3bdfSopenharmony_ci fi 183f08c3bdfSopenharmony_ci ;; 184f08c3bdfSopenharmony_ci *) 185f08c3bdfSopenharmony_ci if [ $pass_count -lt 5 ]; then 186f08c3bdfSopenharmony_ci RC=1 187f08c3bdfSopenharmony_ci echo "${FAIL}: cpu consolidation for" \ 188f08c3bdfSopenharmony_ci "sched_mc=$sched_mc & sched_smt=$sched_smt" 189f08c3bdfSopenharmony_ci else 190f08c3bdfSopenharmony_ci echo "${PASS}: cpu consolidation for" \ 191f08c3bdfSopenharmony_ci "sched_mc=$sched_mc & sched_smt=$sched_smt" 192f08c3bdfSopenharmony_ci fi 193f08c3bdfSopenharmony_ci ;; 194f08c3bdfSopenharmony_ci esac ;; 195f08c3bdfSopenharmony_ci *) 196f08c3bdfSopenharmony_ci if [ $pass_count -lt 5 ]; then 197f08c3bdfSopenharmony_ci RC=1 198f08c3bdfSopenharmony_ci echo "${FAIL}: cpu consolidation for" \ 199f08c3bdfSopenharmony_ci "sched_mc=$sched_mc & sched_smt=$sched_smt" 200f08c3bdfSopenharmony_ci else 201f08c3bdfSopenharmony_ci echo "${PASS}: cpu consolidation for" \ 202f08c3bdfSopenharmony_ci "sched_mc=$sched_mc & sched_smt=$sched_smt" 203f08c3bdfSopenharmony_ci fi 204f08c3bdfSopenharmony_ci ;; 205f08c3bdfSopenharmony_ci esac 206f08c3bdfSopenharmony_ci return $RC 207f08c3bdfSopenharmony_ci} 208f08c3bdfSopenharmony_ci 209f08c3bdfSopenharmony_cianalyze_package_consolidation_result() { 210f08c3bdfSopenharmony_ci sched_mc=$1 211f08c3bdfSopenharmony_ci pass_count=$2 212f08c3bdfSopenharmony_ci 213f08c3bdfSopenharmony_ci if [ $# -gt 2 ] 214f08c3bdfSopenharmony_ci then 215f08c3bdfSopenharmony_ci sched_smt=$3 216f08c3bdfSopenharmony_ci else 217f08c3bdfSopenharmony_ci sched_smt=-1 218f08c3bdfSopenharmony_ci fi 219f08c3bdfSopenharmony_ci 220f08c3bdfSopenharmony_ci PASS="Test PASS" 221f08c3bdfSopenharmony_ci FAIL="Test FAIL" 222f08c3bdfSopenharmony_ci 223f08c3bdfSopenharmony_ci RC=0 224f08c3bdfSopenharmony_ci if [ $hyper_threaded -eq $YES -a $sched_smt -gt -1 ]; then 225f08c3bdfSopenharmony_ci analyze_result_hyperthreaded $sched_mc $pass_count $sched_smt 226f08c3bdfSopenharmony_ci else 227f08c3bdfSopenharmony_ci case "$sched_mc" in 228f08c3bdfSopenharmony_ci 0) 229f08c3bdfSopenharmony_ci if [ $pass_count -lt 5 ]; then 230f08c3bdfSopenharmony_ci echo "${PASS}: cpu consolidation failed for" \ 231f08c3bdfSopenharmony_ci "sched_mc=$sched_mc" 232f08c3bdfSopenharmony_ci else 233f08c3bdfSopenharmony_ci RC=1 234f08c3bdfSopenharmony_ci echo "${FAIL}: cpu consolidation passed for" \ 235f08c3bdfSopenharmony_ci "sched_mc=$sched_mc" 236f08c3bdfSopenharmony_ci fi 237f08c3bdfSopenharmony_ci ;; 238f08c3bdfSopenharmony_ci *) 239f08c3bdfSopenharmony_ci if [ $pass_count -lt 5 ]; then 240f08c3bdfSopenharmony_ci RC=1 241f08c3bdfSopenharmony_ci echo "${FAIL}: consolidation at package level" \ 242f08c3bdfSopenharmony_ci "failed for sched_mc=$sched_mc" 243f08c3bdfSopenharmony_ci else 244f08c3bdfSopenharmony_ci echo "${PASS}: consolidation at package level" \ 245f08c3bdfSopenharmony_ci "passed for sched_mc=$sched_mc" 246f08c3bdfSopenharmony_ci fi 247f08c3bdfSopenharmony_ci ;; 248f08c3bdfSopenharmony_ci esac 249f08c3bdfSopenharmony_ci fi 250f08c3bdfSopenharmony_ci return $RC 251f08c3bdfSopenharmony_ci} 252f08c3bdfSopenharmony_ci 253f08c3bdfSopenharmony_cianalyze_core_consolidation_result() { 254f08c3bdfSopenharmony_ci sched_smt=$1 255f08c3bdfSopenharmony_ci pass_count=$2 256f08c3bdfSopenharmony_ci PASS="Test PASS" 257f08c3bdfSopenharmony_ci FAIL="Test FAIL" 258f08c3bdfSopenharmony_ci 259f08c3bdfSopenharmony_ci RC=0 260f08c3bdfSopenharmony_ci case "$sched_smt" in 261f08c3bdfSopenharmony_ci 0) 262f08c3bdfSopenharmony_ci if [ $pass_count -lt 5 ]; then 263f08c3bdfSopenharmony_ci echo "${PASS}: consolidation at core level failed" \ 264f08c3bdfSopenharmony_ci "when sched_smt=$sched_smt" 265f08c3bdfSopenharmony_ci else 266f08c3bdfSopenharmony_ci RC=1 267f08c3bdfSopenharmony_ci echo "${FAIL}: consolidation at core level passed for" \ 268f08c3bdfSopenharmony_ci "sched_smt=$sched_smt" 269f08c3bdfSopenharmony_ci fi ;; 270f08c3bdfSopenharmony_ci *) 271f08c3bdfSopenharmony_ci if [ $pass_count -lt 5 ]; then 272f08c3bdfSopenharmony_ci RC=1 273f08c3bdfSopenharmony_ci echo "${FAIL}: consolidation at core level failed for" \ 274f08c3bdfSopenharmony_ci "sched_smt=$sched_smt" 275f08c3bdfSopenharmony_ci else 276f08c3bdfSopenharmony_ci echo "${PASS}: consolidation at core level passed for" \ 277f08c3bdfSopenharmony_ci "sched_smt=$sched_smt" 278f08c3bdfSopenharmony_ci fi ;; 279f08c3bdfSopenharmony_ci esac 280f08c3bdfSopenharmony_ci return $RC 281f08c3bdfSopenharmony_ci} 282f08c3bdfSopenharmony_ci 283f08c3bdfSopenharmony_cianalyze_sched_domain_result(){ 284f08c3bdfSopenharmony_ci sched_mc=$1 285f08c3bdfSopenharmony_ci result=$2 286f08c3bdfSopenharmony_ci sched_smt=$3 287f08c3bdfSopenharmony_ci PASS="Test PASS" 288f08c3bdfSopenharmony_ci FAIL="Test FAIL" 289f08c3bdfSopenharmony_ci 290f08c3bdfSopenharmony_ci RC=0 291f08c3bdfSopenharmony_ci if [ $hyper_threaded -eq $YES ]; then 292f08c3bdfSopenharmony_ci if [ $sched_smt ]; then 293f08c3bdfSopenharmony_ci if [ "$result" = 0 ];then 294f08c3bdfSopenharmony_ci echo "${PASS}: sched domain test for" \ 295f08c3bdfSopenharmony_ci "sched_mc=$sched_mc & sched_smt=$sched_smt" 296f08c3bdfSopenharmony_ci else 297f08c3bdfSopenharmony_ci RC=1 298f08c3bdfSopenharmony_ci echo "${FAIL}: sched domain test for" \ 299f08c3bdfSopenharmony_ci "sched_mc=$sched_mc & sched_smt=$sched_smt" 300f08c3bdfSopenharmony_ci fi 301f08c3bdfSopenharmony_ci else 302f08c3bdfSopenharmony_ci if [ "$result" = 0 ];then 303f08c3bdfSopenharmony_ci echo "${PASS}: sched domain test for" \ 304f08c3bdfSopenharmony_ci "sched_mc=$sched_mc" 305f08c3bdfSopenharmony_ci else 306f08c3bdfSopenharmony_ci RC=1 307f08c3bdfSopenharmony_ci echo "${FAIL}: sched domain test for" \ 308f08c3bdfSopenharmony_ci "sched_mc=$sched_mc" 309f08c3bdfSopenharmony_ci fi 310f08c3bdfSopenharmony_ci fi 311f08c3bdfSopenharmony_ci else 312f08c3bdfSopenharmony_ci if [ "$result" = 0 ];then 313f08c3bdfSopenharmony_ci echo "${PASS}: sched domain test for sched_mc=$sched_mc" 314f08c3bdfSopenharmony_ci else 315f08c3bdfSopenharmony_ci RC=1 316f08c3bdfSopenharmony_ci echo "${FAIL}: sched domain test for sched_mc=$sched_mc" 317f08c3bdfSopenharmony_ci fi 318f08c3bdfSopenharmony_ci fi 319f08c3bdfSopenharmony_ci return $RC 320f08c3bdfSopenharmony_ci} 321