155 lines · bash
1#!/bin/bash2# SPDX-License-Identifier: GPL-2.03#4# Test governors5 6# protect against multiple inclusion7if [ $FILE_GOVERNOR ]; then8 return 09else10 FILE_GOVERNOR=DONE11fi12 13source cpu.sh14source cpufreq.sh15 16CUR_GOV=17CUR_FREQ=18 19# Find governor's directory path20# $1: policy, $2: governor21find_gov_directory()22{23 if [ -d $CPUFREQROOT/$2 ]; then24 printf "$CPUFREQROOT/$2\n"25 elif [ -d $CPUFREQROOT/$1/$2 ]; then26 printf "$CPUFREQROOT/$1/$2\n"27 else28 printf "INVALID\n"29 fi30}31 32# $1: policy33find_current_governor()34{35 cat $CPUFREQROOT/$1/scaling_governor36}37 38# $1: policy39backup_governor()40{41 CUR_GOV=$(find_current_governor $1)42 43 printf "Governor backup done for $1: $CUR_GOV\n"44 45 if [ $CUR_GOV == "userspace" ]; then46 CUR_FREQ=$(find_current_freq $1)47 printf "Governor frequency backup done for $1: $CUR_FREQ\n"48 fi49 50 printf "\n"51}52 53# $1: policy54restore_governor()55{56 __switch_governor $1 $CUR_GOV57 58 printf "Governor restored for $1 to $CUR_GOV\n"59 60 if [ $CUR_GOV == "userspace" ]; then61 set_cpu_frequency $1 $CUR_FREQ62 printf "Governor frequency restored for $1: $CUR_FREQ\n"63 fi64 65 printf "\n"66}67 68# param:69# $1: policy, $2: governor70__switch_governor()71{72 echo $2 > $CPUFREQROOT/$1/scaling_governor73}74 75# param:76# $1: cpu, $2: governor77__switch_governor_for_cpu()78{79 echo $2 > $CPUROOT/$1/cpufreq/scaling_governor80}81 82# SWITCH GOVERNORS83 84# $1: cpu, $2: governor85switch_governor()86{87 local filepath=$CPUFREQROOT/$1/scaling_available_governors88 89 # check if governor is available90 local found=$(cat $filepath | grep $2 | wc -l)91 if [ $found = 0 ]; then92 echo 1;93 return94 fi95 96 __switch_governor $1 $297 echo 0;98}99 100# $1: policy, $2: governor101switch_show_governor()102{103 cur_gov=find_current_governor104 if [ $cur_gov == "userspace" ]; then105 cur_freq=find_current_freq106 fi107 108 # switch governor109 __switch_governor $1 $2110 111 printf "\nSwitched governor for $1 to $2\n\n"112 113 if [ $2 == "userspace" -o $2 == "powersave" -o $2 == "performance" ]; then114 printf "No files to read for $2 governor\n\n"115 return116 fi117 118 # show governor files119 local govpath=$(find_gov_directory $1 $2)120 read_cpufreq_files_in_dir $govpath121}122 123# $1: function to be called, $2: policy124call_for_each_governor()125{126 local filepath=$CPUFREQROOT/$2/scaling_available_governors127 128 # Exit if cpu isn't managed by cpufreq core129 if [ ! -f $filepath ]; then130 return;131 fi132 133 backup_governor $2134 135 local governors=$(cat $filepath)136 printf "Available governors for $2: $governors\n"137 138 for governor in $governors; do139 $1 $2 $governor140 done141 142 restore_governor $2143}144 145# $1: loop count146shuffle_governors_for_all_cpus()147{148 printf "** Test: Running ${FUNCNAME[0]} for $1 loops **\n\n"149 150 for i in `seq 1 $1`; do151 for_each_policy call_for_each_governor switch_show_governor152 done153 printf "%s\n\n" "------------------------------------------------"154}155